nginx配置文件結(jié)構(gòu)
1、整體配置架構(gòu)
main #全局設(shè)置
|
--Events
|
--HTTP
|
--upstream #負(fù)載均衡設(shè)置
|
--Server #主機(jī)設(shè)置
|
--location #URL匹配特定位置的設(shè)置
|
--location
..
|
--Server
..
server 繼承main,location繼承server,upstream既不會(huì)繼承其他設(shè)置也不會(huì)被繼承。
模塊指令:主模塊指令、事件模塊指令、HTTP核心模塊指令
2、全局(main)配置
user nobody nobody; #主模塊指令,指定Nginx Worker進(jìn)程運(yùn)行用戶以及用戶組,默認(rèn)由nobody賬號(hào)運(yùn)行
worker_processes 2; #指定了Nginx要開啟的進(jìn)程數(shù)。每個(gè)Nginx進(jìn)程平均耗費(fèi)10M~12M內(nèi)存。建議指定和CPU的數(shù)量一致即可
error_log logs/error.log notice; #錯(cuò)誤日志路徑,debug、info、notice、warn、error、crit
pid logs/nginx.pid; #用來(lái)指定進(jìn)程pid的存儲(chǔ)文件位置
worker_rlimit_nofile 65535; #用于綁定進(jìn)程和cpu
events{ #events事件指令是設(shè)定Nginx的工作模式及連接數(shù)上限
use epoll; #工作模式,linux首選epoll。其他select、poll、kqueue、epoll、rtsig和/dev/poll
worker_connections 65536; #定義nginx每個(gè)進(jìn)程最大連接數(shù)。
}
http{
}
最大客戶端連接數(shù)由worker_processes和worker_connections決定,即Max_client=worker_processes*worker_connections。
在作為反向代理時(shí),max_clients變?yōu)椋簃ax_clients = worker_processes * worker_connections/4。
linux系統(tǒng)中,進(jìn)程最大連接數(shù)受linux系統(tǒng)進(jìn)程的最大打開文件數(shù)限制。
3、http服務(wù)器配置
http{
include conf/mime.types; #主模塊指定,實(shí)現(xiàn)對(duì)配置文件所包含的文件的設(shè)定
default_type application/octet-stream; #設(shè)定默認(rèn)類型為二進(jìn)制流,也就是當(dāng)文件類型未定義時(shí)使用這種方式
#----nginx日志輸出格式start
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$gzip_ratio"';
log_format download '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$http_range" "$sent_http_content_range"';
#-----nginx日志輸出格式end
#---gzip模塊begin
gzip on;
gzip_min_length 1k; #允許壓縮的頁(yè)面最小字節(jié)數(shù)
gzip_buffers 4 16k; #表示申請(qǐng)4個(gè)單位為16K的內(nèi)存作為壓縮結(jié)果流緩存
gzip_http_version 1.1; #用于設(shè)置識(shí)別HTTP協(xié)議版本
gzip_comp_level 2; #用來(lái)指定GZIP壓縮比
gzip_types text/html; #指定壓縮的類型
#----gizp模塊end
client_max_body_size 20m; #設(shè)置允許客戶端請(qǐng)求的最大的單個(gè)文件字節(jié)數(shù)
client_header_buffer_size 32K; #用于指定來(lái)自客戶端請(qǐng)求頭的headerbuffer大小
large_client_header_buffers 4 32k; #指定客戶端請(qǐng)求中較大的消息頭的緩存最大數(shù)量和大小
Sendfile on; #開啟高效文件傳輸模式
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 60; #置客戶端連接保持活動(dòng)的超時(shí)時(shí)間
client_header_timeout 10; #設(shè)置客戶端請(qǐng)求頭讀取超時(shí)時(shí)間
client_body_timeout 10; #設(shè)置客戶端請(qǐng)求主體讀取超時(shí)時(shí)間
send_timeout 10; 指定響應(yīng)客戶端的超時(shí)時(shí)間。這個(gè)超時(shí)僅限于兩個(gè)連接活動(dòng) 之間的時(shí)間,如果超過這個(gè)時(shí)間,客戶端沒有任何活動(dòng),Nginx將會(huì)關(guān)閉連接。
}
4、upstream
upstream panel_gateway {
server 172.16.2.173:27002;
server 172.16.2.174:27002;
}
配好location 模塊使用
- nginx負(fù)載均衡算法
- 輪詢(默認(rèn)):每個(gè)請(qǐng)求按時(shí)間順序逐一分配到不同的后端服務(wù)器,如果后端某臺(tái)服務(wù)器宕機(jī),故障系統(tǒng)被自動(dòng)剔除,使用戶訪問不受影響;
stream backserver {
server 192.168.0.12;
server 192.168.0.13;
}
- Weight:指定輪詢權(quán)值,Weight值越大,分配到的訪問機(jī)率越高,主要用于后端每個(gè)服務(wù)器性能不均的情況下;
upstream backserver {
server 192.168.0.12 weight=2;
server 192.168.0.13 weight=8;
}
- ip_hash:每個(gè)請(qǐng)求按訪問IP的hash結(jié)果分配,這樣來(lái)自同一個(gè)IP的訪客固定訪問一個(gè)后端服務(wù)器,有效解決了動(dòng)態(tài)網(wǎng)頁(yè)存在的session共享問題;
upstream backserver {
ip_hash;
server 192.168.0.12:88;
server 192.168.0.13:80;
}
- fair:比上面兩個(gè)更加智能的負(fù)載均衡算法。此種算法可以依據(jù)頁(yè)面大小和加載時(shí)間長(zhǎng)短智能地進(jìn)行負(fù)載均衡,也就是根據(jù)后端服務(wù)器的響應(yīng)時(shí)間來(lái)分配請(qǐng)求,響應(yīng)時(shí)間短的優(yōu)先分配。Nginx本身是不支持fair的,如果需要使用這種調(diào)度算法,必須下載Nginx的upstream_fair模塊;
upstream backserver {
server server1;
server server2;
fair;
}
- url_hash:按訪問url的hash結(jié)果來(lái)分配請(qǐng)求,使每個(gè)url定向到同一個(gè)后端服務(wù)器,可以進(jìn)一步提高后端緩存服務(wù)器的效率。Nginx本身是不支持url_hash的,如果需要使用這種調(diào)度算法,必須安裝Nginx 的hash軟件包。
upstream backserver {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
5、server虛擬主機(jī)配置
server{
listen 80; #listen用于指定虛擬主機(jī)的服務(wù)端口
server_name 192.168.8.18 cszhi.com; #用來(lái)指定IP地址或者域名,多個(gè)域 名之間用空格分開
index index.html index.htm index.php; #index用于設(shè)定訪問的默認(rèn)首 頁(yè)地址
root /wwwroot/www.cszhi.com #指令用于指定虛擬主機(jī)的網(wǎng)頁(yè)根目錄,這個(gè)目錄可以是相對(duì)路徑,也可以是絕對(duì)路徑。前端存放位置
charset gb2312; #設(shè)置網(wǎng)頁(yè)的默認(rèn)編碼格式
access_log logs/www.ixdba.net.access.log main #用來(lái)指定此虛擬主機(jī)的訪問日志存放路徑,最后的main用于指定訪問日志的輸出格式
6、location
URL地址匹配,支持正在表達(dá)式,也支持條件判斷匹配,用戶可以通過location指令實(shí)現(xiàn)Nginx對(duì)動(dòng)、靜態(tài)網(wǎng)頁(yè)進(jìn)行過濾處理。使用location URL匹配配置還可以實(shí)現(xiàn)反向代理,用于實(shí)現(xiàn)PHP動(dòng)態(tài)解析或者負(fù)載負(fù)載均衡。
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
root /wwwroot/www.cszhi.com;
expires 30d;
}
#對(duì)網(wǎng)頁(yè)URL進(jìn)行分析處理,所有擴(kuò)展以.gif、.jpg、.jpeg、.png、.bmp、.swf結(jié)尾的靜態(tài)文件都交給nginx處理
7、location匹配規(guī)則
#語(yǔ)法
location [=|~|~*|^~] /uri/ { … }
* = 嚴(yán)格匹配。如果請(qǐng)求匹配這個(gè)location,那么將停止搜索并立即處理此請(qǐng)求
* ~ 區(qū)分大小寫匹配(可用正則表達(dá)式)
* ~* 不區(qū)分大小寫匹配(可用正則表達(dá)式)
* !~ 區(qū)分大小寫不匹配
* !~* 不區(qū)分大小寫不匹配
* ^~ 如果把這個(gè)前綴用于一個(gè)常規(guī)字符串,那么告訴nginx 如果路徑匹配那么不測(cè) 試正則表達(dá)式
eg:
* location / {} 匹配任意請(qǐng)求
* location ~* .(gif|jpg|jpeg)$ {
rewrite .(gif|jpg|jpeg)$ /logo.png;
} 不區(qū)分大小寫,匹配以gif、jpg、jpeg結(jié)尾的請(qǐng)求,并將該請(qǐng)求重定向到 /logo.png請(qǐng)求
# alias與root
* root 實(shí)際訪問文件路徑會(huì)拼接URL中的路徑
* alias 實(shí)際訪問文件路徑不會(huì)拼接URL中的路徑
eg:
* location ^~ /sta/ {
alias /usr/local/nginx/html/static/;
}
請(qǐng)求:http://test.com/sta/sta1.html
實(shí)際訪問:/usr/local/nginx/html/static/sta1.html 文件
* location ^~ /tea/ {
root /usr/local/nginx/html/;
}
請(qǐng)求:http://test.com/tea/tea1.html
實(shí)際訪問:/usr/local/nginx/html/tea/tea1.html 文件