web - Pourquoi avons-nous besoin de Nginx alors que nous avons CGI?
漂亮男人
漂亮男人 2017-05-16 17:27:17
0
7
699

Après avoir examiné les informations, j'ai une compréhension générale. Veuillez me corriger :

Un site Web fonctionne sur un ordinateur, avec la division du travail suivante.

1. Nginx 监听计算机的某一个端口(比如80), 等待用户的request

2. 远程有一个用户执行了一个request, Nginx监听到了, 然后把这个请求传给CGI程序(比如Python的WSGI)

3. CGI程序接受请求, 运行对应的代码, 然后返回一个response

La compréhension ci-dessus est-elle correcte ? Si elle est correcte, pourquoi Nginx existe-t-il ? Parce qu'il semble que même sans Nginx, il est possible d'utiliser directement CGI pour accepter les requêtes ?

Merci.

漂亮男人
漂亮男人

répondre à tous(7)
左手右手慢动作

Démon crabe. Un style Zhihu
Tout d'abord, corrigez la question en Pourquoi CGI et WebServer ne peuvent-ils pas se remplacer ? Parce que CGI est un standard et Nginx est une application. Les deux ne sont pas identiques, donc WebServer est utilisé à la place de Nginx ci-dessous. 为什么CGI与WebServer不能互相替代? 因为CGI是一种标准,Nginx则是一种应用。两者不是同类,所以下面用WebServer代替Nginx

CGI是一种标准,Nginx则是一种应用。
浏览器的角度来看,浏览器只负责发送请求,接收来自WebServer的返回结果并渲染之。对于WebServer来讲,它需要做的仅仅是接收请求,寻找浏览器请求的文件并且发送回去。如果仅仅是这样,世界就很完美了。
但是后来发生的事情大家都知道了。。我们不光要浏览静态网页,我们还要登陆论坛、发帖骂人灌水踩答案点赞刷声望等等。这些行为是静态的Html没法完成的。所以有了JS、Flash等等基于前端的交互技术。WebServer把包含了这些代码的文件发给浏览器,后者把它解析称它应该有的样子(或者不应该有的样子,比如IE6),我们可以在页面上看看动画什么的,这些称之为前段交互技术。
但是有些交互前端做不了, 比如我上次发了一个高清无码套图,我要看到大家的反应,点个赞啊楼主好人啊之类的,那么这个技术就要用到数据库,但是数据库本身是需要另外一种语言来操作的,这种语言可以是python、prel、Ruby、PHP等等,我们称之为动态语言。他们对数据库进行增删查改四大操作,并且返回结果给WebServer,后者再传给浏览器。

由于有很多动态语言和很多种Web服务器,他们彼此之间互不兼容,给程序员造成了很大的麻烦。那么,CGI应运而僧。CGI的定义是统一网关接口。从此WebServer收到后台动态交互请求就直接发给CGI,CGI发给动态语言,动态语言把结果发回给CGICGI再发回给WebServer,后面的事情你都清楚了。。。。

那么结论就是,CGI是一个翻译层,它的功能不是直接提供结果给浏览器,而是翻译来自WebServer的请求并转给后台的应用程序,并且把执行结果翻译成静态网页返回给WebServer

CGI est un standard, Nginx est une application.

Du point de vue du navigateur, le navigateur est uniquement responsable de l'envoi des requêtes, de la réception des résultats de retour du WebServer et de leur rendu. Pour le WebServer, il lui suffit de recevoir la requête, de trouver le fichier demandé par le Navigateur et de le renvoyer. Si seulement c’était le cas, le monde serait parfait.

Mais tout le monde sait ce qui s'est passé ensuite. . Nous devons non seulement parcourir des pages Web statiques, mais nous devons également nous connecter à des forums, publier des injures, voter contre des réponses et gagner en réputation, etc. Ces comportements ne peuvent pas être accomplis par du HTML statique. Il existe donc JS, Flash et d’autres technologies interactives basées sur le front-end. WebServer envoie le fichier contenant ces codes au Navigateur, qui l'analyse pour déterminer à quoi il devrait ressembler (ou à quoi il ne devrait pas ressembler, comme IE6). Nous pouvons regardez les animations et autres sur la page. C'est ce qu'on appelle les technologies d'interaction frontale. 🎜 Mais il y a certaines interfaces interactives qui ne peuvent pas être réalisées. Par exemple, j'ai posté une photo haute définition non censurée la dernière fois. Je veux voir les réactions de tout le monde, comme l'affiche, quelle bonne personne, etc. utilisation d'une base de données, mais la base de données elle-même l'est. Si un autre langage est nécessaire pour fonctionner, ce langage peut être python, prel, Ruby, PHP, etc. Nous l'appelons langage dynamique. Ils effectuent quatre opérations majeures d'ajout, de suppression, de vérification et de modification de la base de données, et renvoient les résultats au WebServer, qui les transmet ensuite au navigateur. 🎜 🎜Comme il existe de nombreux langages dynamiques et de nombreux types de serveurs Web, ils sont incompatibles les uns avec les autres, causant beaucoup de problèmes aux programmeurs. Ensuite, CGI est né. La définition de CGI est Unified Gateway Interface. Dès lors, le WebServer reçoit la demande d'interaction dynamique en arrière-plan et l'envoie directement au CGI. CGI l'envoie au langage dynamique, et le langage dynamique l'envoie. le résultat est renvoyé à CGI, CGI puis renvoyé au WebServer. Vous saurez ce qui se passe ensuite. . . . 🎜 🎜La conclusion est que CGI est une couche de traduction. Sa fonction n'est pas de fournir directement les résultats au navigateur, mais de traduire la requête du serveur Web et de la transférer vers l'application en arrière-plan, et exécutez-le Les résultats sont traduits en pages Web statiques et renvoyés au serveur Web, ils ne sont donc pas interchangeables. 🎜 🎜Finalement, je l'ai écrit à la va-vite, et beaucoup de mes expressions ne sont pas rigoureuses. Les commentaires sont les bienvenus. 🎜
習慣沉默
  • Équilibrage de charge
  • Proxy inversé
  • Mise à niveau fluide
  • Extension de la reprise après sinistre
  • Masquer le type de langage CGI
  • Enregistrer les journaux
  • gzip

Il y en a tellement, je pense qu'après y avoir réfléchi, je peux énumérer d'autres avantages de nginx qui sont au moins aussi longs que ceux ci-dessus

淡淡烟草味

La communication entre le navigateur et le serveur web est le protocole HTTP. Le navigateur ne supporte pas le protocole CGI/FastCGI, il est donc impossible d'abandonner Nginx et de communiquer directement avec FPM, PHP-CGI, etc.

巴扎黑

Nginx est essentiellement un serveur Web. Si vous utilisez CGI directement, alors ce CGI devient un serveur Web et la logique est déroutante.
CGI sert à gérer la logique dynamique.
Le serveur Web n'est qu'une implémentation d'un service HTTP. Il reçoit uniquement une requête puis répond avec une réponse correspondante (généralement une page HTML ou d'autres fichiers en fonction de la requête), quelle que soit la logique. Tous les traitements logiques sont confiés à CGI. Par exemple, vérification de la connexion de l'utilisateur, etc.

我想大声告诉你

Vous pouvez considérer Nginx comme un messager. Le travail principal n'est pas effectué par lui, mais sans lui,
. Les personnes qui effectuent réellement le travail sont celles qui vont chercher et remettent les tâches en personne.

Ce n’est pas que vous ne pouvez pas le faire, c’est que les gens qui font le travail ne se soucient que de la façon de bien faire le travail,
Je n'ai pas envie de faire beaucoup de courses et de faire de mes fonctions un salmigondis.

曾经蜡笔没有小新

Ne pensez-vous pas que sans Nginx, personne ne serait capable de faire le point 1 des 4 points que vous avez listés ?

漂亮男人

Les fichiers statiques sont essentiellement transmis à nginx pour traitement.
Pour les requêtes dynamiques, nginx équivaut à une couche de routage. Vous pouvez aller où vous voulez uniquement en vous concentrant sur le traitement d'une logique métier spécifique

.
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal