정보를 검토한 결과 전반적으로 이해가 되었습니다. 정정해 주시기 바랍니다.
웹사이트는 다음과 같은 업무 분업으로 컴퓨터에서 운영됩니다.
으아아아위의 이해가 맞다면 Nginx가 존재하는 이유는 무엇입니까? Nginx가 없어도 CGI를 사용하여 직접 요청을 수락할 수 있는 것 같으니
감사합니다.
ringa_lee2017-05-16 17:29:17
게 악마. 一请法儿
먼저 CGI와 WebServer가 서로를 대체할 수 없는 이유는 무엇입니까?로 질문을 수정하세요.
CGI
는 표준이고 Nginx
는 애플리케이션이기 때문입니다. 둘은 동일하지 않으므로 아래에서는 Nginx
대신 WebServer
를 사용합니다. 为什么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
发给动态语言,动态语言把结果发回给CGI
,CGI
再发回给WebServer
,后面的事情你都清楚了。。。。
那么结论就是,CGI
是一个翻译层,它的功能不是直接提供结果给浏览器,而是翻译来自WebServer的请求并转给后台的应用程序,并且把执行结果翻译成静态网页返回给WebServer
CGI
는 표준이고 Nginx
는 애플리케이션입니다.
브라우저
의 관점에서 볼 때 브라우저는 요청을 보내고 WebServer
에서 반환 결과를 수신하고 렌더링하는 역할만 담당합니다. WebServer
의 경우 요청을 수신하고 Browser
에서 요청한 파일을 찾아서 다시 보내기만 하면 됩니다. 이것만 있다면 세상은 완벽할 것이다.
WebServer
는 이러한 코드가 포함된 파일을 Browser
로 보내고, 브라우저는 이를 어떻게 보여야 하는지(또는 IE6처럼 보여서는 안 되는 모습) 분석합니다. 페이지의 애니메이션 등을 살펴보세요. 이를 프런트엔드 상호작용 기술이라고 합니다. #🎜🎜#
하지만 할 수 없는 인터랙티브 프런트 엔드가 있습니다. 예를 들어 지난번에 고화질 무수정 사진을 올렸는데, 포스터가 정말 좋은 사람인지 등 모든 사람들의 반응을 보고 싶습니다. 데이터베이스를 사용하지만 데이터베이스 자체는 작동하기 위해 다른 언어가 필요한 경우 Python, prel, Ruby, PHP 등이 될 수 있습니다. 우리는 이를 동적 언어
라고 부릅니다. 데이터베이스를 추가, 삭제, 확인 및 수정하는 네 가지 주요 작업을 수행하고 결과를 WebServer
에 반환한 다음 브라우저에 전달합니다. #🎜🎜#
#🎜🎜#동적 언어도 많고, 웹서버 종류도 다양하기 때문에 서로 호환되지 않아 프로그래머들에게 많은 고민을 안겨줍니다. 그러다가 CGI
가 탄생했습니다. CGI
의 정의는 통합 게이트웨이 인터페이스입니다. 그 이후부터 WebServer
는 백그라운드 동적 상호 작용 요청을 받아 CGI
로 직접 보냅니다. CGI
는 이를 동적 언어로 보내고 동적 언어는 보냅니다. 결과를 CGI
, CGI
로 다시 보낸 다음 WebServer
로 다시 보내면 다음에 무슨 일이 일어날지 알 수 있습니다. . . . #🎜🎜#
#🎜🎜#결론은 CGI
가 번역 레이어라는 것입니다. 그 기능은 브라우저에 직접 결과를 제공하는 것이 아니라 WebServer의 요청을 번역하여 백그라운드 애플리케이션에 전달하는 것입니다. 실행 결과는 정적 웹 페이지로 변환되어 WebServer
로 반환되므로 상호 교환이 불가능합니다. #🎜🎜#
#🎜🎜#드디어 급하게 썼는데 표현이 엄밀하지 않은 경우가 많아 댓글 환영합니다. #🎜🎜#習慣沉默2017-05-16 17:29:17
너무 많아서 생각해보면 위의 내용만큼 긴 nginx의 다른 장점도 나열할 수 있을 것 같습니다
淡淡烟草味2017-05-16 17:29:17
브라우저와 웹 서버 간의 통신은 HTTP 프로토콜입니다. 브라우저는 CGI/FastCGI 프로토콜을 지원하지 않기 때문에 Nginx를 버리고 FPM, PHP-CGI 등과 직접 통신하는 것은 불가능합니다.
巴扎黑2017-05-16 17:29:17
Nginx는 본질적으로 웹 서버입니다. CGI를 직접 사용하면 이 CGI가 웹 서버가 되며 논리가 혼란스럽습니다.
CGI는 동적 논리를 처리하기 위한 것입니다.
웹 서버는 단지 요청을 받은 다음 로직에 관계없이 해당 응답(일반적으로 HTML 페이지 또는 요청에 따른 기타 파일)으로 응답합니다. 모든 논리적 처리는 CGI에 맡겨집니다. 예를 들어 사용자 로그인 확인 등이 있습니다.
我想大声告诉你2017-05-16 17:29:17
Nginx를 메신저라고 생각하시면 됩니다. 주요 업무는 그 사람이 하는 게 아니고 그 사람이 없으면
실제로 일을 하는 사람들은 직접 가서 일을 줍고 넘겨주는 사람들이다.
못하는 게 아니라 일하는 사람들이 어떻게 하면 일을 잘할지에만 관심이 있다는 거,
나는 많은 심부름을 하고 내 기능을 뒤죽박죽으로 만들고 싶지 않습니다.
漂亮男人2017-05-16 17:29:17
정적 파일은 기본적으로 처리를 위해 nginx로 전달됩니다.
동적 요청의 경우 nginx는 라우팅 계층과 동일합니다. CGI는 특정 비즈니스 로직 처리에만 집중하면 됩니다.