NGINX的配置:
1.全局變量:
#Nginx的worker進程運行用戶以及用戶組
user? nobody nobody;
#Nginx開啟的進程數,建議為CPU的核數
worker_processes? 1;
#worker_processes auto;
#以下參數指定了哪個cpu分配給哪個進程,一般來說不用特殊指定。如果一定要設的話,用0和1指定分配方式.
#這樣設就是給1-4個進程分配單獨的核來運行,出現第5個進程是就是隨機分配了。eg:
worker_processes 4? ? #4核CPU
worker_cpu_affinity 0001 0010 0100 1000
#定義全局錯誤日志定義類型,[debug|info|notice|warn|crit]
error_log? logs/error.log? info;
#指定進程ID存儲文件位置
#pid? ? ? ? logs/nginx.pid;
#一個nginx進程打開的最多文件描述符數目,理論值應該是最多打開文件數(ulimit -n)與nginx進程數相除,但是nginx分配請求并不是那么均勻,所以最好與ulimit -n的值保持一致。
#vim /etc/security/limits.conf
#? *? ? ? ? ? ? ? ? soft? ? nproc? ? ? ? ? 65535
#? *? ? ? ? ? ? ? ? hard? ? nproc? ? ? ? ? 65535
#? *? ? ? ? ? ? ? ? soft? ? nofile? ? ? ? 65535
#? *? ? ? ? ? ? ? ? hard? ? nofile? ? ? ? 65535
worker_rlimit_nofile 65535;
2.事件配置:
events {
? ? #use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本內核中的高性能網絡I/O模型,如果跑在FreeBSD上面,就用kqueue模型。
? ? use epoll;
? ? #每個進程可以處理的最大連接數,理論上每臺nginx服務器的最大連接數為worker_processes*worker_connections。理論值:worker_rlimit_nofile/worker_processes
? ? #注意:最大客戶數也由系統的可用socket連接數限制(~ 64K),所以設置不切實際的高沒什么好處
? ? worker_connections? 65535;? ?
? ? #worker工作方式:串行(一定程度降低負載,但服務器吞吐量大時,關閉使用并行方式)
? ? #multi_accept on;
}
3.Http參數:
#文件擴展名與文件類型映射表
? ? include mime.types;
? ? #默認文件類型
? ? default_type application/octet-stream;
#日志相關定義
? ? log_format? main? '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';
? ? #定義日志的格式。后面定義要輸出的內容。
? ? #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 :記錄客戶端瀏覽器的相關信息
? ? #連接日志的路徑,指定的日志格式放在最后。
? ? #access_log? logs/access.log? main;
? ? #只記錄更為嚴重的錯誤日志,減少IO壓力
? ? error_log logs/error.log crit;
? ? #關閉日志
? ? #access_log? off;
? ? #默認編碼
? ? #charset utf-8;
? ? #服務器名字的hash表大小
? ? server_names_hash_bucket_size 128;
? ? #客戶端請求單個文件的最大字節數
? ? client_max_body_size 8m;
? ? #指定來自客戶端請求頭的hearerbuffer大小
? ? client_header_buffer_size 32k;
? ? #指定客戶端請求中較大的消息頭的緩存最大數量和大小。
? ? large_client_header_buffers 4 64k;
? ? #開啟高效傳輸模式。
? ? sendfile? ? ? ? on;
? ? #防止網絡阻塞
? ? tcp_nopush on;
? ? tcp_nodelay on;? ?
? ? #客戶端連接超時時間,單位是秒
? ? keepalive_timeout 60;
? ? #客戶端請求頭讀取超時時間
? ? client_header_timeout 10;
? ? #設置客戶端請求主體讀取超時時間
? ? client_body_timeout 10;
? ? #響應客戶端超時時間
? ? send_timeout 10;
#FastCGI相關參數是為了改善網站的性能:減少資源占用,提高訪問速度。
? ? fastcgi_connect_timeout 300;
? ? fastcgi_send_timeout 300;
? ? fastcgi_read_timeout 300;
? ? fastcgi_buffer_size 64k;
? ? fastcgi_buffers 4 64k;
? ? fastcgi_busy_buffers_size 128k;
? ? fastcgi_temp_file_write_size 128k;
#gzip模塊設置
? ? #開啟gzip壓縮輸出
? ? gzip on;
? ? #最小壓縮文件大小
? ? gzip_min_length 1k;
? ? #壓縮緩沖區
? ? gzip_buffers 4 16k;
? ? #壓縮版本(默認1.1,前端如果是squid2.5請使用1.0)
? ? gzip_http_version 1.0;
? ? #壓縮等級 1-9 等級越高,壓縮效果越好,節約寬帶,但CPU消耗大
? ? gzip_comp_level 2;
? ? #壓縮類型,默認就已經包含text/html,所以下面就不用再寫了,寫上去也不會有問題,但是會有一個warn。
? ? gzip_types text/plain application/x-javascript text/css application/xml;
? ? #前端緩存服務器緩存經過壓縮的頁面
? ? gzip_vary on;
4.虛擬主機基本配置
#虛擬主機定義
? ? server {
? ? ? ? #監聽端口
? ? ? ? listen? ? ? 80;
? ? ? ? #訪問域名
? ? ? ? server_name? localhost;
? ? ? ? #編碼格式,若網頁格式與此不同,將被自動轉碼
? ? ? ? #charset koi8-r;
? ? ? ? #虛擬主機訪問日志定義
? ? ? ? #access_log? logs/host.access.log? main;
? ? ? ? #對URL進行匹配
? ? ? ? location / {
? ? ? ? ? ? #訪問路徑,可相對也可絕對路徑
? ? ? ? ? ? root? html;
? ? ? ? ? ? #首頁文件。以下按順序匹配
? ? ? ? ? ? index? index.html index.htm;
? ? ? ? }
#錯誤信息返回頁面
? ? ? ? #error_page? 404? ? ? ? ? ? ? /404.html;
? ? ? ? # redirect server error pages to the static page /50x.html
? ? ? ? #
? ? ? ? error_page? 500 502 503 504? /50x.html;
? ? ? ? location = /50x.html {
? ? ? ? ? ? root? html;
? ? ? ? }
#訪問URL以.php結尾則自動轉交給127.0.0.1
? ? ? ? # proxy the PHP scripts to Apache listening on 127.0.0.1:80
? ? ? ? #
? ? ? ? #location ~ \.php$ {
? ? ? ? #? ? proxy_pass? http://127.0.0.1;
? ? ? ? #}
#php腳本請求全部轉發給FastCGI處理
? ? ? ? # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
? ? ? ? #
? ? ? ? #location ~ \.php$ {
? ? ? ? #? ? root? ? ? ? ? html;
? ? ? ? #? ? fastcgi_pass? 127.0.0.1:9000;
? ? ? ? #? ? fastcgi_index? index.php;
? ? ? ? #? ? fastcgi_param? SCRIPT_FILENAME? /scripts$fastcgi_script_name;
? ? ? ? #? ? include? ? ? ? fastcgi_params;
? ? ? ? #}
#禁止訪問.ht頁面 (需ngx_http_access_module模塊)
? ? ? ? # deny access to .htaccess files, if Apache's document root
? ? ? ? # concurs with nginx's one
? ? ? ? #
? ? ? ? #location ~ /\.ht {
? ? ? ? #? ? deny? all;
? ? ? ? #}
? ? }
#HTTPS虛擬主機定義
? ? # HTTPS server
? ? #
? ? #server {
? ? #? ? listen? ? ? 443 ssl;
? ? #? ? server_name? localhost;
? ? #? ? ssl_certificate? ? ? cert.pem;
? ? #? ? ssl_certificate_key? cert.key;
? ? #? ? ssl_session_cache? ? shared:SSL:1m;
? ? #? ? ssl_session_timeout? 5m;
? ? #? ? ssl_ciphers? HIGH:!aNULL:!MD5;
? ? #? ? ssl_prefer_server_ciphers? on;
? ? #? ? location / {
? ? #? ? ? ? root? html;
? ? #? ? ? ? index? index.html index.htm;
? ? #? ? }
? ? #}
5.NGINX狀態監控
#Nginx運行狀態,StubStatus模塊獲取Nginx自啟動的工作狀態(編譯時要開啟對應功能)
? ? ? ? #location /NginxStatus {
? ? ? ? #? ? #啟用StubStatus的工作訪問狀態? ?
? ? ? ? #? ? stub_status? ? on;
? ? ? ? #? ? #指定StubStaus模塊的訪問日志文件
? ? ? ? #? ? access_log? ? logs/Nginxstatus.log;
? ? ? ? #? ? #Nginx認證機制(需Apache的htpasswd命令生成)
? ? ? ? #? ? #auth_basic? ? "NginxStatus";
? ? ? ? #? ? #用來認證的密碼文件
? ? ? ? #? ? #auth_basic_user_file? ? ../htpasswd;? ?
? ? ? ? #}
訪問:http://IP/NginxStatus(測試就不加密碼驗證相關)
6.反向代理
#以下配置追加在HTTP的全局變量中
#nginx跟后端服務器連接超時時間(代理連接超時)
proxy_connect_timeout? ? ? 5;
#后端服務器數據回傳時間(代理發送超時)
proxy_send_timeout? ? ? ? 5;
#連接成功后,后端服務器響應時間(代理接收超時)
proxy_read_timeout? ? ? ? 60;
#設置代理服務器(nginx)保存用戶頭信息的緩沖區大小
proxy_buffer_size? ? ? ? ? 16k;
#proxy_buffers緩沖區,網頁平均在32k以下的話,這樣設置
proxy_buffers? ? ? ? ? ? ? 4 32k;
#高負荷下緩沖大小(proxy_buffers*2)
proxy_busy_buffers_size? ? 64k;
#設定緩存文件夾大小,大于這個值,將從upstream服務器傳
proxy_temp_file_write_size 64k;
#反向代理緩存目錄
proxy_cache_path /data/proxy/cache levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=1g;
#levels=1:2 設置目錄深度,第一層目錄是1個字符,第2層是2個字符
#keys_zone:設置web緩存名稱和內存緩存空間大小
#inactive:自動清除緩存文件時間。
#max_size:硬盤空間最大可使用值。
#指定臨時緩存文件的存儲路徑(路徑需和上面路徑在同一分區)
proxy_temp_path /data/proxy/temp
#服務配置
server {
? ? #偵聽的80端口
? ? listen? ? ? 80;
? ? server_name? localhost;
? ? location / {
? ? ? ? #反向代理緩存設置命令(proxy_cache zone|off,默認關閉所以要設置)
? ? ? ? proxy_cache cache_one;
? ? ? ? #對不同的狀態碼緩存不同時間
? ? ? ? proxy_cache_valid 200 304 12h;
? ? ? ? #設置以什么樣參數獲取緩存文件名
? ? ? ? proxy_cache_key $host$uri$is_args$args;
? ? ? ? #后7端的Web服務器可以通過X-Forwarded-For獲取用戶真實IP
? ? ? ? proxy_set_header Host $host;
? ? ? ? proxy_set_header X-Real-IP $remote_addr;
? ? ? ? proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;?
? ? ? ? #代理設置
? ? ? ? proxy_pass? http://IP;
? ? ? ? #文件過期時間控制
? ? ? ? expires? ? 1d;
? ? }
? ? #配置手動清楚緩存(實現此功能需第三方模塊 ngx_cache_purge)
? ? #http://www.123.com/2017/0316/17.html訪問
? ? #http://www.123.com/purge/2017/0316/17.html清楚URL緩存
? ? location ~ /purge(/.*) {
? ? ? ? allow? ? 127.0.0.1;
? ? ? ? deny? ? all;
? ? ? ? proxy_cache_purge? ? cache_one? ? $host$1$is_args$args;
? ? }
? ? #設置擴展名以.jsp、.php、.jspx結尾的動態應用程序不做緩存
? ? location ~.*\.(jsp|php|jspx)?$ {
? ? ? ? proxy_set_header Host $host;
? ? ? ? proxy_set_header X-Real-IP $remote_addr;
? ? ? ? proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;?
? ? ? ? proxy_pass http://http://IP;
? ? }
7.負載均衡
#負載均衡服務器池
upstream my_server_pool {
? ? #調度算法
? ? #1.輪循(默認)(weight輪循權值)
? ? #2.ip_hash:根據每個請求訪問IP的hash結果分配。(會話保持)
? ? #3.fair:根據后端服務器響應時間最短請求。(upstream_fair模塊)
? ? #4.url_hash:根據訪問的url的hash結果分配。(需hash軟件包)
? ? #參數:
? ? #down:表示不參與負載均衡
? ? #backup:備份服務器
? ? #max_fails:允許最大請求錯誤次數
? ? #fail_timeout:請求失敗后暫停服務時間。
? ? 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;
}
#負載均衡調用
server {
? ? ...
? ? location / {
? ? proxy_pass http://my_server_pool;
? ? }
}
8.URL重寫
#根據不同的瀏覽器URL重寫
? if($http_user_agent ~ Firefox){
? rewrite ^(.*)$? /firefox/$1 break;
? }
? if($http_user_agent ~ MSIE){
? rewrite ^(.*)$? /msie/$1 break;
? }
? #實現域名跳轉
? location / {
? rewrite ^/(.*)$ https://web8.example.com$1 permanent;
? }
9.IP限制
#限制IP訪問
location / {
? ? deny 192.168.0.2;
? ? allow 192.168.0.0/24;
? ? allow 192.168.1.1;
? ? deny all;
}