nginx(三)詳細配置參數及實際場景使用實例介紹

一.nginx簡介

        Nginx (發音爲[engine x])專爲性能優化而開發,其最知名的優勢是它的穩定性和低系統資源消耗,以及對併發鏈接的高處理能力(單臺物理服務器可支持30000~50000個併發鏈接), 是一個高性能的 HTTP 和反向代理服務器,也是一個IMAP/POP3/SMTP 代理服務器,官網http://nginx.org/javascript

        實際使用中,nginx主要應用場景有:反向代理,負載均衡php

 

二.nginx基本配置與參數說明

前面幾篇文章有說明安裝完nginx以後,能夠經過/etc/nginx/nginx.conf 文件打開nginx配置文件下面分別對nginx各項參數配置項進行說明css

#運行用戶html

user nobody;

#啓動進程,一般設置成和cpu的數量相等java

worker_processes  1;

#全局錯誤日誌及PID文件node

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;

 

#工做模式及鏈接數上限linux

events {nginx

    #epoll是多路複用IO(I/O Multiplexing)中的一種方式,算法

    #僅用於linux2.6以上內核,能夠大大提升nginx的性能   apache

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

}

 

#設定http服務器

http {

    #設定mime類型,類型由mime.type文件定義   

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"';
access_log  logs/access.log  main;

 

    #sendfile 指令指定 nginx 是否調用 sendfile 函數(zero copy 方式)來輸出文件,

    #對於普通應用,必須設爲 on,

    #若是用來進行下載等應用磁盤IO重負載應用,可設置爲 off,

    #以平衡磁盤與網絡I/O處理速度,下降系統的uptime.   

sendfile     on;

    #tcp_nopush     on;

    #鏈接超時時間

    #keepalive_timeout  0;   

keepalive_timeout  65;
tcp_nodelay     on;

 #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;

    #upstream的負載均衡,(以權重方式分發),weight是權重,能夠根據機器配置定義權重。weigth參數表示權值,權值越高被分配到的概率越大。

upstream blog.nginx.com {
    server 192.168.102.121:80 weight=3;
    server 192.168.102.122:80 weight=2;
    server 192.168.102.123:80 weight=1;
}

      #upstream的負載均衡,(以nginx熱備方式分發),其它全部的非backup Server down或者忙的時候,請求backup機器,因此這臺機器壓力會最輕

upstream blog.nginx.com {
    server 192.168.102.121:80;
    server 192.168.102.122:80;
    server 192.168.102.123:80 backup;
}

    #開啓gzip壓縮   

gzip  on;
gzip_disable "MSIE [1-6].";

 

    #設定請求緩衝   

client_header_buffer_size    128k;
large_client_header_buffers  4 128k;

 

    #設定虛擬主機配置

    server {

        #監聽80端口       

listen    80;

        #定義訪問地址,域名能夠有多個,用空格隔開       

server_name www.nginx.cn nginx.cn ;

      #定義服務器的默認網站根目錄位置       

root html;

      #設定本虛擬主機的訪問日誌       

access_log  logs/nginx.access.log  main;

      #默認請求       

location / {            
   #定義首頁索引文件的名稱
   index index.php index.html index.htm;   
}

     #對 「/」 啓用反向代理

location / {
    proxy_pass http://127.0.0.1:88;
    proxy_redirect off;
    proxy_set_header X-Real-IP $remote_addr;
    #後端的Web服務器能夠經過X-Forwarded-For獲取用戶真實IP
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    #如下是一些反向代理的配置,可選。
    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服務器傳
}

    #設定查看Nginx狀態的地址

location /NginxStatus {
    stub_status on;
    access_log on;
    auth_basic 「NginxStatus」;
    auth_basic_user_file conf/htpasswd;
    #htpasswd文件的內容能夠用apache提供的htpasswd工具來產生。
}

       

       本地動靜分離反向代理配置

        #全部jsp的頁面均交由tomcat或resin處理

location ~ .(jsp|jspx|do)?$ {
    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://127.0.0.1:8080;
}

        #全部靜態文件由nginx直接讀取不通過tomcat或resin

location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt
                |pdf|xls|mp3|wma)$ { 
    expires 15d; 
}
location ~ .*.(js|css)?$ { 
    expires 1h; 
}

 

        # 定義錯誤提示頁面       

error_page   500 502 503 504 /50x.html;
location = /50x.html {
}

 

        #靜態文件緩存時間設置,nginx本身處理       

location ~ ^/(images|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 {
   deny all;
}

 

Nginx中的upstream輪詢機制介紹【負載均衡】

Nginx中upstream有如下幾種方式:

一、輪詢(weight=1) 
默認選項,當weight不指定時,各服務器weight相同, 每一個請求按時間順序逐一分配到不一樣的後端服務器,若是後端服務器down掉,能自動剔除。

upstream bakend {
    server 192.168.1.10;
    server 192.168.1.11;
}

二、weight 
指定輪詢概率,weight和訪問比率成正比,用於後端服務器性能不均的狀況。 
 若是後端服務器down掉,能自動剔除。 
 好比下面配置,則1.11服務器的訪問量爲1.10服務器的兩倍。

upstream bakend {
    server 192.168.1.10 weight=1;
    server 192.168.1.11 weight=2;
}

三、ip_hash 
每一個請求按訪問ip的hash結果分配,這樣每一個訪客固定訪問一個後端服務器,能夠解決session不能跨服務器的問題。 
若是後端服務器down掉,要手工down掉。

upstream resinserver{
    ip_hash;
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
}

四、fair(第三方插件) 
按後端服務器的響應時間來分配請求,響應時間短的優先分配。

upstream resinserver{
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
    fair;
}

五、url_hash(第三方插件) 
 按訪問url的hash結果來分配請求,使每一個url定向到同一個後端服務器,後端服務器爲緩存服務器時比較有效。 
 在upstream中加入hash語句,hash_method是使用的hash算法

upstream resinserver{
   server 192.168.1.10:8080;
   server 192.168.1.11:8080;
   hash $request_uri;
   hash_method crc32;
}

設備的狀態有: 
1.down 表示單前的server暫時不參與負載 
2.weight 權重,默認爲1。 weight越大,負載的權重就越大。 
3.max_fails 容許請求失敗的次數默認爲1。當超過最大次數時,返回proxy_next_upstream 模塊定義的錯誤 
4.fail_timeout max_fails次失敗後,暫停的時間。 
5.backup 備用服務器, 其它全部的非backup機器down或者忙的時候,請求backup機器。因此這臺機器壓力會最輕。

nginx錯誤頁面配置

error_page 404 /404.html;
    location = /40x.html {
}

error_page 500 502 504 /50x.html;
    location = /50x.html {
}

error_page 503 /503.html;
     location = /usr/share/nginx/html/503.html {
}

 

 

 

nginx啓動、重啓、關閉操做介紹

啓動nginx:
nginx -c /etc/nginx/nginx.conf

重啓nginx:
nginx -s reload //修改配置後從新加載生效
nginx -s reopen //從新打開日誌文件
nginx -t -c /etc/nginx/nginx.conf 測試nginx配置文件是否正確

關閉nginx:
nginx -s stop  //快速中止nginx
         quit  //完整有序的中止nginx

ps -ef | grep nginx;//查看nginx進程
相關文章
相關標籤/搜索