1. 程式人生 > >HTTP伺服器Nginx.conf配置檔案介紹與除錯

HTTP伺服器Nginx.conf配置檔案介紹與除錯

Nginx配置檔案主要分成四部分:main(全域性設定)、server(主機設定)、upstream(負載均衡伺服器設定)和 location(URL匹配特定位置的設定)


 Nginx安裝完畢後,會產生相應的安裝目錄,根據前面的安裝路徑,Nginx的配置檔案路徑為/opt/nginx/conf,其中nginx.conf為Nginx的主配置檔案。這裡重點介紹下nginx.conf這個配置檔案。
         Nginx配置檔案主要分成四部分:main(全域性設定)、server(主機設定)、upstream(負載均衡伺服器設定)和 location(URL匹配特定位置的設定)。main部分設定的指令將影響其他所有設定;server部分的指令主要用於指定主機和端 口;upstream指令主要用於負載均衡,設定一系列的後端伺服器;location部分用於匹配網頁位置。這四者之間的關係式:server繼承 main,location繼承server,upstream既不會繼承其他設定也不會被繼承。
         在這四個部分當中,每個部分都包含若干指令,這些指令主要包含Nginx的主模組指令、事件模組指令、HTTP核心模組指令,同時每個部分還可以使用其他 HTTP模組指令,例如Http SSL模組、HttpGzip Static模組和Http Addition模組等。
下面通過一個Nginx配置例項,詳細介紹下nginx.conf每個指令的含義。為了能更清楚地瞭解Nginx的結構和每個配置選項的含義,這裡按照功能點將Nginx配置檔案分為7個部分逐次講解,下面就圍繞這7個部分進行介紹。

1.Nginx的全域性配置
下面這段內容是對Nginx的全域性屬性配置,程式碼如下:
 user  nobody nobody;
 worker_processes  4;
 error_log  logs/error.log  notice;
 pid        logs/nginx.pid;
 worker_rlimit_nofile 65535; 
 events{
  use epoll;
  worker_connections      65536;
       }
對上面這段程式碼中每個配置選項的含義解釋如下:
user是個主模組指令,指定Nginx Worker程序執行使用者以及使用者組,預設由nobody賬號執行。
worker_processes是個主模組指令,指定了Nginx要開啟的程序數。每個Nginx程序平均耗費10M~12M記憶體。根據經驗,一般指定一個程序足夠了,如果是多核CPU,建議指定和CPU的數量一樣的程序數即可。
error_log是個主模組指令,用來定義全域性錯誤日誌檔案。日誌輸出級別有debug、info、notice、warn、error、crit可供選擇,其中,debug輸出日誌最為最詳細,而crit輸出日誌最少。 
pid是個主模組指令,用來指定程序id的儲存檔案位置。
worker_rlimit_nofile用於指定一個nginx程序可以開啟的最多檔案描述符數目,這裡是65535,需要使用命令“ulimit -n 65535”來設定。
events指令是設定Nginx的工作模式及連線數上限。
events{
use epoll;
worker_connections      65536;
}
use是個事件模組指令,用來指定Nginx的工作模式。Nginx支援的工作模式有select、poll、kqueue、epoll、rtsig和 /dev/poll。其中select和poll都是標準的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在Linux平臺 上,而kqueue用在BSD系統中。對於Linux系統,epoll工作模式是首選。
worker_connections也是個事件模組指令,用於定義Nginx每個程序的最大連線數,預設是1024.最大客戶端連線數由 worker_processes和worker_connections決定,即 Max_client=worker_processes*worker_connections,在作為反向代理時,max_clients變 為:max_clients = worker_processes * worker_connections/4。
程序的最大連線數受Linux系統程序的最大開啟檔案數限制,在執行作業系統命令“ulimit -n 65536”後worker_connections的設定才能生效。

2.HTTP伺服器配置
接下來開始進行HTTP伺服器設定。
下面這段內容是Nginx對HTTP伺服器相關屬性的配置,程式碼如下:
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" '
 '"$gzip_ratio"';
 log_format download '$remote_addr - $remote_user [$time_local] '
 '"$request" $status $bytes_sent '
 '"$http_referer" "$http_user_agent" '
 '"$http_range" "$sent_http_content_range"';
client_max_body_size  20m; 
client_header_buffer_size    32K;
large_client_header_buffers  4 32k;
Sendfile  on;
tcp_nopush     on;
tcp_nodelay    on;
keepalive_timeout 60;
client_header_timeout  10;
client_body_timeout    10;
send_timeout          10;

下面詳細介紹下這段程式碼中每個配置選項的含義。
include是個主模組指令,實現對配置檔案所包含的檔案的設定,可以減少主配置檔案的複雜度。類似於Apache中的include方法。
default_type屬於HTTP核心模組指令,這裡設定預設型別為二進位制流,也就是當檔案型別未定義時使用這種方式,例如在沒有配置PHP環境時,Nginx是不予解析的,此時,用瀏覽器訪問PHP檔案就會出現下載視窗。
下面的程式碼實現對日誌格式的設定。
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$gzip_ratio"';
log_format download '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$http_range" "$sent_http_content_range"';
log_format是Nginx的HttpLog模組指令,用於指定Nginx日誌的輸出格式。main為此日誌輸出格式的名稱,可以在下面的access_log指令中引用。
client_max_body_size用來設定允許客戶端請求的最大的單個檔案位元組數。
client_header_buffer_size用於指定來自客戶端請求頭的headerbuffer大小。對於大多數請求,1K的緩衝區大小已經足夠,如果自定義了訊息頭或有更大的Cookie,可以增加緩衝區大小。這裡設定為32K。
large_client_header_buffers用來指定客戶端請求中較大的訊息頭的快取最大數量和大小, “4”為個數,“128K”為大小,最大快取量為4個128K。
sendfile引數用於開啟高效檔案傳輸模式。將tcp_nopush和tcp_nodelay兩個指令設定為on用於防止網路阻塞。
keepalive_timeout設定客戶端連線保持活動的超時時間。在超過這個時間之後,伺服器會關閉該連線。
client_header_timeout設定客戶端請求頭讀取超時時間。如果超過這個時間,客戶端還沒有傳送任何資料,Nginx將返回“Request time out(408)”錯誤。
client_body_timeout設定客戶端請求主體讀取超時時間。如果超過這個時間,客戶端還沒有傳送任何資料,Nginx將返回“Request time out(408)”錯誤,預設值是60。
send_timeout指定響應客戶端的超時時間。這個超時僅限於兩個連線活動之間的時間,如果超過這個時間,客戶端沒有任何活動,Nginx將會關閉連線。

3.HttpGzip模組配置
下面配置Nginx的HttpGzip模組。這個模組支援線上實時壓縮輸出資料流。要檢視是否安裝了此模組,需要使用下面的命令:
[[email protected] conf]# /opt/nginx/sbin/nginx  -V
nginx version: nginx/0.7.65
configure arguments: --with-http_stub_status_module --with-http_gzip_static_module --prefix=/opt/nginx
通過/opt/nginx/sbin/nginx  -V命令可以檢視安裝Nginx時的編譯選項,由輸出可知,我們已經安裝了HttpGzip模組。
下面是HttpGzip模組在Nginx配置中的相關屬性設定:
gzip  on;
gzip_min_length  1k;
gzip_buffers     4  16k;
gzip_http_version  1.1;
gzip_comp_level  2;
gzip_types  text/plain application/x-javascript text/css application/xml;
gzip_vary  on;
gzip用於設定開啟或者關閉gzip模組,“gzip on”表示開啟GZIP壓縮,實時壓縮輸出資料流。
gzip_min_length設定允許壓縮的頁面最小位元組數,頁面位元組數從header頭的Content-Length中獲取。預設值是0,不管頁面多大都進行壓縮。建議設定成大於1K的位元組數,小於1K可能會越壓越大。
gzip_buffers表示申請4個單位為16K的記憶體作為壓縮結果流快取,預設值是申請與原始資料大小相同的記憶體空間來儲存gzip壓縮結果。
gzip_http_version用於設定識別HTTP協議版本,預設是1.1,目前大部分瀏覽器已經支援GZIP解壓,使用預設即可。
gzip_comp_level用來指定GZIP壓縮比,1 壓縮比最小,處理速度最快;9 壓縮比最大,傳輸速度快,但處理最慢,也比較消耗cpu資源。
gzip_types用來指定壓縮的型別,無論是否指定,“text/html”型別總是會被壓縮的。
gzip_vary選項可以讓前端的快取伺服器快取經過GZIP壓縮的頁面,例如用Squid快取經過Nginx壓縮的資料。

4.負載均衡配置
下面設定負載均衡的伺服器列表。
upstream ixdba.net{
ip_hash;
server 192.168.12.133:80;
server 192.168.12.134:80  down;
server 192.168.12.135:8009  max_fails=3  fail_timeout=20s;
server 192.168.12.136:8080;
}
upstream是Nginx的HTTP Upstream模組,這個模組通過一個簡單的排程演算法來實現客戶端IP到後端伺服器的負載均衡。在上面的設定中,通過upstream指令指定了一個負 載均衡器的名稱ixdba.net。這個名稱可以任意指定,在後面需要的地方直接呼叫即可。
Nginx的負載均衡模組目前支援4種排程演算法,下面進行分別介紹,其中後兩項屬於第三方的排程方法。
 輪詢(預設)。每個請求按時間順序逐一分配到不同的後端伺服器,如果後端某臺伺服器宕機,故障系統被自動剔除,使使用者訪問不受影響。
 Weight。指定輪詢權值,Weight值越大,分配到的訪問機率越高,主要用於後端每個伺服器效能不均的情況下。
 ip_hash。每個請求按訪問IP的hash結果分配,這樣來自同一個IP的訪客固定訪問一個後端伺服器,有效解決了動態網頁存在的session共享問題。
 fair。比上面兩個更加智慧的負載均衡演算法。此種演算法可以依據頁面大小和載入時間長短智慧地進行負載均衡,也就是根據後端伺服器的響應時間來分配請 求,響應時間短的優先分配。Nginx本身是不支援fair的,如果需要使用這種排程演算法,必須下載Nginx的upstream_fair模組。
 url_hash。按訪問url的hash結果來分配請求,使每個url定向到同一個後端伺服器,可以進一步提高後端快取伺服器的效率。Nginx本身是不支援url_hash的,如果需要使用這種排程演算法,必須安裝Nginx 的hash軟體包。
在HTTP Upstream模組中,可以通過server指令指定後端伺服器的IP地址和埠,同時還可以設定每個後端伺服器在負載均衡排程中的狀態。常用的狀態有:
 down,表示當前的server暫時不參與負載均衡。
 backup,預留的備份機器。當其他所有的非backup機器出現故障或者忙的時候,才會請求backup機器,因此這臺機器的壓力最輕。
 max_fails,允許請求失敗的次數,預設為1。當超過最大次數時,返回proxy_next_upstream 模組定義的錯誤。
 fail_timeout,在經歷了max_fails次失敗後,暫停服務的時間。max_fails可以和fail_timeout一起使用。
注意 當負載排程演算法為ip_hash時,後端伺服器在負載均衡排程中的狀態不能是weight和backup。

5.server虛擬主機配置
下面介紹對虛擬主機的配置。建議將對虛擬主機進行配置的內容寫進另外一個檔案,然後通過include指令包含進來,這樣更便於維護和管理。
server{
listen          80;
server_name    192.168.12.188  www.ixdba.net;
index index.html index.htm index.jsp;
root  /web/wwwroot/www.ixdba.net
charset gb2312;
server標誌定義虛擬主機開始,listen用於指定虛擬主機的服務埠,server_name用來指定IP地址或者域名,多個域名之間用空格分 開。Index用於設定訪問的預設首頁地址,root指令用於指定虛擬主機的網頁根目錄,這個目錄可以是相對路徑,也可以是絕對路徑。Charset用於 設定網頁的預設編碼格式。
access_log  logs/www.ixdba.net.access.log  main;
access_log用來指定此虛擬主機的訪問日誌存放路徑,最後的main用於指定訪問日誌的輸出格式。

6.URL匹配配置
 URL地址匹配是進行Nginx配置中最靈活的部分。 location支援正則表示式匹配,也支援條件判斷匹配,使用者可以通過location指令實現Nginx對動、靜態網頁進行過濾處理。
以下這段設定是通過location指令來對網頁URL進行分析處理,所有副檔名以.gif、.jpg、.jpeg、.png、.bmp、.swf結尾的靜態檔案都交給nginx處理,而expires用來指定靜態檔案的過期時間,這裡是30天。
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$  {
                root    /web/wwwroot/www.ixdba.net;
               expires 30d;
        }

以下這段設定是將upload和html下的所有檔案都交給nginx來處理,當然,upload和html目錄包含在/web/wwwroot/www.ixdba.net目錄中。
        location ~ ^/(upload|html)/  {
                root    /web/wwwroot/www.ixdba.net;
                expires 30d;
        }

在最後這段設定中,location是對此虛擬主機下動態網頁的過濾處理,也就是將所有以.jsp為字尾的檔案都交給本機的8080埠處理。
location ~ .*.jsp$ { 
    index index.jsp;       
    proxy_pass http://localhost:8080;
}


7.StubStatus模組配置
StubStatus模組能夠獲取Nginx自上次啟動以來的工作狀態,此模組非核心模組,需要在Nginx編譯安裝時手工指定才能使用此功能。
以下指令實指定啟用獲取Nginx工作狀態的功能。
        location /NginxStatus {
                        stub_status      on;
access_log              logs/NginxStatus.log;
                        auth_basic              "NginxStatus";
      auth_basic_user_file    ../htpasswd;
        }
 

stub_status設定為“on”表示啟用StubStatus的工作狀態統計功能。access_log 用來指定StubStatus模組的訪問日誌檔案。auth_basic是Nginx的一種認證機制。auth_basic_user_file用來指定 認證的密碼檔案,由於Nginx的auth_basic認證採用的是與Apache相容的密碼檔案,因此需要用Apache的htpasswd命令來生成 密碼檔案,例如要新增一個webadmin使用者,可以使用下面方式生成密碼檔案:
/usr/local/apache/bin/htpasswd -c  /opt/nginx/conf/htpasswd webadmin
會得到以下提示資訊:
New password:
輸入密碼之後,系統會要求再次輸入密碼。確認之後新增使用者成功。
 

要檢視Nginx的執行狀態,可以輸入http://ip/ NginxStatus,然後輸入剛剛建立的使用者名稱和密碼就可以看到如下資訊:
Active connections: 1 
server accepts handled requests
 393411 393411 393799
Reading: 0 Writing: 1 Waiting: 0 
 

Active connections表示當前活躍的連線數,第三行的三個數字表示 Nginx當前總共處理了393411個連線, 成功建立393411次握手, 總共處理了393799個請求。最後一行的Reading表示Nginx讀取到客戶端Header資訊數, Writing表示Nginx返回給客戶端的Header資訊數,“Waiting”表示Nginx已經處理完,正在等候下一次請求指令時的駐留連線數。
 

在最後這段設定中,設定了虛擬主機的錯誤資訊返回頁面,通過error_page指令可以定製各種錯誤資訊的返回頁面。在預設情況下,Nginx會 在主目錄的html目錄中查詢指定的返回頁面,特別需要注意的是,這些錯誤資訊的返回頁面大小一定要超過512K,否者會被ie瀏覽器替換為ie預設的錯 誤頁面。
        error_page  404              /404.html;
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}
}

此出處http://ixdba.blog.51cto.com/2895551/790611


相關推薦

HTTP伺服器Nginx.conf配置檔案介紹除錯

Nginx配置檔案主要分成四部分:main(全域性設定)、server(主機設定)、upstream(負載均衡伺服器設定)和 location(URL匹配特定位置的設定)  Nginx安裝完畢後,會產生相應的安裝目錄,根據前面的安裝路徑,Nginx的配置檔案路徑為/opt

nginx.conf配置檔案解析(http、server、location)

nginx.conf檔案在安裝目錄/conf目錄下 1、定義Nginx執行的使用者和使用者組 user nginx nginx; 2、nginx程序數,建議設定為等於CPU總核心數 worker_processes 1; 3、全域性錯誤日誌

redis.conf 配置檔案介紹

1: Redis預設不是以守護程序的方式執行,可以通過該配置項修改,使用yes啟用守護程序 daemonize no 2: 當Redis以守護程序方式執行時,Redis預設會把pid寫入/var/run/redis.pid檔案,可以通過pidfile指定 pidfile /var/run/redis.pid

關於nginx配置負載均衡,nginx.conf配置檔案正確,一直跳出nginx歡迎介面

小編跟大家一樣,明明配置檔案正確,但就是一直跳出nginx歡迎介面 這個是我nginx的安裝目錄,我在這個目錄下吧nginx.conf修改配置,發現沒用。     於是我看了nginx啟動命令 /usr/local/nginx/sbin/nginx 。我

Nginx.conf配置檔案

清空之前配置檔案; # > /usr/local/nginx/conf/nginx.conf # vim /usr/local/nginx/conf/nginx.conf user nobody nobody; worker_processes 2; error_

Nginx.conf配置檔案詳解

執行使用者 user nobody; 啟動程序,通常設定成和cpu的數量相等 worker_processes 1; 全域性錯誤日誌及PID檔案 error_log logs/error.log; error_log logs/error.log not

nginx.conf 配置檔案詳解

######Nginx配置檔案nginx.conf中文詳解##### #定義Nginx執行的使用者和使用者組 user www www; #nginx程序數,建議設定為等於CPU總核心數。 worker_processes 8; #全域性錯誤日誌定義型別

01 Nginx安裝 nginx下部署專案,nginx conf配置檔案修改,相關檔案配置

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!                2 下載pcre,這個是一個正則表示式的庫,Nginx做rewriter的時候回用到這個庫:選中右擊複製所需要的版本:4.將下面安裝檔案上傳到Linux伺服

Redis學習——redis.conf 配置檔案介紹

學以致用 學在用前 在Redis的使用過程,除了知道對Redis五種資料型別的操作方法之外,最主要額就是對redis.conf進行配置了,下面整理出redis.conf中常見的一些配置介紹。 引數說明 redis.conf 配置項說明

docker安裝_進入容器修改nginx.conf配置檔案_宿主主機掛載(nginx舉例)

前言 1、docker安裝Nginx 1.1、觀察nginx是否可下載 healerjean$ docker search nginx 1.2、開始安裝 healerjean$ docker pull nginx 2

Nginxnginx.conf配置檔案中文註釋說明

#執行使用者 user www-data; #啟動程序,通常設定成和cpu的數量相等 worker_processes 1; #全域性錯誤日誌及PID檔案 error_log /var/log/nginx/e

nginx.conf配置檔案中timeout超時時間設定

nginx常用的超時配置說明client_header_timeout語法 client_header_timeout time預設值 60s上下文 http server(指可以放在http塊和server塊)說明 指定等待client傳送一個請求頭的超時時間(例如:GET

http伺服器 Nginx配置檔案詳細說明

本文共轉載了兩篇文章,分別來自 再寫了點自己簡單應用時的一點心得 ##########################     第一篇     ########################### 在此記錄下Nginx伺服器nginx.conf的配置檔案說明,

nginx.conf配置文件解析(http、server、location proxy_pass)

static 如果 優先 max 關閉 logs ima use 顯示不正常 nginx.conf配置文件解析(http、server、location) 標簽: nginxnginx-conf 2017-04-26 20:10 1031人閱讀 評論(0)

vue-cli webpack打包釋出到nginx伺服器nginx.conf配置

server { listen 80; root /var/www/web/; index index.php index.html index.htm; server_name www.web.com;

Nginx配置檔案nginx.conf超詳細中文詳解

第1章 簡介 第2章 nginx配置解釋圖解 第3章 Nginx核心配置檔案nginx.conf史上最細中文詳解 3.1 定義Nginx執行的使用者和使用者組 3.2 nginxworker程序數,即處理請求的程序(熟稱負責接客的服務員) 3.3 c

nginx動態分離conf配置檔案

動靜分離,即nginx處理靜態資源(jss、ccc、圖片等),其餘的交tomcat處理 (如下配置檔案) user www www; worker_processes auto; error_log /data/wwwlogs/error_nginx.log crit;

Linux中Nginx配置檔案nginx.conf詳解

原文地址:https://blog.csdn.net/GP_666/article/details/79971198user www www; #制定nginx 執行的使用者名稱和使用者組 worker_processes 4; #nginx 程序數   建議設定

博科SAN交換機學習筆記之二:配置檔案備份韌體升級 作者 LiaoJL | 轉載時請務必以超連結形式標明文章原文連結和作者資訊及本版權宣告。 原文連結:http://www.liaojl.co

配置檔案恢復 當需要備份中恢復交換機配置時,可以通過configdownload命令將博科交換機的配置從遠端伺服器恢復到交換機。博科交換機支援將舊版本的配置檔案匯入新版本韌體的交換機,例如將v6.2.0的配置檔案匯入v6.3.0韌體版本的交換機,或者將v6.4.1 配置檔案匯入 v7.0.0 版本的交換機。

nginx伺服器安裝及配置檔案詳解(轉載)

nginx在工作中已經有好幾個環境在使用了,每次都是重新去網上扒部落格,各種編譯配置,今天自己也整理一份安裝文件和nginx.conf配置選項的說明,留作以後參考。像負載均衡配置(包括健康檢查)、快取(包括清空快取)配置例項,請參考http://segmentfault.