Selepas menyemak maklumat, saya mempunyai pemahaman umum Sila betulkan saya:
Sebuah laman web sedang berjalan pada komputer, dengan pembahagian kerja berikut.
1. Nginx 监听计算机的某一个端口(比如80), 等待用户的request
2. 远程有一个用户执行了一个request, Nginx监听到了, 然后把这个请求传给CGI程序(比如Python的WSGI)
3. CGI程序接受请求, 运行对应的代码, 然后返回一个response
Adakah pemahaman di atas betul, kenapa Nginx wujud?
Terima kasih.
Setan ketam. Gaya Zhihu
Mula-mula, betulkan soalan kepada
Mengapa CGI dan WebServer tidak boleh menggantikan satu sama lain?
KeranaCGI
ialah standard danNginx
ialah aplikasi. Kedua-duanya tidak sama, jadiWebServer
digunakan dan bukannyaNginx
di bawah.为什么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
ialah standard,Nginx
ialah aplikasi.Dari perspektif
Tetapi semua orang tahu apa yang berlaku seterusnya. . Kami bukan sahaja perlu menyemak imbas halaman web statik, tetapi kami juga perlu log masuk ke forum, menyiarkan kata-kata kutukan, menolak jawapan dan mendapatkan reputasi, dsb. Tingkah laku ini tidak boleh dicapai dengan Html statik. Jadi terdapat JS, Flash dan teknologi interaktif berasaskan front-end lain.pelayar
, penyemak imbas hanya bertanggungjawab untuk menghantar permintaan, menerima hasil pulangan daripadaWebServer
dan menyampaikannya. UntukWebServer
, apa yang perlu dilakukan ialah menerima permintaan, cari fail yang diminta olehPelayar
dan hantar semula. Sekiranya ini berlaku, dunia akan menjadi sempurna.WebServer
menghantar fail yang mengandungi kod ini kepadaBrowser
, yang menghuraikannya kepada rupa yang sepatutnya (atau rupa yang tidak sepatutnya, seperti IE6), Kita boleh lihat animasi dan seumpamanya pada halaman ini dipanggil teknologi interaksi hadapan. 🎜 Tetapi terdapat beberapa bahagian hadapan interaktif yang tidak boleh dilakukan Sebagai contoh, saya menyiarkan gambar tanpa penapisan definisi tinggi lepas saya ingin melihat reaksi semua orang, seperti poster, orang yang baik, dan lain-lain penggunaan pangkalan data, tetapi pangkalan data itu sendiri adalah Jika bahasa lain diperlukan untuk beroperasi, bahasa ini boleh menjadi python, prel, Ruby, PHP, dll. Kami memanggilnyabahasa dinamik
. Mereka melakukan empat operasi utama menambah, memadam, menyemak dan mengubah suai pangkalan data dan mengembalikan hasil kepadaWebServer
, yang kemudiannya menghantarnya ke penyemak imbas. 🎜 🎜Memandangkan terdapat banyak bahasa dinamik dan pelbagai jenis pelayan web, ia tidak serasi antara satu sama lain, menyebabkan banyak masalah kepada pengaturcara. Kemudian,CGI
wujud. TakrifanCGI
ialah Antara Muka Gerbang Bersepadu. Sejak itu,WebServer
menerima permintaan interaksi dinamik latar belakang dan menghantarnya terus keCGI
CGI
menghantarnya ke bahasa dinamik dan bahasa dinamik menghantar hasilnya kembali keCGI
,CGI
dan kemudian hantar kembali keWebServer
Anda akan tahu apa yang berlaku seterusnya. . . . 🎜 🎜Kesimpulannya ialahCGI
ialah lapisan terjemahan fungsinya bukan untuk memberikan hasil secara langsung kepada penyemak imbas, tetapi untukmenterjemah permintaan daripada WebServer dan memindahkannya ke aplikasi latar belakang, dan. laksanakannya Hasilnya diterjemahkan ke dalam halaman web statik dan dikembalikan ke WebServer
, jadi ia tidak boleh ditukar ganti. 🎜 🎜Akhirnya, saya menulisnya dengan tergesa-gesa, dan banyak daripada ungkapan saya yang tidak ketat adalah dialu-alukan. 🎜Terlalu banyak, saya rasa selepas memikirkannya saya boleh menyenaraikan manfaat lain nginx yang sekurang-kurangnya sama seperti di atas
Komunikasi antara penyemak imbas dan pelayan web ialah protokol HTTP. Penyemak imbas tidak menyokong protokol CGI/FastCGI, jadi mustahil untuk meninggalkan Nginx dan berkomunikasi secara langsung dengan FPM, PHP-CGI, dsb.
Nginx pada asasnya adalah pelayan web Jika anda menggunakan CGI secara langsung, maka CGI ini menjadi pelayan web, dan logiknya mengelirukan.
CGI adalah untuk mengendalikan logik dinamik.
Pelayan web hanyalah pelaksanaan perkhidmatan HTTP Ia hanya menerima permintaan dan kemudian membalas dengan respons yang sepadan (biasanya halaman HTML, atau fail lain bergantung pada permintaan), tanpa mengira sebarang logik. Semua pemprosesan logik dibuang ke CGI. Contohnya, pengesahan log masuk pengguna, dsb.
Anda boleh menganggap Nginx sebagai messenger Kerja utama tidak dilakukan olehnya, tetapi tanpa dia,
Orang yang benar-benar melakukan kerja adalah mereka yang pergi mengambil dan menyerahkan tugas secara peribadi.
Bukannya anda tidak boleh melakukannya, tetapi orang yang melakukan kerja hanya mengambil berat tentang cara melakukan kerja dengan baik,
Saya tidak mahu melakukan banyak tugasan dan menjadikan fungsi saya tidak bermaya.
Tidakkah anda fikir tanpa Nginx, tiada siapa yang akan dapat melakukan titik 1 daripada 4 mata yang anda senaraikan?
Fail statik pada asasnya diserahkan kepada nginx untuk diproses.
Untuk permintaan dinamik, nginx adalah bersamaan dengan lapisan penghalaan Anda boleh pergi ke mana-mana sahaja yang anda mahukan CGI hanya perlu memfokuskan pada pemprosesan logik perniagaan tertentu