首頁 >運維 >linux運維 >深入 Nginx 之配置篇

深入 Nginx 之配置篇

藏色散人
藏色散人轉載
2019-03-09 10:37:522076瀏覽

常用設定項

在工作中,我們與 Nginx 打交道更多的是透過其設定檔來進行。那麼掌握這些配置項各自的作用就很有必要了。 (相關推薦:Linux教學

首先,nginx.conf 的內容通常是這樣的:

...              
...            #核心摸块
events {        #事件模块
   ...
}
http {     # http 模块
    server {      # server块
        location [PATTERN] {  # location块
            ...
        }
        location [PATTERN] {
            ...
        }
    }
    server {
      ...
    }
}
mail {     # mail 模块
     server {    # server块
          ...
    }
}

我們依序看一下每個模組一般有哪些配置項。

核心模組

user admin; #配置用户或者组
worker_processes 4; #允许生成的进程数,默认为1 
pid /nginx/pid/nginx.pid; #指定 nginx 进程运行文件存放地址 
error_log log/error.log debug; #错误日志路径,级别

事件模組

events { 
    accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on 
    multi_accept on; #设置一个进程是否同时接受多个网络连接,默认为off 
    use epoll; #事件驱动模型select|poll|kqueue|epoll|resig
    worker_connections 1024; #最大连接数,默认为512
}

http 模組

http {
    include       mime.types;   #文件扩展名与文件类型映射表
    default_type  application/octet-stream; #默认文件类型,默认为text/plain
    access_log off; #取消服务日志    
    sendfile on;   #允许 sendfile 方式传输文件,默认为off,可以在http块,server块,location块
    sendfile_max_chunk 100k;  #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限
    keepalive_timeout 65;  #连接超时时间,默认为75s,可以在http,server,location块
    server 
    {
            keepalive_requests 120; #单连接请求上限次数
            listen 80; #监听端口
            server_name  127.0.0.1;   #监听地址      
            index index.html index.htm index.php;
            root your_path;  #根目录
            location ~ \.php$
            {
                  fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
                  #fastcgi_pass 127.0.0.1:9000;
                  fastcgi_index index.php;
                  include fastcgi_params;
            }
    }
}

##設定項目解析

worker_processes

worker_processes 用來設定Nginx 服務的進程數。該值建議使用 CPU 核心數。

worker_cpu_affinity*

worker\_cpu\_affinity 用來為每個行程分配CPU的工作內核,參數有多個二進位值表示,每一組代表一個進程,每組中的每一位代表該進程使用CPU的情況,1代表使用,0代表不使用。所以我們使用 worker\_cpu\_affinity0001001001001000; 來讓行程分別綁定不同的核上。預設情況下worker程序不綁定在任何一個CPU上。

worker_rlimit_nofile

設定毎個行程的最大檔案開啟數。如果不設的話上限就是系統的 ulimit–n 的數字,一般為65535。

worker_connections

設定一個行程理論允許的最大連結數,理論上越大越好,但不可以超過 worker_rlimit_nofile 的值。

use epoll

設定事件驅動模型使用 epoll。 epoll 是 Nginx 支援的高效能事件驅動程式庫之一。是公認的非 常優秀的事件驅動模型。

accept_mutex off

關閉網路連線序列化,當其設定為開啟的時候,將會對多個Nginx 進程接受連線進行序列化,防止多個進程對連線的爭搶。當伺服器連線數不多時,開啟這個參數會讓負載有一定程度的降低。但是當伺服器的吞吐量很大時,為了效率,請關閉這個參數;並且關閉這個參數的時候也可以讓請求在多個 worker 間的分配更均衡。所以我們設定 accept_mutex off;。

multi_accept on

設定一個行程可同時接受多個網路連線。

Sendfile on

Sendfile 是 Linux2.0 以後的推出的系統調用,它能簡化網路傳輸過程中的步驟,提高伺服器效能。

不用sendfile 的傳統網路傳輸過程:

硬盘 >> kernel buffer >> user buffer >> kernel socket buffer >> 协议栈

用sendfile() 來進行網路傳輸的過程:

硬盘 >> kernel buffer (快速拷贝到 kernelsocket buffer) >>协议栈

##tcp_nopush on;

#設定封包會累積一下再一起傳輸,可以提高一些傳輸效率。 tcp_nopush 必須和 sendfile 搭配使用。

tcp_nodelay on;

小的封包不等待直接傳輸。預設為on。看起來是和 tcp_nopush 相反的功能,但是兩邊都為 on 時 nginx 也可以平衡這兩個功能的使用。

keepalive_timeout

HTTP 連線的持續時間。設的太長會使無用的線程變的太多。這根據伺服器存取數量、處理速度以及網路狀況方面考慮。

send_timeout

設定Nginx 伺服器回應客戶端的逾時時間,這個逾時時間只針對兩個客戶端和伺服器建立連線後,某次活動之間的時間,如果這個時間後,客戶端沒有任何活動,Nginx 伺服器將關閉連線。

gzip on

啟用 gzip,對回應資料進行線上即時壓縮,減少資料傳輸量。

gzip_disable "msie6"

Nginx伺服器在回應這些種類的客戶端請求時,不使用Gzip 功能快取應用數據, gzip_disable “msie6”對IE6瀏覽器的資料不進行GZIP 壓縮。

常用的配置項大致這些,對於不同的業務場景,有的需要額外的其他配置項,這裡不做展開。

其他http 設定裡有location 這一項,它是用來根據請求中的uri 來為其匹配相應的處理規則。

location 尋找規則

location  = / {
  # 精确匹配 / ,主机名后面不能带任何字符串
  [ config A ]
}
location  / {
  # 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求
  # 但是正则和最长字符串会优先匹配
  [ config B ]
}
location /documents/ {
  # 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索
  # 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
  [ config C ]
}
location ~ /documents/Abc {
  # 匹配任何以 /documents/Abc 开头的地址,匹配符合以后,还要继续往下搜索
  # 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
  [ config CC ]
}
location ^~ /images/ {
  # 匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条
  [ config D ]
}
location ~* \.(gif|jpg|jpeg)$ {
  # 匹配所有以 gif,jpg或jpeg 结尾的请求
  # 然而,所有请求 /images/ 下的图片会被 config D 处理,因为 ^~ 到达不了这一条正则
  [ config E ]
}
location /images/ {
  # 字符匹配到 /images/,继续往下,会发现 ^~ 存在
  [ config F ]
}
location /images/abc {
  # 最长字符匹配到 /images/abc,继续往下,会发现 ^~ 存在
  # F与G的放置顺序是没有关系的
  [ config G ]
}
location ~ /images/abc/ {
  # 只有去掉 config D 才有效:先最长匹配 config G 开头的地址,继续往下搜索,匹配到这一条正则,采用
    [ config H ]
}

正規尋找優先順序由高到低依序如下:

" = 」開頭表示精確匹配,如A 中只匹配根目錄結尾的請求,後面不能帶任何字串。

“ ^~ ” 開頭表示uri以某個常規字串開頭,不是正規則符合。

“ ~ ” 開頭表示區分大小寫的正規匹配。

“ ~* ”開頭表示不區分大小寫的正規匹配。

“ / ” 通用匹配, 如果沒有其它匹配,任何請求都會匹配到。

負載平衡配置

Nginx 的负载均衡需要用到 upstream 模块,可通过以下配置来实现:

upstream test-upstream {
    ip_hash; # 使用 ip_hash 算法分配
    server 192.168.1.1; # 要分配的 ip
    server 192.168.1.2;
}
server {
    location / {       
        proxy_pass http://test-upstream;
    }
}

上面的例子定义了一个 test-upstream 的负载均衡配置,通过 proxy_pass 反向代理指令将请求转发给该模块进行分配处理。

以上是深入 Nginx 之配置篇的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:前端教程。如有侵權,請聯絡admin@php.cn刪除