web - Mengapa kita memerlukan Nginx apabila kita mempunyai CGI?
漂亮男人
漂亮男人 2017-05-16 17:27:17
0
7
724

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.

漂亮男人
漂亮男人

membalas semua(7)
左手右手慢动作

Setan ketam. Gaya Zhihu
Mula-mula, betulkan soalan kepada Mengapa CGI dan WebServer tidak boleh menggantikan satu sama lain? Kerana CGI ialah standard dan Nginx ialah aplikasi. Kedua-duanya tidak sama, jadi WebServer digunakan dan bukannya Nginx 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发给动态语言,动态语言把结果发回给CGICGI再发回给WebServer,后面的事情你都清楚了。。。。

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

CGI ialah standard, Nginx ialah aplikasi.

Dari perspektif pelayar, penyemak imbas hanya bertanggungjawab untuk menghantar permintaan, menerima hasil pulangan daripada WebServer dan menyampaikannya. Untuk WebServer, apa yang perlu dilakukan ialah menerima permintaan, cari fail yang diminta oleh Pelayar dan hantar semula. Sekiranya ini berlaku, dunia akan menjadi sempurna.

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. WebServer menghantar fail yang mengandungi kod ini kepada Browser, 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 memanggilnya bahasa dinamik. Mereka melakukan empat operasi utama menambah, memadam, menyemak dan mengubah suai pangkalan data dan mengembalikan hasil kepada WebServer, 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. Takrifan CGI ialah Antara Muka Gerbang Bersepadu. Sejak itu, WebServer menerima permintaan interaksi dinamik latar belakang dan menghantarnya terus ke CGI CGI menghantarnya ke bahasa dinamik dan bahasa dinamik menghantar hasilnya kembali ke CGI, CGI dan kemudian hantar kembali ke WebServer Anda akan tahu apa yang berlaku seterusnya. . . . 🎜 🎜Kesimpulannya ialah CGI ialah lapisan terjemahan fungsinya bukan untuk memberikan hasil secara langsung kepada penyemak imbas, tetapi untuk menterjemah 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. 🎜
習慣沉默
  • Pengimbangan beban
  • Proksi terbalik
  • Naik taraf lancar
  • Memperluas kapasiti dan pemulihan bencana
  • Sembunyikan jenis bahasa CGI
  • Rekod log
  • gzip

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan