<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>

          for fe - Nginx入門指南

          共 6594字,需瀏覽 14分鐘

           ·

          2022-01-01 21:05

          大廠技術(shù)  高級前端  Node進階

          點擊上方 程序員成長指北,關(guān)注公眾號

          回復(fù)1,加入高級Node交流群


          這份指南是對nginx的基本介紹,描述了用戶借助nginx可以實現(xiàn)的一些簡單任務(wù)。只支持運行在已經(jīng)安裝了nginx的讀者機器上;如果沒有安裝,請參考Installing nginx 頁面。

          這份指南描述了怎樣啟動和停止nginx以及重新加載配置,說明了配置文件的結(jié)構(gòu)以及如何啟動nginx以輸出靜態(tài)內(nèi)容,怎樣設(shè)置代理服務(wù)器 和怎樣連接FastCGI應(yīng)用。

          nginx有一個主進程和幾個工作進程。主進程的主要目的是為了讀取和評估配置并且維護工作進程。工作進程處理實際請求。nginx在工作進程中采用事件驅(qū)動模型和OS依賴機制有效分配請求。工作進程的數(shù)量取決于配置文件中定義的固定值或者是通過有效的CPU核數(shù)自動判定數(shù)量。工作進程的數(shù)量在配置文件中定義,可據(jù)給定的配置對工作進程的數(shù)量進行固定,也可以根據(jù)可用CPU內(nèi)核的數(shù)量進行自動調(diào)整。(參看 worker_processes).

          nginx及其各模塊的工作方式取決于配置文件。默認(rèn)情況下,配置文件名為nginx.conf,并放置在/usr/local/nginx/conf、/etc/nginx或/usr/local/etc/nginx.目錄中。

          啟動, 停止, 和重新加載配置文件

          啟動的時候直接運行nginx.exe或者nginx。如果nginx已經(jīng)啟動,就可以直接使用參數(shù)-s 來進行調(diào)用執(zhí)行,具體的使用語法如下:

          nginx -s signal

          signal 的位置可以是如下參數(shù):

          • stop —指令一經(jīng)發(fā)出,直接停止

          • quit — 等待所有的請求完成,再停止

          • reload — 重新加載配置文件nginx.conf

          • reopen —重新打開日志文件

          例如,想要停止nginx進程,(等待當(dāng)前所有的請求進程全部完成),可以使用如下命令:

          nginx -s quit

          注:此命令應(yīng)在啟動nginx的同一用戶下執(zhí)行。

          reload或重啟nginx,修改的配置文件才會被應(yīng)用。為了重新加載配置,執(zhí)行如下命令:

          nginx -s reload

          一旦主進程收到reload的信號,它就會檢查新的配置文件語法,并且嘗試應(yīng)用這個新的配置文件。如果執(zhí)行成功,主進程會啟用一個新的工作進程,然后給原來工作進程發(fā)送一個信號,讓它原來的工作進程停止。如果執(zhí)行失敗,主進程會回滾到原來的配置文件并繼續(xù)使用原來的配置文件進行執(zhí)行。原來的工作進程接收到停止命令之后,它會停止新的連接請求,但是當(dāng)前已經(jīng)建立的連接請求會等待其完成后終止。之后舊進程就會退出。

          可以借助Unix工具(如kill實用程序)將信號發(fā)送到nginx進程。在這種情況下,信號直接發(fā)送到具有給定進程ID的進程。這個進程ID就是nginx的主進程標(biāo)記,同時這個進程ID會被默認(rèn)寫入到文件夾/usr/local/nginx/logs或者/var/run下面。例如:如果主進程ID是1628,就發(fā)送指令QUIT來正常停止nginx,執(zhí)行下面命令:

          kill -s QUIT 1628

          為了得到正在運行的ngixn進程列表,可以通過ps指令得到:

          ps -ax | grep nginx

          獲取更多nginx信號信息,參考 Controlling nginx.

          配置文件結(jié)構(gòu)

          nginx由模塊組成,這些模塊由配置文件中指定的指令控制。指令分為簡單指令和塊指令。一個簡單的指令由名稱和參數(shù)組成,這些名稱和參數(shù)由空格分隔,并以分號(;)結(jié)尾。塊指令具有與簡單指令相同的結(jié)構(gòu),但它的結(jié)尾不是分號,而是一組由大括號({、})包圍的附加指令。如果一個塊指令在大括號中包含其他指令,則這個塊指令又叫做上下文 (例如: events, http, server, 和location).

          放在任何上下文之外的配置文件中的指令被認(rèn)為是在主上下文 中。event和http指令駐留在主上下文中,server駐留在http中,location駐留在server中。

          一行中在#符號后面的是注釋

          提供靜態(tài)資源內(nèi)容

          web服務(wù)器最重要的任務(wù)是對外提供文件,例如(圖片或者靜態(tài)HTML網(wǎng)頁)。示例:不同的請求會響應(yīng)到不同的文件夾路徑: /data/www(包含靜態(tài)HTML文件) /data/images (包含圖片)。此過程需要編輯配置文件,并在附有兩個location塊的http塊中設(shè)置server塊。參考:server指令 http指令 location 指令

          首先,創(chuàng)建一個文件夾/data/www 把有內(nèi)容的index.html 文件放到里面。并且創(chuàng)建/data/images文件夾,在里面放一些圖片。

          第二步,打開配置文件。默認(rèn)的配置文件已經(jīng)包含了幾個server塊指令,但是被注釋了,現(xiàn)在把這些server塊指令放開注釋。

          http {
            server {
            }
          }

          通常,配置文件包含幾個server塊指令,這些塊指令通過不同的服務(wù)名字(server names)分發(fā)監(jiān)聽(distinguished listen)在不同的端口。一旦nginx決定哪個服務(wù)器處理請求,它就會根據(jù)server塊指令中定義的location指令的參數(shù)匹配請求頭中指定的URI。

          在server塊指令中添加location指令:

          location / {
            root /data/www;
          }

          這個location塊詳述了與URI請求相匹配的“/”前綴。如果匹配到請求,這個 URI 會被轉(zhuǎn)到 root 指令的路徑。,也就是說,所有請求文件都會直接請求到本地文件系統(tǒng)的/data/www路徑。如果有多個匹配的location塊,nginx會選擇最長前綴的那個。上面提供的location塊是長度只有1的最短前綴,因此,其它所有的location塊都匹配失敗的話,這個location塊指令才會被使用。

          下一步,添加第二個location塊:

          location /images/ {
            root /data;
          }

          這個會匹配以/images開頭的請求(/也會匹配請求,只不過這個前綴更短)。

          server塊指令配置結(jié)果如下:

          server {
            location / {
              root /data/www;
            }
            location /images/ {
              root /data;
            }
          }

          一個正常的服務(wù)器配置文件監(jiān)聽在80端口上,并且可以在本機上成功訪問http://localhost/。以/images/開頭請求的URI地址,服務(wù)器會從/data/images文件夾下面返回對應(yīng)的文件。例如,請求/data/images/example.png這個文件,nginx服務(wù)器會返回http://localhost/images/example.png。如果服務(wù)器沒有這個文件會返回404 錯誤。不是以/images/開頭的請求,就會被映射到/data/www 文件夾。例如, 請求nginx/data/www/some/example.html,服務(wù)器會響應(yīng)http://localhost/some/example.html 這個文件。

          為了應(yīng)用一個新的配置文件,如果nginx還沒有啟動,就直接啟動nginx服務(wù)器,如果已經(jīng)啟動,直接使用下面指令發(fā)送到nginx的主進程中,如下: 如果nginx尚未啟動,則啟動nginx,或者向nginx的主進程發(fā)送重新加載信號,執(zhí)行:

          nginx -s reload

          一些情況下( ***),沒有達到預(yù)期的效果,你可以嘗試通過查看access.log和 error.log (通常在/usr/local/nginx/logs或者/var/log/nginx) 日志文件來找原因。

          設(shè)置一個簡單的代理服務(wù)器 使用最頻繁的是設(shè)置一個代理服務(wù)器,也即接受請求,并把所有的請求轉(zhuǎn)到被代理的服務(wù)器上,獲取到響應(yīng)之后再發(fā)送到客戶端。

          我們能配置一個基本的代理服務(wù)器,它的 ***圖片文件請求和其它的全部請求都會被發(fā)送到代理服務(wù)器上。本例中,兩個服務(wù)器定義在一個nginx實例。

          首先,通過在配置文件中添加server塊指令的方式來定義一個代理服務(wù)器。

          server {
            listen 8080;
            root /data/up1;
            location / {}
          }

          這個簡單的服務(wù)器會監(jiān)聽8080端口(之前, 由于使用了標(biāo)準(zhǔn)端口80,因此尚未指定listen指令)并且映射所有的請求到本地文件系統(tǒng)的/data/up1文件夾。創(chuàng)建這個文件夾并放一個文件index.html。需要注意的是 server上下文就是這個根指令的位置。例如 當(dāng)選擇用于提供請求的location塊指令不包括根指令時,使用這樣的根指令(root /data/up1)。

          接下來,使用上一節(jié)中的服務(wù)器配置,并將其修改為代理服務(wù)器配置。在第一個位置塊中,使用參數(shù)中指定的代理服務(wù)器的協(xié)議、名稱和端口(在我們的示例中,它是[http://localhost:8080)放置proxy](http://localhost:8080)放置proxy_pass指令:

          server {
            location / {
              proxy_pass http://localhost:8080;
            }
            location /images/ {
              root /data;
            }
          }

          我們修改第二個location指令塊,這個指令塊會把當(dāng)前的/images前綴請求映射到/data/images文件夾中,為了匹配更多的圖片類型請求,location塊指令修改如下:

          location ~ \.(gif|jpg|png)$ {
            root /data/images;
          }

          使用正則表達式~來匹配所有以 .gif, .jpg, 和.png結(jié)尾的URIs,響應(yīng)的請求會被映射到/data/images文件夾中。

          nginx在匹配location請求的時候,首先檢查location 指令的特殊前綴,最長前綴(),最后檢查正則。如果這個請求匹配到正則,ngixn會選中這個location,否則,會跳過找到最前的一個()。

          代理服務(wù)器的配置結(jié)果看起來就是這樣子:

          server {
            location / {
              proxy_pass http://localhost:8080/;
            }
            location ~ \.(gif|jpg|png)$ {
              root /data/images;
            }
          }

          這個服務(wù)器將會過濾后綴為 .gif, .jpg, 或者 .png 的然后分發(fā)到/data/images文件夾(通過在root中添加URI參數(shù)) ,并且其它的請求會被代理到上面的server配置()中http://localhost:8080/。

          為了使用最新的配置,就像前面一樣,向nginx發(fā)送一個reload信號。

          這里有更多的 more 指令可以使用在代理連接配置中。

          啟用 FastCGI 代理 nginx也能把請求路由到FastCGI服務(wù)上,它運行程序使用各種框架和編程語言(如PHP)。

          使用FastCGI服務(wù)器的最基本的nginx配置包括使用fastcgipass 指令而不是proxypass指令,以及fastcgiparam指令來設(shè)置傳遞給FastCGI服務(wù)器的參數(shù)。假設(shè)FastCGI服務(wù)在localhost:9000可以訪問,以上面一部分的配置為基礎(chǔ),替換proxypass指令為fastcgipass,并且修改參數(shù)為 localhost:9000。在PHP中, SCRIPTFILENAME參數(shù)為定義的腳本名稱 QUERY_STRING參數(shù)為被請求的參數(shù)**,最終的配置如下:

          server {
            location / {
              fastcgi_pass  localhost:9000;
              fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
              fastcgi_param QUERY_STRING    $query_string;
            }
            location ~ \.(gif|jpg|png)$ {
              root /data/images;
            }
          }

          這個服務(wù)器設(shè)置會路由所有除了靜態(tài)圖片的請求,通過FastCGI協(xié)議代理到localhost:9090代理服務(wù)器上。

          譯自:https://www.zcfy.cc/article/nginx-beginner-s-guide

          Node 社群


          我組建了一個氛圍特別好的 Node.js 社群,里面有很多 Node.js小伙伴,如果你對Node.js學(xué)習(xí)感興趣的話(后續(xù)有計劃也可以),我們可以一起進行Node.js相關(guān)的交流、學(xué)習(xí)、共建。下方加 考拉 好友回復(fù)「Node」即可。


             “分享、點贊在看” 支持一波??

          瀏覽 58
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  亚洲 青青草 | 天天干天天看综合网站 | 欧美插逼网站 | 中文无码免费一区二区三区 | 国产免费一区 |