Nginx Nginx配置入門

2021-09-21 18:43:12 字數 4908 閱讀 9739

本篇文章不會做深入講解, 閱讀本篇文章, 也只能使你對配置有簡單了解. 配置這部分內容比較多, 像前篇所提到的靜態資源伺服器, 虛擬主機, 反向**都是需要依靠合理配置來實現的.

配置檔案名為」nginx.conf」, 預設位於」/etc/nginx/nginx.conf」. 如不確定, 可以使用」nginx -t」或」locate nginx.conf」命令進行定位.

配置檔案是由各種命令構成的, 根據是否巢狀可分為簡單命令與複雜命令兩種.

1. 簡單命令形如:

命令a 引數列表;

2. 複雜命令形如:

命令a 引數列表 , 記得給整個正則式加上雙引號.

這裡就要丟擲乙個問題了, nginx收到發給」mail.example.com:80」埠的請求, 該發給哪個server塊處理呢?

很明顯」mail.example.com:80」符合上述所有的server塊, 此時請參照以下規則:

當配置中多個server組擁有相同埠時, 目標網域名稱將按以下順序匹配server_name, 匹配成功即為目標server:

1) 精確匹配

2) 以*開頭的最長萬用字元

3) 以*結尾的最長萬用字元

4) 在配置檔案中從上至下第乙個匹配的正則式

舉例:

某個http請求頭:

nginx配置如下:

server {

listen       10002 default_server;

return       403;

server {

listen       10002;

server_name www.monkey.com monkey.com;

server {

listen       10003 default_server;

server_name www.monkey.net monkey.net;

首先進行埠匹配, 過濾出第1個server和第2個server符合要求; 接著對過濾出的server組進行網域名稱匹配, 目標網域名稱精確匹配第2個server的server_name符合, 故該請求將轉給第2個server塊處理.

乙個server塊下可以有多個location塊, nginx在確認是哪個server塊來處理請求後, 其就會在該server塊下根據請求的uri匹配location塊.

location命令支援最長字首匹配與正則匹配, 字首匹配的location引數是字串, 正則匹配的location引數則以」~」開頭. nginx會首先對uri進行最長字首匹配, 記錄下最合適的location塊.接著對uri進行正則匹配, 如果有匹配到正則式, 則使用該式所對應的location塊. 如果沒有匹配到, 則使用之前通過最長字首匹配所捕獲的location塊.

location上下文中較常用的有root命令與proxy_pass命令.

root命令, 會把uri拼接到root命令所示路徑後構成本地路徑, 獲取並向客戶端返回該檔案, 此時nginx就起到了靜態資源伺服器的作用, 這部分請求直接由nginx處理, 從而減小其背後應用伺服器的訪問壓力.

proxy_pass命令, 此時nginx便起到反向**伺服器的作用. 即接收客戶端請求並**給應用伺服器, 接收響應後再**給客戶端.

直接來看乙個例子:

expires 30d;  # 響應快取30天

該主機監聽8080埠, 注意root是放在server上下文中的, 此時若某請求匹配到的location塊中沒有root命令, 就會採用server塊中的root命令.

假設uri為」/logo.gif」, 首先進行最長字首匹配, 確定為第1個location塊; 其次再進行正則匹配, 確定為第2個location塊; 故最終選擇後者, 並根據root命令對映uri到本機」/data/www/logo.gif」, 向客戶端返回該資源.

例子中的proxy_set_header, 可對**接收到的請求頭增加或替換某欄位, 以便將新值傳給應用伺服器. 當值為」」時, 該字段便不會傳給應用伺服器.

proxy_set_header 網域名稱 值;

可以使用(?.+)捕獲正則式, 配合root使用:

server {

server_name   ~^(www\.)?(?.+)$;

location / {

root   /sites/$domain;

location塊可以通過proxy_pass命令, 將請求**給某個應用伺服器, 這裡nginx提供了乙個便捷, 就是可以用upstream命令將多台伺服器組成應用伺服器陣列. 此時nginx將成為乙個負載均衡器, 將流量按演算法分配到其背後的應用伺服器上, 其支援以下幾種方式的負載均衡:

1. 輪詢(預設)

所有請求都會被**給」example_array」伺服器集群, 請求會依次輪流分配給集群中的伺服器. 如果想要使用https協議, 把協議名改為https即可. 其他則需要更換命令名稱: fastcgi使用fastcgi_pass, uwsgi使用uwsgi_pass, memcached使用memcached_pass, grpc使用grpc_pass.

2. 最少連線數

nginx會把請求**給當前集群中活躍連線數最少的應用伺服器.

3. ip雜湊

以客戶端的ip位址作為hash的key, 使得某客戶端的全部請求都能交給集群中某指定伺服器, 便於伺服器的session效果最大化.

上面例子中列出了upstream的server命令三個常用引數:

1) weight引數

用以表示伺服器承擔請求的權重, 預設為1. 上例中, 平均每5個請求中, 有3個會分給s1, 其餘s2與s3各分1個.

2) mail_fails與fail_timeout引數

nginx反向**包含被動的健康檢查機制: 如果在fail_timeout時間內從某伺服器上收到多於max_fails個異常響應, nginx會將該伺服器標記為"失敗"狀態, 並在其後fail_timeout時間內避免向該伺服器傳送後續請求. 經過這段時間後, nginx會小心翼翼的對該"失敗"伺服器傳送乙個請求, 如果成功響應, 則將該伺服器標記為"正常"狀態.

max_fails引數預設為1, 當為0時, 被動的健康檢查機制會被關閉. fail_timeout引數預設為10s.

文中如有不當之處, 還望包容和指出, 謝謝

Ubuntu QT配置入門

ubuntu qt配置入門 qt是什麼?qt是乙個跨平台的c gui庫,其官方 為 qt的安裝 安裝方法有兩種 小問題 tips 寫個程式測試一下 include include include include include include sizeof wid bytes.na qobject ...

nginx 配置入門

綠色檔案,無須安裝,直接即可啟動。據我所知,3種啟動途徑,其實都類似 一 雙擊nginx.exe圖示,可見黑視窗一閃而過,啟動完畢。二 命令列到nginx目錄,輸入nginx啟動。注,此方式命令列視窗無任何提示,且被鎖定 三 命令列到nginx目錄,輸入start nginx啟動,此方式不鎖定 啟動...

Mycat配置入門

bin 啟動目錄 conf 配置目錄存放配置檔案 server.xml 是mycat伺服器引數調整和使用者授權的配置檔案。schema.xml 是邏輯庫定義和表以及分片定義的配置檔案。rule.xml 是分片規則的配置檔案,分片規則的具體一些引數資訊單獨存放為檔案,也在這個目錄下,配置檔案修改需要重...