這篇文章帶給大家的內容是關於Nginx的配置詳解(附程式碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
常用設定項
在工作中,我們與 Nginx 打交道更多的是透過其設定檔來進行。那麼掌握這些配置項各自的作用就很有必要了。
首先,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 { 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; } } }
設定項解析
設定毎個行程的最大檔案開啟數。如果不設的話上限就是系統的 ulimit –n的數字,一般為65535。
設定一個行程理論允許的最大連結數,理論上越大越好,但不可以超過 worker_rlimit_nofile 的值。
設定事件驅動模型使用 epoll。 epoll 是 Nginx 支援的高效能事件驅動程式庫之一。是公認的非 常優良的事件驅動模式。
關閉網路連線序列化,當其設定為開啟的時候,將會對多個Nginx 進程接受連線進行序列化,防止多個進程對連線的爭搶。當伺服器連線數不多時,開啟這個參數會讓負載有一定程度的降低。但是當伺服器的吞吐量很大時,為了效率,請關閉這個參數;並且關閉這個參數的時候也可以讓請求在多個 worker 間的分配更均衡。所以我們設定accept_mutex off;
設定一個行程可同時接受多個網路連線
Sendfile是Linux2.0 以後的推出的一個系統調用,它能簡化網路傳輸過程中的步驟,提高伺服器效能。
不使用sendfile的傳統網路傳輸過程:
硬碟>> kernel buffer >> user buffer >> kernel socket buffer >> 協定堆疊
用sendfile()來進行網路傳輸的過程:
硬碟>> kernel buffer (快速拷貝到kernelsocket buffer) >>協定堆疊
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中文網其他相關文章!