『壹』 Nginx配置文件詳解
說到該指令 ,首先得闡述一下什麼是所謂的 「驚群問題」,可以參考 WIKI網路的解釋。就Nginx的場景來解釋的話大致的意思就是:當一個新網路連接來到時,多個worker進程會被同時喚醒,但僅僅只有一個進程可以真正獲得連接並處理之。如果每次喚醒的進程數目過多的話,其實是會影響一部分性能的。
所以在這里,如果accept_mutex on,那麼多個worker將是以串列方式來處理,其中有一個worker會被喚醒;反之若accept_mutex off,那麼所有的worker都會被喚醒,不過只有一個worker能獲取新連接,其它的worker會重新進入休眠狀態。
用rewrite轉發的話,url會發生變化的,那就用proxy_pass吧,於是添加了如下的配置:
在現有環境的nginx里添加這段配置之後,訪問卻始終轉不過去,查看nginx日誌也只能看到是404信息,並沒有更多定位問題的信息。檢查了許久也沒找到原因,於是重新裝了一台新nginx,裡面只加上面這段配置,結果nginx是能夠轉發成功的,這說明單獨來看這條location的配置是沒有問題的,很有可能是現有環境nginx里的某些配置影響到了這個轉發。
為了定位問題原因,我將aaa.example.com虛擬主機下的其他配置注意注釋掉來調試,最後發現當注釋掉proxy_set_header Host $http_host ;這條配置之後,就能成功轉發了。這才注意到是反向代理配置的問題。現有環境中原有的配置也不能隨便刪掉,上網查了下原因,找到下面這種解決方案:
即,在location裡面添加一條proxy_set_header Host http_host時,則不改變請求頭的值,所以當要轉發到bbb.example.com的時候,請求頭還是aaa.example.com的Host信息,就會有問題;當Host設置為$proxy_host時,則會重新設置請求頭為bbb.example.com的Host信息。
另外,關於proxy_pass轉發url的參數,可以通過在location中用rewrite來做,所以完善後的配置如下:
在location用rewrite改變了URI之後,proxy_pass將使用改變後的URI。上面例子(.*)是將所有參數傳給 1會拼接在 http://bbb.example.com 後面。
先來看下proxy_set_header的語法
允許重新定義或者添加發往後端伺服器的請求頭。value可以包含文本、變數或者它們的組合。 當且僅當當前配置級別中沒有定義proxy_set_header指令時,會從上面的級別繼承配置。 默認情況下,只有兩個請求頭會被重新定義:
當匹配到/customer/straightcustomer/download時,使用crmtest處理,到upstream就匹配到crmtest.aty.sohuno.com,這里直接轉換成IP進行轉發了。假如crmtest.aty.sohuno.com是在另一台nginx下配置的,ip為10.22.10.116,則$proxy_host則對應為10.22.10.116。此時相當於設置了Host為10.22.10.116。如果想讓Host是crmtest.aty.sohuno.com,則進行如下設置:
如果不想改變請求頭「Host」的值,可以這樣來設置:
但是,如果客戶端請求頭中沒有攜帶這個頭部,那麼傳遞到後端伺服器的請求也不含這個頭部。 這種情況下,更好的方式是使用$host變數——它的值在請求包含「Host」請求頭時為「Host」欄位的值,在請求未攜帶「Host」請求頭時為虛擬主機的主域名:
此外,伺服器名可以和後端伺服器的埠一起傳送:
如果某個請求頭的值為空,那麼這個請求頭將不會傳送給後端伺服器:
nginx配置項,裡面的配置項有代理https,http,代理靜態文件,H5分發,代理TCP連接,能滿足大多數搭建測試環境所要用的nginx的情況,大家碰到要使用nginx的時候可以參考下
『貳』 如何查看linux 下 nginx配置
默認的路徑是你安裝時候指定的
如果用的lnmp之類的安裝包
你可以在shell下
whereisnginx
找到相應的路徑之後
在nginx下的conf文件夾里看配置文件,日誌文件如果記錄了話
在配置文件里有路徑的~
『叄』 nginx 查看調用了哪些配置文件
Nginx配置文件主要分成四部分:main(全局設置)、server(主機設置)、upstream(上游伺服器設置,主要為反向代理、負載均衡相關配置)和 location(URL匹配特定位置後的設置),每部分包含若干個指令。
main部分設置的指令將影響其它所有部分的設置;
server部分的指令主要用於指定虛擬主機域名、IP和埠;
upstream的指令用於設置一系列的後端伺服器,設置反向代理及後端伺服器的負載均衡;location部分用於匹配網頁位置(比如,根目錄「/」,「/images」,等等)。
他們之間的關系式:server繼承main,location繼承server;upstream既不會繼承指令也不會被繼承。它有自己的特殊指令,不需要在其他地方的應用。
『肆』 如何驗證Nginx配置文件是否准確
如果是擔心nginx配置文件有錯誤,可以使用nginx -t命令檢測配置文件。
如果是服務配置是否正確,只能啟動後,自己去訪問,才能知道是否正確。
『伍』 Nginx相關知識點
Nginx是lgor Sysoev為俄羅斯訪問量第二的rambler.ru站點設計開發的。從2004年發布至今,憑借開源的力量,已經接近成熟與完善。
Nginx功能豐富,可作為HTTP伺服器,也可作為反向代理伺服器,郵件伺服器。支持FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等功能。並且支持很多第三方的模塊擴展。
Nginx的穩定性、功能集、示例配置文件和低系統資源的消耗讓他後來居上,在全球活躍的網站中有12.18%的使用比率,大約為2220萬個網站。
自行安裝
正向代理: 代理伺服器站在客戶端那邊就是正向代理;
反向代理: 代理伺服器站在原始伺服器那邊就是反向代理;
詳解參考點擊 Nginx正向代理與反向代理
Nginx在做反向代理時,提供性能穩定,並且能夠提供配置靈活的轉發功能。
Nginx可以根據不同的正則匹配,採取不同的轉發策略,比如圖片文件結尾的走文件伺服器,動態頁面走web伺服器,只要你正則寫的沒問題,又有相對應的伺服器解決方案,你就可以隨心所欲的玩。
並且Nginx對返回結果進行錯誤頁跳轉,異常判斷等。如果被分發的伺服器存在異常,他可以將請求重新轉發給另外一台伺服器,然後自動去除異常伺服器。
如果你的nginx伺服器給2台web伺服器做代理,負載均衡演算法採用輪詢,那麼當你的一台機器web程序iis關閉,也就是說web不能訪問,那麼nginx伺服器分發請求還是會給這台不能訪問的web伺服器,如果這里的響應連接時間過長,就會導致客戶端的頁面一直在等待響應,對用戶來說體驗就打打折扣,這里我們怎麼避免這樣的情況發生呢。這里我配張圖來說明下問題。
如果負載均衡中其中web2發生這樣的情況,nginx首先會去web1請求,但是nginx在配置不當的情況下會繼續分發請求道web2,然後等待web2響應,直到我們的響應時間超時,才會把請求重新分發給web1,這里的響應時間如果過長,用戶等待的時間就會越長。
下面的配置是解決方案之一:
如果使用upstream指令配置了一組伺服器作為被代理伺服器,伺服器中的訪問演算法遵循配置的負載均衡規則,同時可以使用該指令配置在發生哪些異常情況時,將請求順次交由下一組伺服器處理。
狀態值可以是:error|timeout|invalid_header|http_500|http_502|http_503|http_504|http_404|off
Nginx提供的負載均衡策略有2種:內置策略和擴展策略。
內置策略: 1.輪詢;2.加權輪詢;3.Ip hash;
擴展策略: 就天馬行空,只有你想不到的沒有他做不到的啦,你可以參照所有的負載均衡演算法,給他一一找出來做下實現。
Ip hash演算法,對客戶端請求的ip進行hash操作,然後根據hash結果將同一個客戶端ip的請求分發給同一台伺服器進行處理,可以解決session不共享的問題。
eg:
開啟簡單的緩存配置,只需要兩個指令:proxy_cache_path和proxy_cache。
proxy_cache_path: 配置緩存的存放地址和其他的一些常用配置;
proxy_cache:指令是為了啟動緩存;
相關配置說明:
該指令用於定義滿足條件的響應不會被保存到緩存中。在條件字元串中至少有一個條件不為空或者0,符合這樣條件的響應才不會被緩存。
舉例如下
其中,cookie_nocache、arg_nocache...皆為變數,可以根據你訪問的匹配策略來設置,其值只有2類,0和非0;
訪問匹配策略例如:
如果在此鏈式配置中,只要有一個值不為0,則不會cache;例如:
則不會被cache.
註:一般會配合proxy_cache_bypass共同使用;
該指令用於定義哪些情況不從cache讀取,直接從backend獲取資源;配置方式同proxy_no_cache。
給緩存數據定義一個鍵,例如
該指令用於設置緩存哪些HTTP方法,默認緩存HTTP GET/HEAD方法,不緩存HTTP POST 方法.。
設置不同響應碼的緩存時間,當不指定響應碼的時候,例如
只對響應碼為200,301,302的訪問請求資源設置緩存時間,此外可以個性化定製,例如:
此外,還可以在相應header里設置優先順序更高的緩存有效時間:
不緩存包含在field的響應header,可以設置的值有:「X-Accel-Redirect」, 「X-Accel-Expires」, 「X-Accel-Limit-Rate」,「X-Accel-Buffering」, 「X-Accel-Charset」, 「Expires」, 「Cache-Control」, 「Set-Cookie」 (0.8.44), and 「Vary」。
如果上述的header field沒有設置為忽略,則header filed中有「X-Accel-Expires」, 「Expires」, 「Cache-Control」, 「Set-Cookie」, and 「Vary」的話,響應會被緩存。
該指令用於設置緩存的最小使用次數,默認值為1
源站有問題時,nginx可以通過proxy_cache_use_stale指令開啟容錯能力,即使用緩存內容來響應客戶端的請求。舉例如下:
如上配置表示,當作為cache的NGINX收到源站返回error、timeout或者其他指定的5XX錯誤,並且在其緩存中有請求文件的陳舊版本,則會將這些陳舊版本的文件而不是錯誤信息發送給客戶端。
使用NGINX,不需要建立一個RAID(磁碟陣列)。如果有多個硬碟,NGINX可以用來在多個硬碟之間分割緩存。舉例如下:
在這份配置中,使用了3個獨立的緩存,每個緩存專用一塊硬碟,另外,3個獨立的線程池也各自專用一塊硬碟。
緩存之間(其結果就是磁碟之間)的負載均衡使用split_clients模塊,split_clients非常適用於這個任務。
在 proxy_cache_path指令中設置 use_temp_path=off ,表示NGINX會將臨時文件保存在緩存數據的同一目錄中。這是為了避免在更新緩存時,磁碟之間互相復制響應數據。
通過訪問日誌,你可以得到用戶地域來源、跳轉來源、使用終端、某個URL訪問量等相關信息;
通過錯誤日誌,你可以得到系統某個服務或server的性能瓶頸等。
因此,將日誌好好利用,你可以得到很多有價值的信息。
打開nginx.conf配置文件:vim /usr/local/nginx/conf/nginx.conf
日誌部分內容:
#access_log logs/access.log main;
日誌生成的到Nginx根目錄logs/access.log文件,默認使用「main」日誌格式,也可以自定義格式。
默認「main」日誌格式:
參數明細表:
查看日誌命令tail -f /usr/local/nginx/logs/access.log
打開nginx.conf配置文件去掉#注釋見下圖:
自定義某一個server配置的日誌,使用「main」日誌格式。
日誌生成的到Nginx根目錄logs/access.log文件,默認使用「main」日誌格式,也可以自定義格式。
重新讀取載入Nginx配置文件:
執行命令:nginx-s reload
網上一位老師寫的log文件分解的腳本
此腳本執行時間根據自己公司情況來定,可以設置默認一天執行一次;
創建crontab設置作業
設置日誌文件存放目錄crontab -e
*/1 * * * * sh /usr/local/software/nginx/nginx_log.sh
此設置的為一分鍾,如果設置一天自行修改;
默認的 nginx 配置文件 nginx.conf 內容如下
示例
幾個常見配置項:
注意:
驚群現象:一個網路連接到來,多個睡眠的進程被同事叫醒,但只有一個進程能獲得鏈接,這樣會影響系統性能
每個指令必須有分號結束。
進入安裝目錄下的sbin
『陸』 如何查看nginx 啟動的配置文件
在鏈接上伺服器之後,只需查找文件名即可找到nginx的配置文件位置,然後打開它就可以了。
在連接上遠程後,在命令窗口中輸入: find ... -name nginx.config
然後按回車,一下就會有路徑出來了,如:alidata/server/nginx-1.0.4/conf/nginx.config
然後打開此目錄: cd alidata/server/nginx-1.0.4/conf
這個目錄就是配置文件所在的目錄了,想要編輯它就直接編輯就可以了,編輯完保存退出,重啟伺服器。
一切OK。
『柒』 查看nginx使用的配置文件
使用cat vim 都可查看 nginx.conf具體可以看看《Linux就該這么學》
『捌』 列印配置文件nginx.conf內容的行號及內容,該如何做
方法1:cat -n nginx.conf
方法2:less -N nginx.conf
方法3:grep -n . nginx.conf #此處的.(點)號,表示任意單個字元,-n是給過濾出的每一行加行號
請參考《Linux就該這么學》入門書籍。
『玖』 linux下怎麼查看伺服器的nginx配置文件
當你執行 nginx -t 得時候,nginx會去測試你得配置文件得語法,並告訴你配置文件是否寫得正確,同時也告訴了你配置文件得路徑:
# nginx -t
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
首先執行命令找到nginx路徑
ps aux | grep nginx
如nginx路徑為
/usr/local/nginx/sbin/nginx
然後執行以下命令
/usr/local/nginx/sbin/nginx -V
默認放在 安裝目錄下 conf/nginx.conf