user nginx nginx; #定義Nginx運行的用戶和用戶組 worker_processes 1; #nginx進程數,建議設置為等於CPU總核心數 worker_rlimit_nofile 1024; #一個nginx進程打開的最多文件描述符數目,理論值應該是最多打開文件數(系統的值ulimit -n)與nginx進程數相除,但是nginx分配請求並不均勻,所以建議與ulimit -n的值保持一致 error_log /var/log/nginx/error.log info; #全局錯誤日志定義類型,[ debug | info | notice | warn | error | crit ] pid /var/run/nginx.pid; #進程文件 #工作模式與連接數上限 events { use epoll; #設置用於復用客戶端線程的輪詢方法,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll是多路復用IO(I/O Multiplexing)中的一種方式,但是僅用於linux2.6以上內核,可以大大提高nginx的性能 worker_connections 1024; #單個進程最大連接數(最大連接數=連接數*進程數) multi_accept on; #收到一個新連接通知后接受盡可能多的連接 } #http服務器(詳細參數:http://nginx.org/en/docs/http/ngx_http_core_module.html) http { include /etc/nginx/mime.types; #文件擴展名與文件類型映射表 default_type application/octet-stream; #默認文件類型 access_log off; #訪問日志。關閉這個選項可以讓讀取磁盤IO操作更快(aka,YOLO) charset utf-8; #默認編碼 server_tokens off; #關閉在錯誤頁面中的nginx版本數字,這樣對於安全性是有好處的 sendfile on; #開啟高效文件傳輸模式,sendfile指令指定nginx是否調用sendfile函數來輸出文件,對於普通應用設為 on,如果用來進行下載等應用磁盤IO重負載應用,可設置為off,以平衡磁盤與網絡I/O處理速度,降低系統的負載。注意:如果圖片顯示不正常把這個改成off autoindex off; #開啟目錄列表訪問,合適下載服務器,默認關閉 tcp_nopush on; #在一個數據包里發送所有頭文件,而不一個接一個的發送。防止網絡阻塞 tcp_nodelay on; #不緩存數據,而是一段一段的發送。當需要及時發送數據時,就應該給應用設置這個屬性,這樣發送一小塊數據信息時就不能立即得到返回值。防止網絡阻塞 keepalive_timeout 120; #長連接超時時間,單位是秒 client_header_buffer_size 32k; #客戶請求頭緩沖大小 large_client_header_buffers 4 64k; #nginx默認會用 client_header_buffer_size 這個buffer來讀取header值,如果header過大,它會使用 large_client_header_buffers 來讀取 client_max_body_size 8m; #指定允許客戶端連接的最大請求實體大小,它出現在請求頭部的Content-Length字段 open_file_cache max=1000 inactive=20s; #緩存是否啟用,如果啟用,將記錄文件以下信息: 打開的文件描述符、大小信息、修改時間、存在的目錄信息、在搜索文件過程中的錯誤信息,max指定緩存的最大數目,如果緩存溢出,最長使用過的文件(LRU)將被移除 open_file_cache_errors on; #是否在搜索一個文件是記錄cache錯誤,默認值: off open_file_cache_min_uses 2; #在open_file_cache指令無效的參數中一定的時間范圍內可以使用的最小文件數,如果使用更大的值,文件描述符在cache中總是打開狀態,默認值:1 open_file_cache_valid 30s; #何時需要檢查open_file_cache中緩存項目的有效信息。默認值:60s #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 on; #開啟gzip壓縮輸出 gzip_static on; #nginx對於靜態文件的處理模塊,該模塊可以讀取預先壓縮的gz文件,這樣可以減少每次請求進行gzip壓縮的CPU資源消耗。該模塊啟用后,nginx首先檢查是否存在請求靜態文件的gz結尾的文件,如果有則直接返回該gz文件內容。為了要兼容不支持gzip的瀏覽器,啟用gzip_static模塊就必須同時保留原始靜態文件和gz文件。這樣的話,在有大量靜態文件的情況下,將會大大增加磁盤空間。我們可以利用nginx的反向代理功能實現只保留gz文件。 gzip_disable "MSIE [1-6]\.(?!.*SV1)"; #禁用IE6的gzip壓縮,IE6的某些版本對gzip的壓縮支持很不好,會造成頁面的假死 gzip_min_length 1k; #設置允許壓縮的頁面最小字節,頁面字節數從header頭的Content-Length中獲取,默認值是0,不管頁面多大都進行壓縮。建議設置成大於1K。如果小於1K可能越壓越大 gzip_buffers 4 16k; #壓縮緩沖區,設置系統獲取幾個單位的緩存用於存儲gzip的壓縮結果數據流。4 16k代表以16k為單位,安裝原始數據大小以16k為單位的4倍申請內存 。如果沒有設置,默認值是申請跟原始數據相同大小的內存空間去存儲gzip壓縮結果 gzip_comp_level 4; #壓縮級別 1-9,默認值:1(建議選擇為4),級別越高壓縮率越大,當然壓縮時間也就越長(傳輸快但比較消耗cpu) gzip_types text/xml text/css application/javascript; #壓縮類型,匹配MIME類型進行壓縮,設置哪壓縮種文本文件可參考 conf/mime.types,(無論是否指定)text/html默認已經壓縮,默認不對js/css文件進行壓縮,不能用通配符 text/* gzip_proxied off; #作為反向代理的時候啟用,開啟或者關閉后端服務器返回的結果,匹配的前提是后端服務器必須要返回包含"Via"的 header頭。 #默認值:off [off|expired|no-cache|no-store|private|no_last_modified|no_etag|auth|any] #off - 關閉所有的代理結果數據的壓縮 #expired - 啟用壓縮,如果header頭中包含 "Expires" 頭信息 #no-cache - 啟用壓縮,如果header頭中包含 "Cache-Control:no-cache" 頭信息 #no-store - 啟用壓縮,如果header頭中包含 "Cache-Control:no-store" 頭信息 #private - 啟用壓縮,如果header頭中包含 "Cache-Control:private" 頭信息 #no_last_modified - 啟用壓縮,如果header頭中不包含 "Last-Modified" 頭信息 #no_etag - 啟用壓縮 ,如果header頭中不包含 "ETag" 頭信息 #auth - 啟用壓縮 , 如果header頭中包含 "Authorization" 頭信息 #any - 無條件啟用壓縮 gzip_vary on; #和http頭有關系,加個vary頭,給代理服務器用的,有的瀏覽器支持壓縮,有的不支持,所以避免浪費不支持的也壓縮,所以根據客戶端的HTTP頭來判斷,是否需要壓縮 limit_zone crawler $binary_remote_addr 10m; #開啟限制IP連接數的時候需要使用 #upstream的負載均衡 upstream luyucheng { ip_hash; #每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個后端服務器,可以解決session的問題 server 192.168.80.1:80 weight=1; #weigth參數表示權重,權重越高被分配到的幾率越大 server 192.168.80.2:80 down; #down表示當前的server暫時不參與負載 server 192.168.80.3:80 backup; #當所有的非備機(non-backup)都宕機(down)或者繁忙(busy)的時候,就只使用由 backup 標注的備機。必須要注意的是,backup 不能和 ip_hash 關鍵字一起使用 server 192.168.80.4:80 max_fails=3 fail_timeout=30s; #最大的重試次數,和重試時間間隔。最大失敗次數為3,也就是最多進行3次嘗試,且超時時間為30秒。max_fails的默認值為 1,fail_timeout的默認值是 10s。傳輸失敗的情形,由proxy_next_upstream或fastcgi_next_upstream指定。而且可以使用proxy_connect_timeout和proxy_read_timeout控制upstream 響應時間。upstream中只有一個server時,max_fails和fail_timeout參數可能不會起作用 fair; #按后端服務器的響應時間來分配請求,響應時間短的優先分配 hash $request_uri; #按訪問url的hash結果來分配請求,使每個url定向到同一個后端服務器,后端服務器為緩存時比較有效。注意:在upstream中加入hash語句,server語句中不能寫入weight等其他的參數 hash_method crc32; #使用的hash算法 } #虛擬主機的配置 server { listen 80; server_name luyucheng.cnblogs.com cnblogs.com; #域名可以有多個,用空格隔開 index index.html index.htm index.php; root /www/cnblogs; #日志格式設定 log_format access '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $http_x_forwarded_for'; access_log /var/log/nginx/access.log access; #定義本虛擬主機的訪問日志 #定義錯誤提示頁面 error_page 500 502 503 504 /50x.html; location = /50x.html { root /root; } #對 "/yum" 啟用反向代理 location /yum { proxy_pass http://luyucheng proxy_redirect http://luyucheng.cnblogs.com/yum http://luyucheng.cnblogs.com/yum/; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #后端的Web服務器可以通過X-Forwarded-For獲取用戶真實IP #以下是一些反向代理的配置 proxy_set_header Host $host; client_max_body_size 10m; #允許客戶端請求的最大單文件字節數 client_body_buffer_size 128k; #緩沖區代理緩沖用戶端請求的最大字節數 proxy_connect_timeout 90; #nginx跟后端服務器連接超時時間(代理連接超時) proxy_send_timeout 90; #后端服務器數據回傳時間(代理發送超時) proxy_read_timeout 90; #連接成功后,后端服務器響應時間(代理接收超時) proxy_buffer_size 4k; #設置代理服務器(nginx)保存用戶頭信息的緩沖區大小 proxy_buffers 4 32k;#proxy_buffers緩沖區,網頁平均在32k以下的設置 proxy_busy_buffers_size 64k; #高負荷下緩沖大小(proxy_buffers*2) proxy_temp_file_write_size 64k; #設定緩存文件夾大小,大於這個值,將從upstream服務器傳 } #PHP 腳本請求全部轉發到 FastCGI處理. 使用FastCGI默認配置. location ~ \.php$ { root /root; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } #設定查看Nginx狀態的地址 location /NginxStatus { stub_status on; access_log off; } #HTTP Auth Basic模塊,該模塊采用基於HTTP基本身份驗證的用戶名和密碼登錄方式,來保護你的虛擬主機或目錄 location /NginxAuth{ auth_basic "NginxAuth"; #用於指定彈出的用戶名和密碼登錄框中提示的名稱 auth_basic_user_file conf/htpasswd; #用於設置htpasswd密碼文件,htpasswd文件的內容可以用apache提供的htpasswd工具來產生 } #所有靜態文件由nginx直接讀取 location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ { #緩存時間設置 expires 15d; #d(天) h(時) m(分) s(秒) } #圖片防盜鏈 location ~* \.(gif|jpg|png)$ { #表示對gif、jpg、png后綴的文件實行防盜鏈 valid_referers none blocked luyucheng.cnblogs.com *.cnblogs.com; #表示對url來源進行判斷,允許文件鏈出的域名白名單, cnblogs.com這個指的是子域名,域名與域名之間使用空格隔開 if ($invalid_referer) { rewrite ^/ http://www.cnblogs.com/404.jpg; #如果不是指定來源就跳轉到http://www.cnblogs.com/404.jpg頁面,當然直接返回403也是可以的。 #return 403; } } #禁止訪問 .htxxx 文件 location ~ /\.ht { deny all; } } }