<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          帶你輕松入門Nginx

          共 10707字,需瀏覽 22分鐘

           ·

          2022-05-10 13:23

          點(diǎn)擊關(guān)注公眾號(hào),Java干貨及時(shí)送達(dá)

          Java術(shù)?|?


          何為Nginx

          Nginx是一款輕量級(jí)的Web 服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器,在BSD-like 協(xié)議下發(fā)行。其特點(diǎn)是占有內(nèi)存少,并發(fā)能力強(qiáng),事實(shí)上Nginx的并發(fā)能力在同類型的網(wǎng)頁服務(wù)器中表現(xiàn)較好。以上內(nèi)容來自百度百科,由百度百科給出的介紹我們不難發(fā)現(xiàn),Nginx其實(shí)是一個(gè)反向代理服務(wù)器,作用其實(shí)有很多,最突出的是其負(fù)載均衡能力,Nginx的并發(fā)能力在同類型的網(wǎng)頁服務(wù)器中是較為出色的。

          安裝Nginx

          首先到官網(wǎng) http://nginx.org/en/download.html 下載Nginx的解壓包:

          image.png

          下載完成后將其上傳至Linux,并進(jìn)行解壓:

          tar?-zxvf?nginx-1.21.6.tar.gz

          解壓完成后進(jìn)入解壓后的目錄:

          [root@localhost?opt]#?cd?nginx-1.21.6/
          [root@localhost?nginx-1.21.6]#?ls
          auto??CHANGES??CHANGES.ru??conf??configure??contrib??html??LICENSE??man??README??src

          在該目錄下有一個(gè)名為configure的腳本,通過執(zhí)行該腳本即可安裝Nginx:

          ./configure

          正常情況下終端會(huì)提示缺少一些環(huán)境:

          [root@localhost?nginx-1.21.6]#?./configure
          checking?for?OS
          ?+?Linux?3.10.0-1127.el7.x86_64?x86_64
          checking?for?C?compiler?...?not?found

          ./configure:?error:?C?compiler?cc?is?not?found

          它提示缺少什么,我們就安裝什么就行。這里的提示信息說的是找不到C語言編譯器,所以來安裝一下C語言的編譯器:

          yum?install?-y?gcc

          安裝完成后,重新執(zhí)行configure腳本,該腳本還可以攜帶參數(shù),比如指定Nginx的安裝路徑:

          ./configure?--prefix=/usr/local/nginx

          通過指定prefix參數(shù)即可將Nginx安裝在指定的目錄下。不出意外,此時(shí)終端會(huì)再一次提醒你缺少相應(yīng)的依賴:

          ./configure:?error:?the?HTTP?rewrite?module?requires?the?PCRE?library.

          同樣的,安裝上就好了:

          yum?install?-y?pcre?pcre-devel

          安裝完成后再次執(zhí)行configure腳本,終端還是提示缺少相應(yīng)的依賴:

          ./configure:?error:?the?HTTP?gzip?module?requires?the?zlib?library.

          把它也安裝上:

          yum?install?-y?zlib?zlib-devel

          再一次來執(zhí)行configure腳本,這應(yīng)該是我們第四次執(zhí)行該腳本了,此時(shí)應(yīng)該是能夠安裝成功了。

          接下來執(zhí)行make指令:

          make

          該指令是Linux提供的一個(gè)編譯指令,通過make指令即可對(duì)安裝后的Nginx進(jìn)行編譯操作,編譯完成后進(jìn)行安裝操作:

          make?install

          此時(shí)我們可以來到/usr/local目錄下查看nginx是否安裝成功:

          [root@localhost?nginx-1.21.6]#?cd?/usr/local/
          [root@localhost?local]#?ls
          bin??etc??games??include??lib??lib64??libexec??nginx??sbin??share??src

          可以看到在該目錄下多出了一個(gè)nginx的目錄,這就是安裝好的nginx了,我們進(jìn)入到nginx的sbin目錄下,通過執(zhí)行nginx腳本即可啟動(dòng)nginx:

          cd?nginx
          cd?sbin
          ./nginx

          此時(shí)在瀏覽器上訪問 http://192.168.33.10/ :

          image.png

          說明nginx啟動(dòng)成功!如果你訪問不到,可以先看看防火墻是不是關(guān)閉狀態(tài),如果不是,那就把防火墻關(guān)閉再訪問試試:

          #?查看防火墻狀態(tài)
          systemctl?status?firewalld?
          #?關(guān)閉防火墻
          systemctl?stop?firewalld?

          若是想停止nginx,則執(zhí)行nginx -s stop指令,事實(shí)上,nginx提供了兩種方式來停止,分別如下:

          1. 1.?nginx -s stop

          2. 2.?nginx -s quit

          這兩種方式的結(jié)果都是一樣的,都會(huì)停止nginx,但過程不同,nginx -s stop是直接停止nginx,而nginx -s quit與之相比要柔和一些,它會(huì)等待已經(jīng)接收的連接請(qǐng)求處理完畢后再結(jié)束。

          一般情況下,我們都會(huì)制作一個(gè)nginx腳本服務(wù),然后使用腳本來啟動(dòng)它,這樣的好處是不用來到nginx的sbin目錄執(zhí)行nginx腳本了,當(dāng)我們需要啟動(dòng)nginx時(shí),在任何位置都可以啟動(dòng)。首先創(chuàng)建腳本服務(wù):

          touch?/usr/lib/systemd/system/nginx.service

          在該文件中填入如下內(nèi)容(需要注意的是如果你的nginx不是安裝在/usr/local/nginx下,則需要相應(yīng)地修改下面的路徑):

          [Unit]
          Description=nginx?-?web?server
          After=network.target?remote-fs.target?nss-lookup.target

          [Service]
          Type=forking
          PIDFile=/usr/local/nginx/logs/nginx.pid
          ExecStartPre=/usr/local/nginx/sbin/nginx?-t?-c?/usr/local/nginx/conf/nginx.conf
          ExecStart=/usr/local/nginx/sbin/nginx?-c?/usr/local/nginx/conf/nginx.conf
          ExecReload=/usr/local/nginx/sbin/nginx?-s?reload
          ExecStop=/usr/local/nginx/sbin/nginx?-s?stop
          ExecQuit=/usr/local/nginx/sbin/nginx?-s?quit
          PrivateTmp=true

          [Install]
          wantedBy=multi-user.target

          將其寫入文件后,需要重新加載一下系統(tǒng)服務(wù):

          systemctl?daemon-reload

          現(xiàn)在嘗試使用系統(tǒng)服務(wù)啟動(dòng)nginx:

          systemctl?start?nginx.service
          #?也可以簡寫成
          systemctl?start?nginx

          查看服務(wù)是否啟動(dòng):

          systemctl?status?nginx

          也可以通過查看進(jìn)程的方式驗(yàn)證:

          ps?-ef?|?grep?nginx

          目錄結(jié)構(gòu)

          nginx的目錄結(jié)構(gòu)比較簡單,分別如下:

          1. 1.?conf

          2. 2.?html

          3. 3.?logs

          4. 4.?sbin

          其中conf為配置文件目錄,里面存放的都是nginx的配置信息:

          -rw-r--r--.?1?root?root?1077?Apr?22?07:34?fastcgi.conf
          -rw-r--r--.?1?root?root?1077?Apr?22?07:34?fastcgi.conf.default
          -rw-r--r--.?1?root?root?1007?Apr?22?07:34?fastcgi_params
          -rw-r--r--.?1?root?root?1007?Apr?22?07:34?fastcgi_params.default
          -rw-r--r--.?1?root?root?2837?Apr?22?07:34?koi-utf
          -rw-r--r--.?1?root?root?2223?Apr?22?07:34?koi-win
          -rw-r--r--.?1?root?root?5349?Apr?22?07:34?mime.types
          -rw-r--r--.?1?root?root?5349?Apr?22?07:34?mime.types.default
          -rw-r--r--.?1?root?root?2656?Apr?22?07:34?nginx.conf
          -rw-r--r--.?1?root?root?2656?Apr?22?07:34?nginx.conf.default
          -rw-r--r--.?1?root?root??636?Apr?22?07:34?scgi_params
          -rw-r--r--.?1?root?root??636?Apr?22?07:34?scgi_params.default
          -rw-r--r--.?1?root?root??664?Apr?22?07:34?uwsgi_params
          -rw-r--r--.?1?root?root??664?Apr?22?07:34?uwsgi_params.default
          -rw-r--r--.?1?root?root?3610?Apr?22?07:34?win-utf

          nginx.conf為nginx的主要配置文件,其它配置文件都是被該文件引用的。而html目錄存放的是靜態(tài)文件:

          -rw-r--r--.?1?root?root?497?Apr?22?07:34?50x.html
          -rw-r--r--.?1?root?root?615?Apr?22?07:34?index.html

          比如訪問nginx時(shí)出現(xiàn)的Welcome to nginx!頁面就是該目錄下的index.html文件。logs目錄存放的是日志文件:

          -rw-r--r--.?1?root?root?415?Apr?22?07:49?access.log
          -rw-r--r--.?1?root?root?441?Apr?22?09:39?error.log

          access.log是訪問日志,當(dāng)通過nginx訪問某個(gè)資源時(shí)就會(huì)在該文件中被記錄;error.log是錯(cuò)誤日志,當(dāng)然就是用來記錄一些錯(cuò)誤操作了,比如404。最后是sbin目錄,該目錄下只有一個(gè)nginx主進(jìn)程文件,用來啟動(dòng)nginx。

          Nginx基礎(chǔ)配置

          在nginx中,最為關(guān)鍵的就屬conf目錄下的nginx.conf配置文件了,nginx的所有功能都需要在該配置文件中進(jìn)行配置,nginx.conf文件中的內(nèi)容較多,其中大部門配置都被注釋了,我們將這些被注釋的內(nèi)容先刪掉,看看nginx究竟配置了些什么:

          worker_processes??1;

          events?{
          ????worker_connections??1024;
          }

          http?{
          ????include???????mime.types;
          ????default_type??application/octet-stream;

          ????sendfile????????on;
          ????keepalive_timeout??65;

          ????server?{
          ????????listen???????80;
          ????????server_name??localhost;

          ????????location?/?{
          ????????????root???html;
          ????????????index??index.html?index.htm;
          ????????}

          ????????error_page???500?502?503?504??/50x.html;
          ????????location?=?/50x.html?{
          ????????????root???html;
          ????????}

          ????}
          }

          其中位于第一行的配置worker_processes 1表示開始一個(gè)業(yè)務(wù)進(jìn)程,在nginx中的工作模式是這樣的,nginx會(huì)開啟一個(gè)master進(jìn)程和多個(gè)worker進(jìn)程,這里的worker進(jìn)程就是業(yè)務(wù)進(jìn)程,master進(jìn)程并不處理業(yè)務(wù),而是負(fù)責(zé)調(diào)度worker進(jìn)程,業(yè)務(wù)由worker進(jìn)程負(fù)責(zé)處理。所以這里配置的就是worker進(jìn)程數(shù)了,通過ps -ef命令可以查看到nginx的詳細(xì)進(jìn)程:

          [root@localhost?sbin]#?ps?-ef?|?grep?nginx
          root??????1074?????1??0?09:49??????????00:00:00?nginx:?master?process?./nginx
          nobody????1075??1074??0?09:49??????????00:00:00?nginx:?worker?process
          root??????1077???932??0?09:49?pts/0????00:00:00?grep?--color=auto?nginx

          第二個(gè)配置worker_connections 1024表示每個(gè)worker進(jìn)程可以創(chuàng)建的連接數(shù)。

          include mime.types表示引入了一個(gè)名為mime.types的外部配置文件。這里又需要介紹一下mime.types的作用了,來看看這個(gè)文件里都是些什么內(nèi)容:

          types?{
          ????text/html????????????????????????????????????????html?htm?shtml;
          ????text/css?????????????????????????????????????????css;
          ????text/xml?????????????????????????????????????????xml;
          ????image/gif????????????????????????????????????????gif;
          ????image/jpeg???????????????????????????????????????jpeg?jpg;
          ????application/javascript???????????????????????????js;
          ????application/atom+xml?????????????????????????????atom;
          ????application/rss+xml??????????????????????????????rss;
          ????......
          }

          這里截取了一部分,但能夠看出這似乎是一個(gè)映射表,其實(shí)它是用來告訴瀏覽器返回的資源類型的,不知道大家有沒有注意過,當(dāng)你在瀏覽器上訪問一張圖片時(shí),瀏覽器會(huì)直接顯示圖片,而當(dāng)你訪問的是一個(gè).exe可執(zhí)行文件時(shí),瀏覽器又會(huì)進(jìn)行下載。那么瀏覽器是如何知道什么資源需要顯示,而什么資源又需要下載呢?其實(shí),瀏覽器靠的是請(qǐng)求頭中的資源類型來辨別的,我們來訪問一張百度的logo圖片:

          image.png

          再來訪問一個(gè)可執(zhí)行文件:

          image.png

          發(fā)現(xiàn)區(qū)別了嗎,它們的Content-Type值是不同的,瀏覽器正是通過這些值才能夠?qū)Σ煌馁Y源做出不同的處理。回到nginx中的mime.types文件,它是用來對(duì)資源做一個(gè)對(duì)應(yīng)的,舉個(gè)例子,如果文件是html、htm、shtml,那么nginx會(huì)統(tǒng)一返回Content-Type:text/html給瀏覽器;而如果文件是jpeg、jpg,那么nginx會(huì)統(tǒng)一返回Content-Type:image/jpeg給瀏覽器,這個(gè)告知資源類型的過程是由該文件完成的。事實(shí)上,互聯(lián)網(wǎng)中的文件類型非常多,這個(gè)文件不可能全部都能例舉到,如果有沒映射的類型,你當(dāng)然可以手動(dòng)將映射添加到mime.types中,比如:

          type{
          ??......
          ??video/mp4????mp4?mp7?mp8;
          ??......
          }

          通過這段配置,如果文件類型為mp4、mp7、mp8,nginx將統(tǒng)一返回給瀏覽器video/mp4類型。

          default_type application/octet-stream表示的是如果在mime.types文件中沒有找到對(duì)應(yīng)的映射,則統(tǒng)一返回給瀏覽器application/octet-stream類型,這是一個(gè)兜底的方案。

          sendfile on指的是數(shù)據(jù)零拷貝,當(dāng)你通過nginx下載一個(gè)資源時(shí),因?yàn)閚ginx始終還是個(gè)運(yùn)行在操作系統(tǒng)中的軟件,所以網(wǎng)絡(luò)請(qǐng)求一定是先由操作系統(tǒng)接收,操作系統(tǒng)再將請(qǐng)求交給nginx,nginx再從磁盤上獲取到用戶請(qǐng)求的資源,先將其讀取到nginx的緩存中,再將其復(fù)制到操作系統(tǒng)的緩存,最后由操作系統(tǒng)交給客戶端。以上是不開啟數(shù)據(jù)零拷貝的情況,如果開啟了數(shù)據(jù)零拷貝,則nginx將資源賦值給操作系統(tǒng)的這一步驟會(huì)被省略,操作系統(tǒng)將直接從磁盤上讀取資源并交給客戶端,這就是該項(xiàng)配置的作用。

          keepalive_timeout 65指的是保持連接的超時(shí)時(shí)間。

          接下來是整個(gè)配置文件中較為重要的一段配置:

          server?{
          ????????listen???????80;
          ????????server_name??localhost;

          ????????location?/?{
          ????????????root???html;
          ????????????index??index.html?index.htm;
          ????????}

          ????????error_page???500?502?503?504??/50x.html;
          ????????location?=?/50x.html?{
          ????????????root???html;
          ????????}
          }

          server表示nginx中的一個(gè)主機(jī),在nginx中可以配置多個(gè)主機(jī),每個(gè)主機(jī)相當(dāng)于是一個(gè)獨(dú)立的站點(diǎn),主機(jī)之間相互并不影響。其中listen 80表示監(jiān)聽80端口,server_name localhost表示當(dāng)前主機(jī)的主機(jī)名,而location /{}表示匹配請(qǐng)求的URI資源,當(dāng)匹配上了資源后,就會(huì)進(jìn)入location配置塊,在該配置塊中,root html指的是資源目錄,此時(shí)的資源將從nginx中的html目錄中尋找。?error_page 500 502 503 504 /50x.html表示當(dāng)產(chǎn)生這幾個(gè)狀態(tài)碼的錯(cuò)誤時(shí),將訪問/50x.html資源,而下面的location = /50x.html{}剛好配置的是這個(gè)資源,它將從nginx的html目錄下尋找這個(gè)資源。

          server_name

          在前面我們就介紹到了server_name,它表示的是當(dāng)前主機(jī)的主機(jī)名,也就是說,只有當(dāng)請(qǐng)求匹配到了該主機(jī)名,對(duì)應(yīng)的主機(jī)配置才會(huì)生效,舉一個(gè)例子,在nginx.conf中配置兩個(gè)主機(jī):

          http?{
          ????include???????mime.types;
          ????default_type??application/octet-stream;

          ????sendfile????????on;
          ????keepalive_timeout??65;

          ????server?{
          ????????listen???????80;
          ????????server_name??www.test1.com;

          ????????location?/?{
          ????????????root???/mysite/test1;
          ????????????index??index.html?index.htm;
          ????????}
          ????????error_page???500?502?503?504??/50x.html;
          ????????location?=?/50x.html?{
          ????????????root???html;
          ????????}
          ????}
          ????server?{
          ????????listen???????80;
          ????????server_name??www.test2.com;

          ????????location?/?{
          ????????????root???/mysite/test2;
          ????????????index??index.html?index.htm;
          ????????}
          ????????error_page???500?502?503?504??/50x.html;
          ????????location?=?/50x.html?{
          ????????????root???html;
          ????????}

          ????}
          }

          在這段配置中一共配置了兩個(gè)主機(jī),這兩個(gè)主機(jī)分別指向/mysite目錄下的兩個(gè)資源,所以先來創(chuàng)建這兩個(gè)資源,在Linux根目錄/下創(chuàng)建mysite目錄,并在mysite目錄下分別創(chuàng)建test1和test2目錄,這兩個(gè)目錄下分別有一個(gè)index.html文件。

          [root@localhost?mysite]#?pwd
          /mysite
          [root@localhost?mysite]#?ll
          total?0
          drwxr-xr-x.?2?root?root?24?May??3?11:51?test1
          drwxr-xr-x.?2?root?root?24?May??3?11:51?test2

          接著在Windows的hosts文件中配置一下域名映射:

          192.168.33.10?www.test1.com
          192.168.33.10?www.test2.com

          現(xiàn)在試著訪問一下這兩個(gè)站點(diǎn),首先是www.test1.com

          image.png

          其次是www.test2.com

          image.png

          而事實(shí)上,對(duì)于監(jiān)聽相同端口的不同域名,如果它們獲取的資源需要是一樣的,那么它們可以配置在一個(gè)server塊中:

          server?{
          ????????listen???????80;
          ????????server_name??www.test1.com;
          ????????server_name??www.test2.com;

          ????????location?/?{
          ????????????root???/mysite/test1;
          ????????????index??index.html?index.htm;
          ????????}

          ????????error_page???500?502?503?504??/50x.html;
          ????????location?=?/50x.html?{
          ????????????root???html;
          ????????}
          }

          也可以將域名配置寫在一個(gè)server_name上:

          server?{
          ????????listen???????80;
          ????????server_name??www.test1.com;?www.test2.com;
          }

          此時(shí)訪問www.test1.comwww.test2.com都將顯示的是test1 page!?server_name還支持通配符配置,比如我想配置一個(gè)以任何前綴開始的域名都能訪問到test1 page!,那么就需要這樣配置:

          server?{
          ????????listen???????80;
          ????????server_name??*.test1.com;

          ????????location?/?{
          ????????????root???/mysite/test1;?#?指向test1資源
          ????????????index??index.html?index.htm;
          ????????}

          ????????error_page???500?502?503?504??/50x.html;
          ????????location?=?/50x.html?{
          ????????????root???html;
          ????????}
          }

          比如訪問abc.test1.com

          image.png

          而如果將通配符寫在后面,將會(huì)匹配以任何后綴結(jié)尾的域名:

          server?{
          ????????listen???????80;
          ????????server_name??www.test1.com.*;

          ????????location?/?{
          ????????????root???/mysite/test2;?#?指向test2資源
          ????????????index??index.html?index.htm;
          ????????}

          ????????error_page???500?502?503?504??/50x.html;
          ????????location?=?/50x.html?{
          ????????????root???html;
          ????????}
          }

          此時(shí)訪問諸如www.test1.com.netwww.test1.com.org,都將訪問到test2 page!頁面:

          image.png

          server_name還支持正則匹配域名,這里也舉一個(gè)例子:

          server?{
          ????????listen???????80;
          ????????server_name??~^[0-9]+\.test1\.com$;

          ????????location?/?{
          ????????????root???/mysite/test1;?#?指向test1資源
          ????????????index??index.html?index.htm;
          ????????}

          ????????error_page???500?502?503?504??/50x.html;
          ????????location?=?/50x.html?{
          ????????????root???html;
          ????????}
          }

          此時(shí)所有以數(shù)字開頭,以.test1.com結(jié)尾的域名都將匹配到test1資源。

          本文作者:汪偉俊?為Java技術(shù)迷專欄作者?投稿,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載

          ????

          1、拖動(dòng)文件就能觸發(fā)7-Zip安全漏洞,波及所有版本

          2、進(jìn)程切換的本質(zhì)是什么?

          3、一次 SQL 查詢優(yōu)化原理分析:900W+ 數(shù)據(jù),從 17s 到 300ms

          4、Redis數(shù)據(jù)結(jié)構(gòu)為什么既省內(nèi)存又高效?

          5、IntelliJ IDEA快捷鍵大全 + 動(dòng)圖演示

          6、全球第三瀏覽器,封殺中國用戶這種操作!(文末送書)

          點(diǎn)

          點(diǎn)

          點(diǎn)點(diǎn)

          點(diǎn)

          瀏覽 69
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲小色网 | 蜜桃精品视频 | 欧美黄一级 | 国精产品一区二区三区黑人和中国 | 丁香婷婷五月天激情 |