常見參配置實戰技巧css
下面會講解實戰中應該怎麼配置更爲合理。html
1.usernode
默認是nobody,若是使用nobody,Nginx在運行過程當中會出現不少操做沒有權限,好比寫硬盤。通常都是用低於root級別的用戶,好比www,而且能夠在linux下設置www禁止ssh登陸服務器,提升安全性;linux
2.worker_processesnginx
表明Nginx worker的進程數,通常狀況下建議和機器的核數相同,也能夠配置 worker_processes auto ; (Nginx1.2.5版本添加的) 自動根據cpu核數進行進程啓動;後端
可是實際應用中,服務器不必定只跑了Nginx,須要考慮機器資源會被分配到哪些服務上,避免進程啓動過多,和其餘服務競爭cpu,致使過多上下文切換;瀏覽器
3.worker_cpu_affinity auto緩存
Nginx 1.9.10添加的功能,表示能夠根據服務器的核數自動配cpu親緣性,提高Nginx的性能;安全
四、error_log & access_log服務器
關於日誌記錄的,error_log 配置爲error級別, 減小沒必要要的日誌記錄, 若是是測試環境能夠開啓info級別。日誌記錄須要考慮硬盤的獨立性,不要使用linux的根分區,避免大量的io影響Linux服務器吞吐能力。單獨掛載一個磁盤,獨立使用io;
另外硬盤的使用壽命須要注意,關注message的日誌,按期檢查硬盤(Nginx記錄日誌是異步處理,而且不會由於硬盤的問題,致使請求異常,可是會影響日誌的記錄) ;
5.worker_priority
配置Nginx在linux服務器上資源使用的優先級,做爲反向代理服務,應該擁有極高的優先級,建議配置到-10;
6.gzip_comp_level
壓縮等級,等級最高爲9,等級越高壓縮後的文件越小,可是消耗的cpu也會更多,通過測試,壓縮等級7 和 9 的文件大小相比,其實只有細微的差異,用5-7的等級足矣;
7.upstream塊
配置上游服務器,能夠結合 proxy_next_upstream 等指令作大量的優化,我會在下面的章節單獨說明;
8.error_page
錯誤重定向,能夠捕獲上游服務器錯誤的狀態碼後,將請求重定向到其它地方,好比提供友好頁面,關於error_page的更強大的使用方式。
9.location & root
經過root路徑能夠讀取靜態文件,在1.7.11之前的版本,Nginx讀取硬盤的文件,都是阻塞型操做,後面引入了線程池,使得讀取硬盤提供了非阻塞的操做,極大的提高了硬盤的io,也提高了proxy_cache的能力。
Nginx的常見配置在使用中都有着不一樣的變化,那麼對於更爲複雜的配置來講,其配置就顯得更爲精妙了,因此熟悉Nginx的官方wiki是發揮它巨大做用的基礎。
user www www;
#定義Nginx運行的用戶和用戶組
worker_processes 2;
#Nginx進程數
worker_cpu_affinity auto;
#配置Nginx進程cpu親源性
error_log /var/log/error_log info;
#全局錯誤日誌定義類型 ,默認是error
worker_rlimit_nofile 65535;
#一個Nginx進程打開的最多文件描述符數量
pid /var/run/nginx.pid;
#進程文件
worker_priority -10;
#linnx系統下的資源使用的優先級
worker_rlimit_nofile 65535;
#worker進程的最大打開文件數限制
worker_shutdown_timeout 30;
#30s內Nginx沒法平滑退出,就強行關閉進程
events {
worker_connections 10000;
#單個進程最大鏈接數(整個Nginx最大鏈接數=鏈接數*進程數)
use epoll;
#epoll linux2.6+內核高性能的網絡io, 若是跑在FreeBSD上面,就用kqueue模型。
}
http {
include conf/mime.types;
#文件擴展名與文件類型映射表
default_type application/octet-stream;
#默認文件類型
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
‘"$http_cookie"';
#定義日誌格式
client_header_buffer_size 1k;
#設置用戶請求頭所使用的buffer大小
large_client_header_buffers 4 4k;
#當默認的緩衝不夠用時就會使用此參數。
server_names_hash_bucket_size 128;
#服務器名字的hash表大小
client_header_buffer_size 32k;
#上傳文件大小限制
gzip on;
#開啓gzip
gzip _comp_level 6;
#壓縮等級
gzip _min_length 1100;
#設置容許壓縮的頁面最小字節數
gzip _buffers 4 8k;
#設置系統獲取幾個單位的緩存用於存儲gzIP的壓縮結果數據流。4 8k 表明以8k爲單位,按照原始數據大小以8k爲單位的4倍申請內存。
gzip _types text/plain text/css;
#匹配MIME類型進行壓縮
output_buffers 2 32k;
#設置用於從磁盤讀取響應的緩衝區的數量和大小。 此設置爲:按照原始數據大小以32K爲單位的2倍大小申請內存空間。
sendfile on;
#啓用sendfile()函數
tcp_nopush on;
#防止網絡阻塞,須要sendfile開啓
tcp_nodelay on;
#防止網絡阻塞,須要sendfile開啓
keepalive_timeout 90s;
#長鏈接超時時間,單位是秒
upstream backend {
server 192.168.1.12:8081 weight=3;
server 192.168.1.13:8081 weight=2;
}
#upstream塊,weight是權重,權重越高,請求的比例越高。
server {
listen 80;
#http監聽端口
server_name your.example.com;
#域名
access_log /var/log/nginx.access_log main;
#訪問日誌記錄
charset koi8-r;
#默認編碼
location / {
proxy_pass http://backend ;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
#後端的應用服務器經過X-Forwarded-For獲取用戶的真實IP
error_page 404 /404.html;
#對於後端應用服務器拋出的錯誤404 進行頁面重定向
location /404.html {
root /spool/www;
}
# 匹配URL爲jpg,jpeg,gif結尾的,直接去系統文件讀取
location ~* \.(jpg|jpeg|gif)$ {
root /spool/www;
expires 30d;
#瀏覽器緩存的時間
}
}