#總統參見:https://segmentfault.com/a/1190000002789743
#定義 Nginx 運行的用戶和用戶組
#user root(linux)
#user nobody;
#定義了nginx對外提供web服務時的worker進程數。最優值取決于許多因素,包括(但不限于)CPU核的數量、存儲數據的硬盤數量及負載模式。不能確定的時候,將其設置為可用的CPU內核數將是一個好的開始(設置為“auto”將嘗試自動檢測它)。
#一般可設置為可用的CPU內核數。
#文檔不錯:http://blog.csdn.net/fireroll/article/details/15756745
worker_processes 4;
#打開文件描述符的最大數量限制。如果沒設置的話,這個值為操作系統的限制。設置后你的操作系統和Nginx可以處理比“ulimit -a”更多的文件,所以把這個值設高,這樣nginx就不會有“too many open files”問題了。
worker_rlimit_nofile 65535;
#錯誤日志位置和級別,debug、info、notice、warn、error、crit、alert、emerg
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
error_log logs/error.log error;
#指定主進程文件存放地方
#pid logs/nginx.pid;
events {
#單個進程最大連接數(最大連接數=連接數*進程數)
#如果設置了上面提到的worker_rlimit_nofile,我們可以將這個值設得很高。
#文檔不錯:http://blog.csdn.net/xifeijian/article/details/20956605
worker_connections 2048;
#告訴nginx收到一個新連接通知后接受盡可能多的連接
multi_accept on;
#設置用于復用客戶端線程的輪詢方法。【select、poll、epoll和kqueue】
#https://www.cnblogs.com/linganxiong/p/5583415.html
#use epoll;
}
http {
#隱藏 Nginx 的版本號,提高安全性。
server_tokens off;
#是一個在當前文件中包含另一個文件內容的指令。這里我們使用它來加載文件擴展名與文件類型映射表。nginx根據映射關系,設置http請求響應頭的Content-Type值。當在映射表找不到時,使用nginx.conf中default-type指定的默認值。
include mime.types;
#設置文件使用的默認的MIME-type
default_type application/octet-stream;
#默認編碼
charset UTF-8;
#日志格式設定
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
##定義訪問日志,設置為 off 可以關閉日志,提高性能
Eccess_log logs/access.log main;
Eccess_log logs/access.log main buffer=32k;
access_log off;
log_not_found off;
#開啟高效文件傳輸模式,sendfile指令指定nginx是否調用sendfile函數來輸出文件,對于普通應用設為 on,如果用來進行下載等應用磁盤IO重負載應用,可設置為off,以平衡磁盤與網絡I/O處理速度,降低系統的負載。
#注意:如果圖片顯示不正常把這個改成off。
sendfile on;
#是否開啟目錄列表訪問,默認關閉。
autoindex off;
#告訴 Nginx 在一個數據包里發送所有頭文件,而不一個接一個的發送
tcp_nopush on;
#告訴 Nginx 不要緩存數據,而是一段一段的發送--當需要及時發送數據時,就應該給應用設置這個屬性,這樣發送一小塊數據信息時就不能立即得到返回值。
#Nginx 默認會始終工作在 tcp nopush 狀態下。但是當開啟前面的 sendfile on; 時,它的工作特點是 nopush的最后一個包會自動轉轉換到 nopush off。
#為了減小那200ms的延遲,開啟 nodelay on; 將其很快傳送出去。結論就是 sendfile on; 開啟時,tcp_nopush 和 tcp_nodelay 都是on 是可以的。
tcp_nodelay on;
#連接超時時間,單位是秒
#keepalive_timeout 0;
keepalive_timeout 65;
#讀取HTTP頭部的超時時間,默認值 60。
#客戶端與服務器建立連接后將開始接收HTTP頭部,在這個過程中,如果在一個時間間隔(超時時間)內沒有讀取到客戶端發來的字節,則認為超時,并向客戶端返回408 ("Request timed out")響應。
#client_header_timeout 60;
#默認值 60。與client_header_timeout相似,只是這個超時時間只在讀取HTTP包體時才有效。
#client_body_timeout 10;
#發送響應的超時時間,默認值 60。即Nginx服務器向客戶端發送了數據包,但客戶端一直沒有去接收這個數據包。如果某個連接超過send_timeout定義的超時時間,那么Nginx將會關閉這個連接。
#send_timeout 60;
#連接超時后將通過向客戶端發送RST包來直接重置連接。這個選項打開后,Nginx會在某個連接超時后,不是使用正常情形下的四次握手關閉TCP連接,而是直接向用戶發送RST重置包,不再等待用戶的應答,直接釋放Nginx服務器上關于這個套接字使用的所有緩存(如TCP滑動窗口)。相比正常的關閉方式,它使得服務器避免產生許多處于FIN_WAIT_1、FIN_WAIT_2、TIME_WAIT狀態的TCP連接。注意,使用RST重置包關閉連接會帶來一些問題,默認情況下不會開啟。
#reset_timedout_connection off;
#要限制連接,必須先有一個容器對連接進行計數,"zone=" 是給它一個名字,可以隨便叫,這個名字要跟下面的 limit_conn 一致。$binary_remote_addr 用二進制來儲存客戶端的地址,1m 可以儲存 32000 個并發會話。
#limit_conn_zone $binary_remote_addr zone=addr:5m;
#給定的key設置最大連接數。這里key是addr,我們設置的值是100,也就是說我們允許每一個IP地址最多同時打開有100個連接。
#limit_conn addr 100;
#對每個連接限速100k。這如果一個IP允許兩個并發連接,那么這個IP就是限速200K。
#limit_rate 100k;
#該模塊可以讀取預先壓縮的gz文件,這樣可以減少每次請求進行gzip壓縮的CPU資源消耗。該模塊啟用后,nginx首先檢查是否存在請求靜態文件的gz結尾的文件,如果有則直接返回該gz文件內容。
gzip_static off;
#啟用Gizp壓縮
#gzip on;
# 禁用客戶端為 IE6 時的 gzip功能。
gzip_disable "msie6";
#Nginx做為反向代理的時候啟用。可選值:off|expired|no-cache|no-sotre|private|no_last_modified|no_etag|auth|any
gzip_proxied any;
#設置允許壓縮的頁面最小字節數,頁面字節數從header頭中的Content-Length中進行獲取。建議設置成大于1k的字節數,小于1k可能會越壓越大。
gzip_min_length 1024;
#設置數據的壓縮等級。這個等級可以是1-9之間的任意數值,9是最慢但是壓縮比最大的。
gzip_comp_level 5;
#設置系統獲取幾個單位的緩存用于存儲gzip的壓縮結果數據流。 例如 4 4k 代表以4k為單位,按照原始數據大小以4k為單位的4倍申請內存。如果沒有設置,默認值是申請跟原始數據相同大小的內存空間去存儲gzip壓縮結果。
gzip_buffers 4 16k;
#設置需要壓縮的數據格式。Nginx默認只對text/html進行壓縮。
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
#為打開文件指定緩存,默認是沒有啟用的,max 指定緩存數量,建議和打開文件數一致,inactive 是指經過多長時間文件沒被請求后刪除緩存。
open_file_cache max=65535 inactive=30s;
#多長時間檢查一次緩存的有效信息
open_file_cache_valid 30s;
#open_file_cache指令中的inactive參數時間內文件的最少使用次數,如果超過這個數字,文件描述符一直是在緩存中打開的。出現 Last-Modified 不變的情況,就是因為當nginx對一個靜態文件緩存后,如果30s內還在訪問它,那么它的緩存就一直存在,直到30s內你不訪問了為止。
open_file_cache_min_uses 2;
#是否記錄cache錯誤
open_file_cache_errors on;
#服務器集群名字(supxx.com)
<、weight(權重):指定輪詢幾率,weight和訪問比率成正比,用于后端服務器性能不均的情況。例:server 10.0.0.77 weight=5;
>、ip_hash(訪問ip):每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個后端服務器,可以解決session的問題。
#upstream favresin{
# ip_hash;
# server 10.0.0.11:8080;
#}
&、fair(第三方):按后端服務器的響應時間來分配請求,響應時間短的優先分配。與weight分配策略類似。
#upstream favresin{
# server 10.0.0.10:8080;
# fair;
#}
*、url_hash(第三方): 按訪問url的hash結果來分配請求,使每個url定向到同一個后端服務器,后端服務器為緩存時比較有效。
# 注意:在upstream中加入hash語句,server語句中不能寫入weight等其他的參數,hash_method是使用的hash算法。
#upstream resinserver{
# server 10.0.0.10:7777;
# shash $request_uri;
# hash_method crc32;
#}
#
#upstream還可以為每個設備設置狀態值,這些狀態值的含義分別如下:
#down 表示單前的server暫時不參與負載.
#weight 默認為1.weight越大,負載的權重就越大。
#max_fails :允許請求失敗的次數默認為1.當超過最大次數時,返回proxy_next_upstream 模塊定義的錯誤.
#fail_timeout : max_fails次失敗后,暫停的時間。
#backup: 其它所有的非backup機器down或者忙的時候,請求backup機器。所以這臺機器壓力會最輕。
#upstream bakend{ #定義負載均衡設備的Ip及設備狀態
# ip_hash;
# server 10.0.0.11:9090 down;
# server 10.0.0.11:8080 weight=2;
# server 10.0.0.11:6060;
# server 10.0.0.11:7070 backup;
# server 10.0.0.11:5050 weight=10 max_fails=3 fail_timeout=30s;
#}
upstream supxx.com {
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:9090 weight=2;
fair;
}
#當前的Nginx的配置
server {
#監聽端口,nginx 會根據請求的 HOST 來決定使用哪個 SERVER 段的配置。如果沒有匹配的 server_name,則默認使用配置文件中第一個。加上 default_server 則可以以指定沒有匹配時的默認規則。
#listen 80;
listen 80 default_server;
#域名可以有多個,用空格隔開
server_name www.supxx.com www.supxx.cn;
#charset koi8-r;
Eccess_log logs/host.access.log main;
#配置 ssl,有需要時開啟。
#ssl on;
#ssl_certificate /etc/nginx/ssl/server.crt;
#ssl_certificate_key /etc/nginx/ssl/server.key;
#服務映射
#http://blog.csdn.net/heiyueya/article/details/70149270
#location的匹配種類有哪些?
#格式[空格|=|~|~*|^~|!~|!~*]/uri/{}]
#=開頭表示精確匹配
#~開頭表示區分大小寫的正則匹配
#~*開頭表示不區分大小寫的正則匹配
#^~ 開頭表示uri以某個常規字符串開頭,理解為匹配 url路徑即可。nginx不對url做編碼,因此請求為/static/20%/aa,可以被規則^~ /static/ /aa匹配到(注意是空格)。
#!~和!~*分別為區分大小寫不匹配及不區分大小寫不匹配 的正則
#/通用匹配, 如果沒有其它匹配,任何請求都會匹配到
#
#location搜索順序
#no優先級:(location =) > (location 完整路徑) > (location ^~ 路徑) > (location ~,~* 正則順序) > (location 部分起始路徑) > (/)
<.首先匹配=
>.其次匹配^~
&.再其次按照配置文件的順序進行正則匹配、
*.最后是交給/進行通用匹配
#
#注意:
#當有匹配成功時,立刻停止匹配,按照當前匹配規則處理請求
#特別注意: 字符串匹配優先搜索,但是只是記錄下最長的匹配 ( 如果 ^~ 是最長的匹配,則會直接命中,停止搜索正則 ),然后繼續搜索正則匹配,如果有正則匹配,則命中正則匹配,如果沒有正則匹配,則命中最長的字符串匹配.
#
#
#
#實際使用建議
#所以實際使用中,個人覺得至少有三個匹配規則定義,如下:
#直接匹配網站根,通過域名訪問網站首頁比較頻繁,使用這個會加速處理,官網如是說。
#這里是直接轉發給后端應用服務器了,也可以是一個靜態首頁
# 第一個必選規則
#location = / {
# proxy_pass http://tomcat:8080/index
#}
# 第二個必選規則是處理靜態文件請求,這是nginx作為http服務器的強項
# 有兩種配置模式,目錄匹配或后綴匹配,任選其一或搭配使用
#location ^~ /static/ {
# root /webroot/static/;
#}
#location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
# root /webroot/res/;
#}
#第三個規則就是通用規則,用來轉發動態請求到后端應用服務器
#非靜態文件請求就默認是動態請求,自己根據實際把握
#畢竟目前的一些框架的流行,帶.php,.jsp后綴的情況很少了
#location / {
# proxy_pass http://tomcat:8080/
#}
#
#
#
#
#
#
#
#
#
location / {
proxy_pass http://supxx.com;
proxy_redirect default;
}
#圖片緩存時間設置
location ~* .*.(gif|jpg|jpeg|png|bmp|swf)$ {
expires 10d;
}
#JS和CSS緩存時間設置
location ~* .*.(js|css)?$ {
expires 1h;
}
*04頁面配置
#error_page 404 /404.html;
o00頁面設置
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# 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;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# 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;
# }
#}
}
名稱: ?4C.ESL | .↗Evon
口號: 遇到新問題?先要尋找一個方案乄而不是創造一個方案こ
mail: 聯系我