您好,登錄后才能下訂單哦!
#配置用戶或者組,默認為nobody nobody
user nobody;
#啟動進程,根據硬件調整,通常等于CPU數量或者2倍于CPU
worker_processes 1;
#指定日志路徑,級別。這個設置可以放入全局塊,http塊,server塊,級別以此為: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;
#指定nginx進程運行文件存放地址
pid logs/nginx.pid;
#工作模式及連接數上限
events {
#設置網路連接序列化,防止驚群現象發生,默認為on
accept_mutex on;
#設置一個進程是否同時接受多個網絡連接,默認為off
multi_accept on;
#epoll是多路復用IO(I/O Multiplexing)中的一種方式,
#僅用于linux2.6以上內核,可以大大提高nginx的性能
#linux建議epoll,FreeBSD建議采用kqueue,window下不指定。
#補充說明: 與apache相類,nginx針對不同的操作系統,有不同的事件模型
#A)標準事件模型:Select、poll屬于標準事件模型,如果當前系統不存在更有效的方法,nginx會選擇select或poll
#B)高效事件模型:Kqueue:使用于FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和 MacOS X.使用雙處理器的MacOS X系統使用kqueue可能會造成內核崩潰。
#Epoll:使用于Linux內核2.6版本及以后的系統。
#/dev/poll:使用于Solaris 7 11/99+,HP/UX 11.22+ (eventport),IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+。
#Eventport:使用于Solaris 10。 為了防止出現內核崩潰的問題, 有必要安裝安全補丁
# use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]
use epoll;
#單個后臺worker process進程的最大并發鏈接數
worker_connections 1024;
# 并發總數是 worker_processes 和 worker_connections 的乘積
# 即 max_clients = worker_processes * worker_connections
# 在設置了反向代理的情況下,max_clients = worker_processes * worker_connections / 4 為什么
# 為什么上面反向代理要除以4,應該說是一個經驗值
# 根據以上條件,正常情況下的Nginx Server可以應付的最大連接數為:4 * 8000 = 32000
# worker_connections 值的設置跟物理內存大小有關
# 因為并發受IO約束,max_clients的值須小于系統可以打開的最大文件數
# 而系統可以打開的最大文件數和內存大小成正比,一般1GB內存的機器上可以打開的文件數大約是10萬左右
# 我們來看看360M內存的VPS可以打開的文件句柄數是多少:
# $ cat /proc/sys/fs/file-max
# 輸出 34336
# 32000 < 34336,即并發連接總數小于系統可以打開的文件句柄總數,這樣就在操作系統可以承受的范圍之內
# 所以,worker_connections 的值需根據 worker_processes 進程數目和系統可以打開的最大文件總數進行適當地進行設置
# 使得并發總數小于操作系統可以打開的最大文件數目
# 其實質也就是根據主機的物理CPU和內存進行配置
# 當然,理論上的并發總數可能會和實際有所偏差,因為主機還有其他的工作進程需要消耗系統資源。
# ulimit -SHn 65535
#keepalive超時時間
keepalive_timeout 60;
#客戶端請求頭部的緩沖區大小。這個可以根據你的系統分頁大小來設置,一般一個請求頭的大小不會超過1k,
#不過由于一般系統分頁都要大于1k,所以這里設置為分頁大小。分頁大小可以用命令getconf PAGESIZE 取得。
#但也有client_header_buffer_size超過4k的情況,但是client_header_buffer_size該值必須設置為“系統分頁大小”的整倍數
client_header_buffer_size 4k;
#這個將為打開文件指定緩存,默認是沒有啟用的,max指定緩存數量,建議和打開文件數一致,inactive是指經過多長時間文件沒被請求后刪除緩存。
open_file_cache max=65535 inactive=60s;
#這個是指多長時間檢查一次緩存的有效信息
open_file_cache_valid 80s;
#open_file_cache指令中的inactive參數時間內文件的最少使用次數,如果超過這個數字,
#文件描述符一直是在緩存中打開的,如上例,如果有一個文件在inactive時間內一次沒被使用,它將被移除。
open_file_cache_min_uses 1;
}
http {
#隱藏nginx的版本號
server_tokens off;
#設定mime類型,類型由mime.type文件定義
include mime.types;
#默認文件類型
default_type application/octet-stream;
#默認編碼
charset utf-8;
#取消服務日志
access_log off;
#設定日志格式
#$remote_addr 與$http_x_forwarded_for 用以記錄客戶端的ip地址;
#$remote_user:用來記錄客戶端用戶名稱;
#$time_local:用來記錄訪問時間與時區;
#$request:用來記錄請求的url與http協議;
#$status:用來記錄請求狀態;成功是200,
#$body_bytes_sent:記錄發送給客戶端文件主體內容大小;
#$http_referer:用來記錄從那個頁面鏈接訪問過來的;
#$http_user_agent:記錄客戶瀏覽器的相關信息;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#combined為日志格式的默認值
access_log logs/access.log main;
#服務器名字的hash表大小
#保存服務器名字的hash表是由指令server_names_hash_max_size 和server_names_hash_bucket_size所控制的。參數hash bucket #size總是等于hash表的大小,并且是一路處理器緩存大小的倍數。在減少了在內存中的存取次數后,使在處理器中加速查找hash表鍵值成為可能。如果hash bucket #size等于一路處理器緩存的大小,那么在查找鍵的時候,最壞的情況下在內存中查找的次數為2。第一次是確定存儲單元的地址,第二次是在存儲單元中查找鍵 #值。因此,如果Nginx給出需要增大hash max size 或 hash bucket size的提示,那么首要的是增大前一個參數的大小.
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
#客戶請求頭緩沖大小。nginx默認會用client_header_buffer_size這個buffer來讀取header值,如果
#header過大,它會使用 large_client_header_buffers 來讀取。
large_client_header_buffers 8 128k;
#這個指令指定緩存是否啟用;打開緩存的同時也指定了緩存最大數目,以及緩存的時間。
#我們可以設置一個相對高的最大時間,這樣我們可以在它們不活動超過20秒后清除掉
open_file_cache max=100000 inactive=20s;
#在open_file_cache中指定檢測正確信息的間隔時間。
open_file_cache_valid 30s;
#定義了open_file_cache中指令參數不活動時間期間里最小的文件數。使用字段:http, server, location
open_file_cache_min_uses 2;
#指定了當搜索一個文件時是否緩存錯誤信息,也包括再次給配置中添加文件。
#使用字段:http, server, location
open_file_cache_errors on;
#設定通過nginx上傳文件的大小
client_max_body_size 300m;
#sendfile 指令指定 nginx 是否調用 sendfile 函數(zero copy 方式)來輸出文件,
#對于普通應用,必須設為 on,
#如果用來進行下載等應用磁盤IO重負載應用,可設置為 off,
#以平衡磁盤與網絡I/O處理速度,降低系統的uptime.
sendfile on;
#連接超時時間
keepalive_timeout 65;
#后端服務器連接的超時時間_發起握手等候響應超時時間
proxy_connect_timeout 90;
#連接成功后_等候后端服務器響應時間_其實已經進入后端的排隊之中等候處理(也可以說是后端服務器處理請求的時間)
proxy_read_timeout 180;
#后端服務器數據回傳時間_就是在規定時間之內后端服務器必須傳完所有的數據
proxy_send_timeout 180;
#設置代理服務器(nginx)保存用戶頭信息的緩沖區大小
proxy_buffer_size 256k;
#設置用于讀取應答(來自被代理服務器)的緩沖區數目和大小,默認情況也為分頁大小,根據操作系統的不同可能是4k或者8k
proxy_buffers 4 256k;
#高負荷下緩沖大小(proxy_buffers*2)
proxy_busy_buffers_size 256k;
#緩沖區代理緩沖用戶端請求的最大字節數
client_body_buffer_size
#設置在寫入proxy_temp_path時數據的大小,預防一個工作進程在傳遞文件時阻塞太長;
#設定緩存文件夾大小,大于這個值,將從upstream服務器傳
proxy_temp_file_write_size 256k;
#告訴nginx在一個數據包里發送所有頭文件,而不一個接一個的發送
tcp_nopush on;
#告訴nginx不要緩存數據,而是一段一段的發送
tcp_nodelay on;
#開啟gzip壓縮
gzip on;
#為指定的客戶端禁用gzip功能。我們設置成IE6或者更低版本以使我們的方案能夠廣泛兼容。
gzip_disable "MSIE [1-6].";
#告訴nginx在壓縮資源之前,先查找是否有預先gzip處理過的資源。這要求你預先壓縮你的文件(在這個例子中被注釋掉了)
#從而允許你使用最高壓縮比,這樣nginx就不用再壓縮這些文件了(想要更詳盡的gzip_static的信息,請點擊這里)。
gzip_static on;
#允許或者禁止壓縮基于請求和響應的響應流。我們設置為any,意味著將會壓縮所有的請求。
gzip_proxied any;
#最小壓縮文件大小
gzip_min_length 1k;
#壓縮緩沖區
gzip_buffers 4 16k;
#壓縮版本(默認1.1,前端如果是squid2.5請使用1.0)
gzip_http_version 1.0;
#壓縮等級
gzip_comp_level 2;
#壓縮類型,默認就已經包含text/html,所以下面就不用再寫了,寫上去也不會有問題,但是會有一個warn。
gzip_types text/plain application/x-javascript text/css application/xml;
#和http頭有關系,加個vary頭,給代理服務器用的,有的瀏覽器支持壓縮,有的不支持,所以避免浪費不支持的也壓縮,所以根據客戶端的HTTP頭來判斷,是否需要壓縮
gzip_vary on;
#limit_zone crawler $binary_remote_addr 10m; #開啟限制IP連接數的時候需要使用
upstream mysvr {
#nginx的upstream目前支持4種方式的分配
#1、輪詢(默認)每個請求按時間順序逐一分配到不同的后端服務器,如果后端服務器down掉,能自動剔除。
#2、weight 指定輪詢幾率,weight和訪問比率成正比,用于后端服務器性能不均的情況。
#3、ip_hash 每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個后端服務器,可以解決session的問題。
#4、fair(第三方):按后端服務器的響應時間來分配請求,響應時間短的優先分配。
#5、url_hash(第三方):按訪問url的hash結果來分配請求,使每個url定向到同一個后端服務器,后端服務器為緩存時比較有效。
#每個設備的狀態設置為:
#1.down表示單前的server暫時不參與負載
#2.weight為weight越大,負載的權重就越大。
#3.max_fails:允許請求失敗的次數默認為1.當超過最大次數時,返回proxy_next_upstream模塊定義的錯誤
#4.fail_timeout:max_fails次失敗后,暫停的時間。
#5.backup: 其它所有的非backup機器down或者忙的時候,請求backup機器。所以這臺機器壓力會最輕。
server 127.0.0.1:7878 down;
server 192.168.10.121:3333 backup; #熱備
server 192.168.10.122:3333 weight=2;
server 192.168.10.123:3333 max_fails=2 fail_timeout=3s;
}
#設定虛擬主機配置
server {
#單連接請求上限次數。
keepalive_requests 120;
#偵聽80端口
listen 80;
#定義使用 localhost訪問
server_name localhost;
#定義服務器的默認網站根目錄位置
root html;
#設定本虛擬主機的訪問日志
access_log logs/nginx.access.log main;
#默認請求:location對URL進行匹配.可以進行重定向或者進行新的代理 負載均衡
location / {
#后端的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;
#請求轉向mysvr 定義的服務器列表
proxy_pass mysvr;
proxy_redirect default;
#定義首頁索引文件的名稱
index index.php index.html index.htm;
}
#防止網絡爬蟲
if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot") {
return 403;
}
# 定義錯誤提示頁面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
#靜態文件,nginx自己處理 ,正則匹配,~為區分大小寫,~*為不區分大小寫。
location ~ ^/(p_w_picpaths|javascript|js|css|flash|media|static)/ {
#讓客戶端緩存不常改變的數據
#過期30天,靜態文件不怎么更新,過期可以設大一點,
#如果頻繁更新,則可以設置得小一點。
expires 30d;
}
#PHP 腳本請求全部轉發到 FastCGI處理. 使用FastCGI默認配置.
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
#禁止訪問 .htxxx 文件
location ~ /.ht {
#設置默認頁
index vv.txt;
#root path; #根目錄
deny all;
#拒絕的ip
deny 127.0.0.1;
#允許的ip
allow 172.18.5.54;
}
}
}
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。