Nginx技術研究系列6-配置詳解

前兩篇文章介紹了Nginx反向代理和動態路由:php

Ngnix技術研究系列1-經過應用場景看Nginx的反向代理html

Ngnix技術研究系列2-基於Redis實現動態路由nginx

隨着研究的深刻,很重要的一點就是了解Nginx各個配置和做用。整理一下分享給你們。後端

1、先說Nginx配置文件服務器

Nginx的配置文件是一個普通的純文本文件,使用了Nginx自定義的一套配置語法,更接近於腳本語言,混合了Shell、Perl和C的部分特性:cookie

  • 使用#開始一個註釋行
  • 配置指令以分號結束,能夠接受多個參數,用空白字符分隔
  • 可使用單引號或者雙引號來定義字符串,容許用「\」轉義字符
  • 配置指令和參數也可使用引號來指定,特別是當它含有空格的時候
  • 配置塊(block)的特殊的配置指令,它有一個{…}參數且無須分號結束,{…}裏面能夠包含多個配置指令,至關於C語言裏的複合語句
  • 有的配置指令只能出如今指定的配置塊中(即語境Context)
  • 配置塊裏能夠再包含配置塊,嵌套層次沒有限制,但需符合配置塊的語義
  • 可使用include指令包含其餘配置文件,支持「*」通配符,相似C語言
  • 使用$var能夠引用預約義的一些變量,增長配置的靈活性
  • 不能識別或錯誤的配置指令會致使Nginx解析失敗,沒法啓動

Ngnix配置文件的默認位置在:網絡

/usr/local/openresty/nginx/conf/nginx.conf

能夠複製新建一個配置文件。session

 2、進程配置併發

進程配置指令不屬於任何配置塊,只能在全局域(main)配置
worker_processes number | auto;
設置Nginx可以啓動的worker進程的數量,它直接影響Nginx的性能。一般當worker的數量與服務器的CPU核心數相等時,能夠獲取最佳的性能,這時每個worker都會工做在一個獨立的CPU核心上,徹底消除CPU調度的成本。(需配合worker_cpu_affinity指令)
Worker_processes的默認值是1. 若是不清楚服務器CPU核心數量,那麼能夠設置爲auto參數,Nginx會嘗試探測數量並設置。cat /proc/cpuinfo | grep processor
master_process on | off;
決定是否啓用Nginx的進程池機制,默認值是on,若是設置爲off,那麼Nginx不會創建master進程,只會用一個worker進程處理請求,worker_processes指令也會失效,併發處理能力大大降低。
worker_cpu_affinity auto [cpumask];
指定worker進程運行在某個CPU核心上,即CPU綁定,對於多核心的CPU來講能夠減小CPU切換,提升Cache命中率,讓Nginx更充分地利用CPU資源
Worker_processes 4;
Worker_cpu_affinity 0001 0010 0100 1000;
1.9.10以前,只能使用掩碼的方式手工綁定,如今則能夠用auto參數讓Nginx自動綁定CPU。app

worker_directory path;
配置Nginx的工做目錄,實際上僅用來存放coredump文件,在Nginx發生意外崩潰時能夠用gdb調試查找緣由。

3、運行日誌配置

在Nginx中運行日誌分爲兩種,記錄TCP/HTTP訪問請求的access_log和記錄服務器錯誤信息的error_log
error_log file|stderr level ;
指定Nginx的運行錯誤日誌,默認是安裝目錄下的logs/error.log 支持設置其餘路徑,或者使用標準錯誤輸出stderr。第二個參數level是日誌容許輸出級別,取值是debug|info|notice|warn|error|crit|alert|emerg, 只有高於這個級別的日誌纔會記錄下來,默認值是error

4、Events配置

Nginx採用事件驅動,利用操做系統內核提供的epoll、kqueue等系統調用來高效地處理網絡鏈接,events配置塊就是用來配置Nginx的事件機制。Events配置指令很少,默認配置就餓能夠工做的很好
worker_connections number;
設置每一個worker進程能夠處理的最大鏈接數量,它決定了Nginx的併發能力。這個指令決定了單個進程的處理能力。Nginx的總體最大可處理的鏈接數再乘上worker_processes的數量。
worker_connections的默認值是1024,可根據實際狀況適當增大。

5、Http配置

Nginx使用http塊配置HTTP相關的全部功能,包括cache、fastcgi、gzip、server、location、proxy、upsteam等。

http {
    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        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        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;
    #    }
    #}

resolver address … [valid=time] [ipv6=on|off]

配置域名解析服務器,不然Nginx將沒法正確解析域名的地址,沒法訪問後端的Web服務

keepalive_timeout timeout;

設置keepalive的超時時間,默認75s,主要用於客戶端複用Http長鏈接,提升服務器的性能,若是但願服務器發送數據後能主動斷開鏈接,能夠設置爲0

access_log path[format [buffer=size][flush=time][if=condition]];

access_log指令用於配置http的訪問日誌,日誌的格式由log_format決定,爲了優化磁盤讀寫,能夠設置buffer和flush選項,指定寫磁盤的緩衝區大小和刷新時間。 access_log /var/logs/nginx/access.log buffer=8k flush=1s;

 6、Proxy配置

proxy_connect_timeout time;
與Nginx服務器創建鏈接的超時時間,通常不超過75s,示例:proxy_connect_timeout 60s;

proxy_cookie_domain off;
proxy_cookie_domain domain replacement;
HttpHeader中,重寫Set-Cookie中domain的配置,例如: proxy_cookie_domain localhost example.org;

proxy_read_timeout time;
該指令設置與代理服務器的讀超時時間。它決定了nginx會等待多長時間來得到請求的響應。這個時間不是得到整個response的時間,而是兩次reading操做的時間。
這個超時時間很重要,取決與調用方的超時配置,Nginx要小於等於調用方的超時配置
有個有價值的參考鏈接:http://yunjianfei.iteye.com/blog/2265918
當Nginx遇到報表查詢、導出功能?
http://blog.chinaunix.net/uid-182114-id-4700107.html

proxy_send_timeout time
該指令設置了發送請求給upstream服務器的超時時間。超時設置不是爲了整個發送期間,而是在兩次write操做期間。若是超時後,upstream沒有收到新的數據,nginx會關閉鏈接。默認60s。

 

周國慶

2017/10/25

相關文章
相關標籤/搜索