3. nginx配置文件詳解
配置文件詳解
user nginx;
worker_processes 8;
worker_cpu_affinity auto;
#worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
error_log /var/log/nginx/error.log error;
pid /var/run/nginx.pid;
worker_rlimit_nofile 65535;
events {
use epoll;
worker_connections 20480;
}
http {
include mime.types;
default_type application/octet-stream;
log_format prod '$remote_addr|$remote_user|[$time_local]|$request|'
'$status|$body_bytes_sent|$http_referer|'
'$http_user_agent|$request_time|$host|$upstream_addr|$upstream_response_time';
access_log /var/log/nginx/access.log prod;
charset utf-8;
fastcgi_intercept_errors on;
server_names_hash_bucket_size 256;
client_header_buffer_size 32k;
large_client_header_buffers 4 128k;
server_tokens off;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
#支持ssi包含文件
ssi on;
ssi_silent_errors on;
# ssi_types text/html;
keepalive_timeout 90;
client_header_timeout 10;
client_body_timeout 20;
client_max_body_size 200m;
client_body_buffer_size 128k;
# include /etc/nginx/gzip.conf;
gzip on;
gzip_buffers 4 8k;
gzip_comp_level 6;
gzip_disable "MSIE [1-6]\.";
gzip_http_version 1.1;
gzip_min_length 1000;
gzip_proxied any;
gzip_vary on;
gzip_types text/plain text/css application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript application/json image/jpeg image/gif image/png image/jpg;
# include /etc/nginx/proxy.conf;
proxy_connect_timeout 90;
proxy_read_timeout 90;
proxy_send_timeout 90;
proxy_buffer_size 32k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
# include /etc/nginx/backend.conf;
upstream my_server_pool {
server 192.168.1.109:80 weight=1 max_fails=2 fail_timeout=30;
server 192.168.1.108:80 weight=2 max_fails=2 fail_timeout=30;
}
include /etc/nginx/conf.d/h5.conf;
}
1 樣例文件解釋
http {
# 引入文件 mime.types,是一個文件擴展名與文件類型的映射表
include mime.types;
# 指定默認MIME類型為二進制字節流(即下載文件)
default_type application/octet-stream;
# 定義輸出日志的格式
# 1.$remote_addr 與$http_x_forwarded_for(反向代理服務器) 用以記錄客戶端的ip地址;
# 2.$remote_user :用來記錄客戶端用戶名稱;
# 3.$time_local :用來記錄訪問時間與時區;
# 4.$request :用來記錄請求的url與http協議
# 5.$status :用來記錄請求狀態;
# 6.$body_bytes_sent :記錄發送給客戶端文件主體內容大??;
# 7.$http_referer :用來記錄從那個頁面鏈接訪問過來的;
# 8.$http_user_agent :記錄客戶端瀏覽器的相關信息
# 9.$request_time :整個請求的總時間
# 10.$host變量的值按照如下優先級獲得:請求行中的host.請求頭中的Host頭部.與一條請求匹配的server name.
# 11.$upstream_addr :后臺upstream的地址,即真正提供服務的主機地址,如10.10.10.100:80
# 12.$upstream_response_time :請求過程中,upstream響應時間
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
log_format prod '$remote_addr|$remote_user|[$time_local]|$request|'
'$status|$body_bytes_sent|$http_referer|'
'$http_user_agent|$request_time|$host|$upstream_addr|$upstream_response_time';
# 指定access_log的存放路徑、格式和緩存大小
access_log /var/log/nginx/access.log prod;
# 指定編碼格式,若網頁格式與此不同,將被自動轉碼
charset utf-8;
# 允許nginx使用error_page處理錯誤信息,傳遞4xx和5xx錯誤信息到客戶端
fastcgi_intercept_errors on;
server_names_hash_bucket_size 256;
client_header_buffer_size 32k;
large_client_header_buffers 4 128k;
#定義白名單ip列表變量
geo $whiteip_list {
default 1;
127.0.0.1 0;
192.168.0.167 0;
192.168.0.48 0;
}
#用map指令映射將白名單列表中客戶端請求ip為空串
map $whiteip_list $limit {
1 $binary_remote_addr;
0 "";
}
#當某個IP訪問example.com這個域名時,此IP得并發連接超過10,則會報503(Service Temporarily Unavailable),
#表示服務暫時不可用,此時會返回給用戶我們事先定義好錯誤頁面。由“limit_conn conn_ip 10;”實現。
limit_conn_zone $limit zone=conn_ip:10m;
#當訪問example.com這個域名的連接總數超過1000時,同樣會報503,返回定義好的錯誤頁面。
#由“limit_conn conn_server 1000;”實現
limit_conn_zone $limit zone=conn_server:10m;
#當達到最大限制連接數后,記錄日志的等級
limit_conn_log_level info; #[info | notice | warn | error(默認)]
#當超過限制時,返回的狀態碼(默認是503),code值只能設置在400到599之間
limit_conn_status 503;
#利用令牌桶原理,來限制用戶的連接頻率
#rate每個IP平均處理的請求頻率為每秒一次,此值可以設置成每秒處理請求數或者每分鐘處理請求數,但必須是整數。
#所以如果你需要指定每秒處理少于1個的請求,2秒處理一個請求,可以使用 “30r/m”。
limit_req_zone $limit zone=req_ip:10m rate=10r/s;
# 用戶認證
# yum install httpd-tools #適用centos
# sudo apt-get install apache2-utils #適用ubuntu
# 生成用戶密碼文件
# htpasswd -c /data/.htpasswd user1
auth_basic "User Login";
auth_basic_user_file /data/.htpasswd;
# 隱藏nginx版本號
server_tokens off;
# sendfile 指令用于指定 Nginx 是否調用Linux 的 sendfile 函數(zero copy 方式)來輸出文件,提高文件傳輸效率
sendfile on;
# 告訴nginx在一個數據包里發送所有頭文件,而不一個接一個的發送。就是說數據包不會馬上傳送出去,等到數據包最大時,一次性的傳輸出去,這樣有助于解決網絡堵塞。
tcp_nopush on;
# 不緩存data-sends(關閉 Nagle 算法),這個能夠提高高頻發送小數據報文的實時性
tcp_nodelay on;
#支持ssi包含文件
ssi on;
ssi_silent_errors on;
# ssi_types text/html;
# 啟用目錄瀏覽
# autoindex on;
# 顯示出文件的確切/大概大?。簅n確切大小,單位是bytes;off大概大小,單位是kB或者MB或者GB
# autoindex_exact_size off;
# off顯示的文件時間為GMT時間,on顯示的文件時間為文件的服務器時間
# autoindex_localtime on;
# 指定客戶端連接保持活動的超時時間(單位:秒),超過時間,服務器會關閉連接,太短或者太長都不一定合適,當然,最好是根據業務自身的情況來動態地調整該參數
keepalive_timeout 90;
# 客戶端向服務端發送一個完整的 request header 的超時時間。如果客戶端在指定時間內沒有發送一個完整的 request header,Nginx 返回 HTTP 408(Request Timed Out)。
client_header_timeout 10;
# 指定客戶端與服務端建立連接后發送 request body 的超時時間。如果客戶端在指定時間內沒有發送任何內容,Nginx 返回 HTTP 408(Request Timed Out)。
client_body_timeout 20;
# 客戶端請求單個文件的最大字節數,這個參數的設置限制了上傳文件的大小。
client_max_body_size 200m;
# 當客戶端以POST方法提交一些數據到服務端時,會先寫入到client_body_buffer中,如果buffer寫滿會寫到臨時文件里,建議調整為128k
client_body_buffer_size 128k;
#利用令牌桶原理,來限制用戶的連接頻率
#rate每個IP平均處理的請求頻率為每秒一次,此值可以設置成每秒處理請求數或者每分鐘處理請求數,但必須是整數。
#所以如果你需要指定每秒處理少于1個的請求,2秒處理一個請求,可以使用 “30r/m”。
limit_req_zone $binary_remote_addr zone=one:10m rate=10000r/s;
limit_conn_zone $binary_remote_addr zone=addr:10m;
# include /etc/nginx/gzip.conf;
gzip on;
gzip_buffers 4 8k;
