記錄下工作中nginx配置和使用,方便後續查閱
nginx主要功能:http伺服器、反向**、負載均衡;此外還有一些高階功能,限流等。
nginx配置檔案是乙個純文字的檔案,一般都是位於nginx的安裝目錄下,預設的安裝路徑的配置檔案在/usr/local/nginx/conf/nginx.conf。它的配置檔案都是以block的形式組織的,每個block一般都是以括號「{}」來表示的。主要包括全域性,event,http,server等設定,event主要定義nginx的工作模式,http提供web功能,server用來設定虛擬主機,server可以存在多個,結構如下圖
通常工作中需要配置的是http模組
http #設定http伺服器
#多個location
}}
先來看乙個具體例子
#定義nginx執行的使用者和使用者組
user admin admin;
#nginx程序數,建議設定為等於cpu總核心數。
worker_processes auto;
#全域性錯誤日誌定義型別,多個等級可並存,[ debug | info | notice | warn | error | crit ],從左到右錯誤資訊越來越少;此指令可以在全域性、http、server、location塊中配置)
error_log /var/log/nginx/error.log notice;
error_log /var/log/nginx/error.log info;
#nginx程序檔案
pid /var/run/nginx.pid;
#乙個nginx程序開啟的最多檔案描述符數目,理論值應該是最多開啟檔案數(系統的值ulimit -n)與nginx程序數相除,但是nginx分配請求並不均勻,所以建議與ulimit -n的值保持一致。
worker_rlimit_nofile 65535;
#工作模式與連線數上限
events
#設定http伺服器
#虛擬主機的配置
server
#快取時間設定
#js和css快取時間設定
location ~ .*\.(js|css)?$
#日誌格式設定
#定義本虛擬主機的訪問日誌
access_log /var/log/nginx/ha97access.log access;
#對 "/" 啟用反向**
location /
#設定檢視nginx狀態的位址
location /nginxstatus
#本地動靜分離反向**配置
#所有jsp的頁面均交由tomcat或resin處理
location ~ .(jsp|jspx|do)?$
#所有靜態檔案由nginx直接讀取不經過tomcat或resin
#nginx禁止訪問所有.開頭的隱藏檔案設定
location ~* /.*
#定義錯誤提示頁面
error_page 500 502 503 504 /50x.html;
location = /50x.html }}
我以我常用的乙個配置來說明下ng的執行流程
監聽80埠,訪問ares.yhd.com的時候(本地hosts配置了ares.yhd.com 127.0.0.1)即訪問本地的80埠服務(http服務),訪問/資源的時候是直接訪問html/evolve目錄下的靜態資源(js css等),訪問/api時候,直接通過反向****到本地的http://localhost:10080/api請求後台服務。
upstream order.yhd.com-servers
upstream order.yhd.com-server1
upstream order.yhd.com-server2
server
server
location /bos/
location /speedaf/
proxy_intercept_errors on;
error_page 403 /403.html;
error_page 404 /404.html;
error_page 500 /500.html;
error_page 502 /502.html;
location ~ /(403|404|500|502).html
}
服務部署結構圖如下,正常情況,流量是在pro上;在發版時候,先修改front pro機器上的nginx配置,通過反向**,把流量都反向**到front pre環境,這樣在pro發版期間,流量都在pre環境,等發版完成,再修改回來。
#front pro上nginx配置
upstream order-backend
server
location /api
location /operation
location /login
location /logout
}#front pre上nginx配置
upstream order-backend
server
location /api
location /operation
location /login
location /logout
}
發現front的nginx上pro和pre配置相同,只是負載均衡的後台機器不同而已。那麼如何實現發版無感知呢?首先網域名稱是對映到192.168.1.100和192.168.1.101兩台機器的,我們只需要在發版前,把front pro兩台機器的ng配置修改,讓流量反向**到pre即可,具體分為前端流量**到front pre,後端流量**到後端pre。那麼修改front pro兩台機器的nginx配置如下:
upstream order-backend
server
location /api
location /operation
location /login
location /logout
}
關鍵點看注釋,通過修改front pro兩台機器的nginx配置,把前端流量都反向**到front pre,把後端流量都從192.168.100/101直接去請求192.168.1.112這個pre環境。
使用反向**,修改nginx配置後nginx -s reload生效(nginx會等待舊請求都執行完畢,類似執行緒池優雅關閉那樣),我們可以做到發版期間無感知。
上述切換流量是手工的,有沒自動的呢? 可以使用lua,在藍綠發布web自動切流量我們就使用到了,這個後續再寫。
nginx 配置總結
1 首先配置tomcat的jvmroute 2 在proxy.conf中配置 上傳檔案最大值,作用於header client max body size 100m 根據瀏覽器不同此值可能關係到檔案的上傳,待驗證 client body buffer size 256k proxy connect ...
Nginx 配置總結
location 預設沒匹配到時,會匹配這個 location test proxy pass 匹配到 test pa時,將 test pa傳給127.0.0.1 8088,即 test pa全部傳給8088這個埠的應用 location test pa proxy pass 匹配到 test pa...
nginx 的配置總結
字首指令匹配,如果匹配成功,則停止其他匹配 普通字串指令匹配,順序是從長到短,匹配成功的location如果使用 則停止其他匹配 正則匹配 正規表示式指令匹配,按照配置檔案裡的順序,成功就停止其他匹配 如果第三步中有匹配成功,則使用該結果,否則使用第二步結果 匹配的順序是先匹配普通字串,然後再匹配正...