標籤:nginx 設定檔
nginx設定檔分為4個部分:main(全域配置),server(主機配置),upstream(負載平衡伺服器配置)和location(URL匹配特定位置的設定)。其中,main部分的設定將會影響其他所有的設定,server部分的資料主要用於指定主機和連接埠。upstream指定主要用於負載平衡,設定一系列的後端伺服器,location部分主要用於匹配網頁位置。四者的關係如下:server繼承main,location繼承server,upstream既不繼承其他設定,也不被設定所繼承。
650) this.width=650;" src="http://s5.51cto.com/wyfs02/M02/89/46/wKioL1gOvieBW7iCAADJVA0h5ho501.png" title="VM(9{Y4[RYL5F{[0VSD6OHT.png" alt="wKioL1gOvieBW7iCAADJVA0h5ho501.png" />
參考:
www.linuxidc.com
main:常用的定義項
user nobody;
定義背景工作處理序使用的user和group身份。 如果省略group,nginx會使用與user相同的組名。
worker_processes 4;
定義背景工作處理序的數量。
worker_cpu_affinity 0001 0010 0100 1000;
將每個背景工作處理序分別綁定至不同的CPU
error_log logs/error.log error;
第一個參數定義了存放日誌的檔案,第二個參數定義記錄層級。
pid logs/nginx.pid;
定義儲存nginx主進程ID的file
worker_rlimit_nofile 40960;
修改背景工作處理序的開啟檔案數的最大值限制(RLIMIT_NOFILE),用於在不重啟主進程的情況下增大該限制。
events:常用的定義項
worker_connections 10240;
設定每個背景工作處理序可以開啟的最大並發串連數。
https:常用的定義項
default_type application/octet-stream;
定義響應的預設MIME類型。
log_format main ‘$remote_addr - $remote_user [$time_local] "$request" ‘
‘$status $body_bytes_sent "$http_referer" ‘
‘"$http_user_agent" "$http_x_forwarded_for" "$upstream_response_time"‘;
指定日誌的格式。$remote_addr:用戶端的IP $remote_user: 用戶端使用者名稱稱 $time_local:訪問時間和時區 $request:請求的URI和HTTP協議 $status:HTTP請求狀態 $body_bytes_sent:發送給用戶端檔案內容大小 $http_referer:url跳轉來源 $http_user_agent:使用者終端瀏覽器等資訊 $http_x_forwarded_for: 用戶端的真實IP $upstream_response_time:請求過程中,upstream回應時間.
access_log off;
關閉訪問日誌
server_tokens off;
是否在錯誤頁面或者伺服器Hearder頭中輸出Nginx的版本號碼給用戶端覽器
server_info off;
是否在錯誤頁面顯示URL、伺服器名稱和出錯時間
server_tag off;
自訂設定HTTP響應的server頭,‘off’可以禁止返回server頭。如果什麼都不設定,就是返回預設Nginx的標識
sendfile off;
禁用sendfile()函數(sendfile()函數是高效的用於資料拷貝在兩個檔案描述符之間的操作函數)
tcp_nodelay on;
使用通訊端選項TCP_NODELAY,僅適用於keep-alive連結
keepalive_timeout 5;
設定keepalive連結逾時時間(s)
gzip on;
開啟或者關閉gzip模組
gzip_min_length 1k;
設定允許壓縮的頁面最小位元組數(預設值0)
gzip_buffers 4 16k;
設定系統擷取幾個單位的緩衝用於儲存gzip的壓縮結果資料流(4 16k:代表以16k為單位,按照未經處理資料大小以16k為單位的4倍申請記憶體)
gzip_http_version 1.1;
識別http的協議版本號碼
gzip_comp_level 4;
gzip的壓縮比,1壓縮比最小處理速度最快,9壓縮比最大但處理速度慢
gzip_types text/plain application/x-javascript application/javascript text/css application/xml;
匹配類型進行壓縮
gzip_vary on;
給http加個vary頭給Proxy 伺服器用,根據用戶端的HTTP頭來判斷,是否需要壓縮
server_names_hash_bucket_size 128;
指定伺服器名稱雜湊表的框大小(預設值32/64/128)
client_header_buffer_size 32k;
設定用戶端請求的Hearder頭緩衝區大小
large_client_header_buffers 4 32k;
設定用戶端請求的Hearder頭的最大值
client_max_body_size 10m;
設定用戶端請求內容的最大值(M)
client_body_buffer_size 128k;
指定用戶端請求內容的緩衝區大小,如果內容大於緩衝區,請求的內容或者部分請求內容將被寫入臨時檔案
proxy_connect_timeout 300;
設定跟後端伺服器連線逾時的時間,發起捂手等待響應的逾時時間。
proxy_send_timeout 300;
指定Proxy 伺服器轉寄請求的逾時時間,如果Proxy 伺服器超過這個時間,任沒有發送資料到後端伺服器,nginx將關閉該次連結
proxy_read_timeout 300;
設定從後端被Proxy 伺服器讀取應答內容的逾時時間,它決定nginx等待多長時間來擷取一個請求的應答
proxy_buffer_size 128k;
該指令用於設定從被Proxy 伺服器擷取的第一部分應答資訊的緩衝區大小這個緩衝區間會儲存使用者的頭資訊以供nginx進行規制處理,一般只要保留下頭資訊即可
proxy_buffers 32 128k;
該指令用於設定從被Proxy 伺服器讀取應答資訊的緩衝區數目和大小,一個緩衝區的大小相等於網頁的大小
proxy_busy_buffers_size 128k;
系統很忙的時候可以申請更大的proxy_buffers緩衝區
proxy_temp_file_write_size 128k;
設定寫入proxy_temp_file臨時目錄的資料大小,可以防止一個背景工作處理序阻塞太長的時間
proxy_ignore_client_abort on;
如果用戶端自身終止請求,防止中斷代理請求
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 ; 該指令用於設定當在那種情況下,將請求發送到下一台伺服器。在upstream負載平衡Proxy 伺服器池中,假設後端的一台伺服器無法訪問或者返回指定錯誤響應代碼時,可以使用改指令將請求轉寄到池中的下一台伺服器
include vhosts/*;
將另一個file,或者匹配指定mask的檔案,包含到配置中。
##########################################################################################
後端使用的是tomcat
upstream tomcat_web {
server 127.0.0.1:8080;
server 192.168.0.2:8080;
keepalive 24;
啟用對上遊伺服器的串連進行緩衝。參數設定每個worker進程與後端伺服器保持串連的最大數量。這些持續連線會被放入緩衝。 如果串連數大於這個值時,最久未使用的串連會被關閉。
check interval=3000 rise=2 fall=3 timeout=10000 type=http;
interval:向後端發送的健全狀態檢查包的間隔。
fall(fall_count):如果連續失敗次數達到fall_count,伺服器就被認為down。
rise(rise_count): 如果連續成功次數達到rise_count,伺服器就被認為是up。
timeout: 後端健康請求的逾時時間。
type:健全狀態檢查包的類型,現在支援以下多種類型
1,tcp:簡單的tcp串連,如果串連成功,就說明後端正常。
2,ssl_hello:發送一個初始的SSL hello包並接受伺服器的SSL hello包。
3,http:發送HTTP請求,通過後端的回複包的狀態來判斷後端是否存活。
4,mysql: 向mysql伺服器串連,通過接收伺服器的greeting包來判斷後端是否存活。
5,ajp:向後端發送AJP協議的Cping包,通過接收Cpong包來判斷後端是否存活。
check_http_send "HEAD / HTTP/1.0\r\n\r\n";
配置http健全狀態檢查包發送的請求內容。
check_http_expect_alive http_2xx http_3xx;
該指令指定HTTP回複的成功狀態,預設認為2XX和3XX的狀態是健康的
}
upstream tomcat_uat {
server 192.168.0.5:8088;
server 192.168.0.6:8088;
keepalive 12;
}
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/m;
定義一塊記憶體儲存區,用來儲存Session工作階段狀態。通常可以設定為儲存用戶端IP的變數$binary_remote_addr Session工作階段狀態分配了一個名為one的10MB記憶體儲存區,現在了每秒只能接受10個IP的一次請求
###########################################################################################
server {
listen 80 default_server;
server_name _;
access_log off;
if ($request_method !~* ‘GET|POST‘) {
return 403; #屏蔽了要求方法除GET/POST以外的其他方法
}
rewrite ^ http://www.*****.com/ permanent;
}
server {
listen 80;
server_name www.*****.com **.com;
root /data/webapps/******;
index index.html index.htm;
if ($request_method !~* ‘GET|POST‘) { #請求的方法
return 444;
}
if ($http_user_agent ~ ‘^$|JianKongBao‘) { #是用來檢查瀏覽頁面的訪問者在用什麼作業系統(包括版本號碼)瀏覽器(包括版本號碼)和使用者個人偏好的代碼
return 444;
}
if ( $query_string ~* "[\;‘\<\>]|\.\." ){ #請求中的參數
return 444;
}
###########################################################################################
location / {
proxy_http_version 1.1;
proxy_pass http://******;
proxy_set_header Connection "";
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
access_log logs/web/access.log main;
error_log logs/web/error.log error;
}
###########################################################################################
以下是一個完整的官網在nginx上的簡單運用
###########################################################################################
upstream tomcat_car {
server 192.168.0.8:8082;
server 192.168.0.9:8082;
keepalive 24;
check interval=3000 rise=2 fall=3 timeout=10000 type=http;
check_http_send "HEAD / HTTP/1.0\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
}
###########################################################################################
server {
listen 80;
server_name www.*****.com *****.com;
root /data/webapps/car;
index index.jsp;
proxy_intercept_errors on;
error_page 404 /404.html;
#當後端伺服器的響應狀態代碼大於等於400時,決定是否直接將響應發送給用戶端,亦或將響應轉寄給nginx由error_page指令來處理。
if ($request_method !~* ‘GET|POST‘) {
return 444;
}
if ($http_user_agent ~ ‘^$|JianKongBao‘) {
return 444;
}
if ( $query_string ~* "[\;‘\<\>]|\.\." ){
return 444;
}
location / {
proxy_http_version 1.1;
proxy_pass http://*********.com;
proxy_set_header Connection "";
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
access_log logs/peanutcar/access.log main;
error_log logs/peanutcar/error.log error;
########################### browser local cache ####################
if ($uri ~* ‘\.(ico|gif|jpg|jpeg|bmp|png|txt|js|css|otf|svg|ttf)$‘) {
expires 1d; #緩衝時間1天
access_log off;
}
}
############################ active ############################
location ^~ ‘/active-web‘ {
proxy_http_version 1.1;
proxy_pass http://********;
proxy_set_header Connection "";
proxy_set_header Host $host;
access_log logs/hsactive/access.log main;
error_log logs/hsactive/error.log error;
if ($uri ~* ‘\.(ico|gif|jpg|jpeg|bmp|png|txt|js|css|otf|svg)$‘) {
access_log off;
}
limit_req zone=active burst=3;
limit_req_whitelist geo_var_name=white_ip geo_var_value=1;
}
}
本文出自 “唐朝熊貓” 部落格,請務必保留此出處http://tcxiongmao.blog.51cto.com/10074422/1865335
nginx 網站服務