⑴ nginx 配置詳解是什麼
Nginx配置文件詳解:
Nginx的主配置文件是nginx.conf,這個配置文件一共由三部分組成,分別為全局塊、events塊和http塊。在http塊中,又包含http全局塊、多個server塊。
每個server塊中,可以包含server全局塊和多個location塊。在同一配置塊中嵌套的配置塊,各個之間不存在次序關系。
配置文件支持大量可配置的指令,絕大多數指令不是特定屬於某一個塊的。同一個指令放在不同層級的塊中,其作用域也不同,一般情況下,高一級塊中的指令可以作用於自身所在的塊和此塊包含的所有低層級塊。
如果某個指令在兩個不同層級的塊中同時出現,則採用「就近原則」,即以較低層級塊中的配置為准。比如,某指令同時出現在http全局塊中和server塊中,並且配置不同,則應該以server塊中的配置為准。
全局塊:
全局塊是默認配置文件從開始到events塊之間的一部分內容,主要設置一些影響Nginx伺服器整體運行的配置指令,因此,這些指令的作用域是Nginx伺服器全局。
通常包括配置運行Nginx伺服器的用戶(組)、允許生成的worker process數、Nginx進程PID存放路徑、日誌的存放路徑和類型以及配置文件引入等。
⑵ Nginx 上在哪個文件修改配置文件
設置配置文件的路徑(默認是:conf/nginx.conf)
也可以nginx
-c
配置文件手動指定
⑶ nginx設置超時時間
可以設置upstream_response_time的時間來控制多個伺服器的切換時間
另外,max_fails=3 fail_timeout=30s,可以通過設置失敗次數和超時時間來控制失敗時間,默認是3*30=90秒
⑷ ngnix 配置文件 設定timeout時間
nginx常用的超時配置說明
client_header_timeout
語法 client_header_timeout time
默認值 60s
上下文 http server(指可以放在http塊和server塊)
說明 指定等待client發送一個請求頭的超時時間(例如:GET / HTTP/1.1).僅當在一次read中,沒有收到請求頭,才會算成超時。如果在超時時間內,client沒發送任何東西,nginx返回HTTP狀態碼408(「Request timed out」)
client_body_timeout
語法 client_body_timeout time
默認值 60s
上下文 http server location
說明 該指令設置請求體(request body)的讀超時時間。僅當在一次readstep中,沒有得到請求體,就會設為超時。超時後,nginx返回HTTP狀態碼408(「Request timed out」)
keepalive_timeout (長連接類型)
語法 keepalive_timeout timeout [ header_timeout ]
默認值 75s
上下文 http server location
說明 第一個參數指定了與client的keep-alive連接超時時間。伺服器將會在這個時間後關閉連接。可選的第二個參數指定了在響應頭Keep-Alive: timeout=time中的time值。這個頭能夠讓一些瀏覽器主動關閉連接,這樣伺服器就不必要去關閉連接了。沒有這個參數,nginx不會發送Keep-Alive響應頭(盡管並不是由這個頭來決定連接是否「keep-alive」)(伺服器在返回數據給用戶時,在頭header文件中會添加keepalive欄位,75s,瀏覽器在這個時間後能夠主動關閉連接)
兩個參數的值可並不相同
注意不同瀏覽器怎麼處理「keep-alive」頭
MSIE和Opera忽略掉"Keep-Alive: timeout=<N>" header.
MSIE保持連接大約60-65秒,然後發送TCP RST
Opera永久保持長連接
Mozilla keeps the connection alive for N plus about 1-10 seconds.
Konqueror保持長連接N秒
lingering_timeout
語法 lingering_timeout time
默認值 5s
上下文 http server location
說明 lingering_close生效後,在關閉連接前,會檢測是否有用戶發送的數據到達伺服器,如果超過lingering_timeout時間後還沒有數據可讀,就直接關閉連接;否則,必須在讀取完連接緩沖區上的數據並丟棄掉後才會關閉連接。
resolver_timeout
語法 resolver_timeout time
默認值 30s
上下文 http server location
說明 該指令設置DNS解析超時時間
proxy轉發模塊的超時設置:
proxy_connect_timeout
語法 proxy_connect_timeout time
默認值 60s
上下文 http server location
說明 該指令設置與upstream server的連接超時時間,有必要記住,這個超時不能超過75秒。
這個不是等待後端返回頁面的時間,那是由proxy_read_timeout聲明的。如果你的upstream伺服器起來了,但是hanging住了(例如,沒有足夠的線程處理請求,所以把你的請求放到請求池裡稍後處理),那麼這個聲明是沒有用的,因為與upstream伺服器的連接已經建立了。
This directive assigns a timeout for the connection to the proxyserver. This is not the time until the server returns the pages, this is the proxy_read_timeout statement. If your proxyserver is up, but hanging (e.g. it does not have enough threads to process your request so it puts you in the pool of connections to deal with later), then this statement will not help as the connection to the server has been made. It is necessary to keep in mind that this time out cannot be more than 75 seconds.
proxy_read_timeout
語法 proxy_read_timeout time
默認值 60s
上下文 http server location
說明 該指令設置與代理伺服器的讀超時時間。它決定了nginx會等待多長時間來獲得請求的響應。這個時間不是獲得整個response的時間,而是兩次reading操作的時間。(??什麼是兩次reading操作的時間)
This directive sets the read timeout for the response of the proxied server. It determines how long NGINX will wait to get the response to a request. The timeout is established not for entire response, but only between two operations of reading.
In contrast to proxy_connect_timeout, this timeout will catch a server that puts you in it's connection pool but does not respond to you with anything beyond that. Be careful though not to set this too low, as your proxy server might take a longer time to respond to requests on purpose (e.g. when serving you a report page that takes some time to compute). You are able though to have a different setting per location, which enables you to have a higher proxy_read_timeout for the report page's location.
If the proxied server nothing will communicate after this time, then nginx is shut connection.
proxy_send_timeout
語法 proxy_send_timeout time
默認值 60s
上下文 http server location
說明 這個指定設置了發送請求給upstream伺服器的超時時間。超時設置不是為了整個發送期間,而是在兩次write操作期間。如果超時後,upstream沒有收到新的數據,nginx會關閉連接
proxy_upstream_fail_timeout(fail_timeout)
語法 server address [fail_timeout=30s]
默認值 10s
上下文 upstream
說明 Upstream模塊下 server指令的參數,設置了某一個upstream後端失敗了指定次數(max_fails)後,該後端不可操作的時間,默認為10秒
負載均衡配置時的2個參數:fail_timeout和max_fails
這2個參數一起配合,來控制nginx怎樣認為upstream中的某個server是失效的當在fail_timeout的時間內,某個server連接失敗了max_fails次,則nginx會認為該server不工作了。同時,在接下來的 fail_timeout時間內,nginx不再將請求分發給失效的server。
個人認為,nginx不應該把這2個時間用同一個參數fail_timeout來控制,要是能再增加一個fail_time,來控制接下來的多長時間內,不再使用down掉的server就更好了~
如果不設置這2個參數,fail_timeout默認為10s,max_fails默認為1。就是說,只要某個server失效一次,則在接下來的10s內,就不會分發請求到該server上
send_timeout
默認:send_timeout 60;
send_timeout指定客戶端的響應超時時間。這個設置不會用於整個轉發器,而是在兩次客戶端讀取操作之間。如果在這段時間內,客戶端沒有讀取任何數據,nginx就會關閉連接。
Directive assigns response timeout to client. Timeout is established not on entire transfer of answer, but only between two operations of reading, if after this time client will take nothing, then nginx is shutting down the connection.
另一個參考:504 Gateway Time-out問題
常見於使用nginx作為web server的伺服器的網站
我遇到這個問題是在升級discuz論壇的時候遇到的
一般看來, 這種情況可能是由於nginx默認的fastcgi進程響應的緩沖區太小造成的, 這將導致fastcgi進程被掛起, 如果你的fastcgi服務對這個掛起處理的不好, 那麼最後就極有可能導致504 Gateway Time-out
現在的網站, 尤其某些論壇有大量的回復和很多內容的, 一個頁面甚至有幾百K
默認的fastcgi進程響應的緩沖區是8K, 我們可以設置大點
在nginx.conf里, 加入:
fastcgi_buffers 8 128k
這表示設置fastcgi緩沖區為8×128k
當然如果您在進行某一項即時的操作, 可能需要nginx的超時參數調大點, 例如設置成60秒:
send_timeout 60;
調整了這兩個參數, 結果就是沒有再顯示那個超時, 可以說效果不錯, 但是也可能是由於其他的原因, 目前關於nginx的資料不是很多, 很多事情都需要長期的經驗累計才有結果。
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 32 4k;
proxy_busy_buffers_size 64k;
⑸ nginx配置是要改哪個文件還是直接新建一個文件放到conf.d
nginx如果是默認安裝的話,安裝目錄在usr/local/nginx,配置文件:usr/local/nginx/conf/nginx.conf
沒有這個文件的話,需要復制當前目錄conf文件夾下的nginx.conf.default改名為nginx.conf
改完記得重啟nginx,在usr/local/nginx/sbin目錄下執行:./nginx
-s
reload
⑹ 真心求助.nginx錯誤
Nginx伺服器錯誤一般有以下幾點原因:
1、請求的header過大。nginx默認的header長度上限是4k,如果超過了這個值,nginx會直接返回400錯誤.
解決方法:配置nginx.conf相關設置。可以通過以下2個參數來調整header上限:
client_header_buffer_size 16k;large_client_header_buffers 4 16k。
2、上傳文件過程中出現錯誤。這時瀏覽器顯示「413 Request Entity Too Large」。這是因為沒有設置client_max_body_size,這個參數默認只是1M,也就是說發布的文章內容大小不能超過1M。
解決方法:增加如下兩行到nginx.conf的http{}段, 增大nginx上傳文件大小限制:設置允許發布內容為8M:client_max_body_size 8M;client_body_buffer_size 128k。
另外如果運行的是php,那麼還要檢查php.ini,這個大小client_max_body_size要和php.ini中的如下值的最大值一致或者稍大,這樣就不會因為提交數據大小不一致出現的錯誤:post_max_size = 8M;upload_max_filesize = 6M。
修改完配置後,別忘記重新載入。
3、客戶端在為等到伺服器相應返回前就關閉了客戶端描述符。一般出現在客戶端設置超時後,伺服器主動關閉。
解決方法:根據實際Nginx後端伺服器的處理時間修改客戶端超時時間。
4、腳本錯誤(php語法錯誤、lua語法錯誤)。
解決方法:查看nginx_err_log php_err_log。
5、訪問量過大,系統資源限制,不能打開過多文件。 磁碟空間不足。(access log開啟可能導致磁碟滿溢,伺服器主動關閉)。
解決方法:修改/etc/sysctl.conf文件,並使用下面的命令確認: #sysctl -p。要使 limits.conf 文件配置生效,必須要確保 pam_limits.so 文件被加入到啟動文件中。
6、後端服務無法處理,業務中斷。
解決方法:從後端日誌獲取錯誤原因,解決後端伺服器問題。
7、後端伺服器在超時時間內,未響應Nginx代理請求。
解決方法:根據後端伺服器實際處理情況,調正後端請求超時時間。
8、網站頁面緩存過大。
解決方法:配置nginx.conf相關設置:fastcgi_buffers 8 128k;send_timeout 60。
⑺ nginx conf.d目錄下的文件怎麼配置
(1)定義環境變數
語法:env VAR|VAR=VALUE
這個配置項可以讓用戶直接設置操作系統上的環境變數。例如:
1. env TESTPATH=/tmp/;
(2)嵌入其他配置文件
語法:include /path/file;
include配置項可以將其他配置文件嵌入到當前的nginx.conf文件中,它的參數既可以是絕對路徑,也可以是相對路徑(相對於Nginx的配置目錄,即nginx.conf所在的目錄),例如:
1. include mime.types;
2. include vhost/*.conf;
可以看到,參數的值可以是一個明確的文件名,也可以是含有通配符*的文件名,同時可以一次嵌入多個配置文件。
(3)pid文件的路徑
語法:pid path/file;
默認:pid logs/nginx.pid;
保存master進程ID的pid文件存放路徑。默認與configure執行時的參數「--pid-path」所指定的路徑是相同的,也可以隨時修改,但應確保Nginx有權在相應的目標中創建pid文件,該文件直接影響Nginx是否可以運行。
(4)Nginx worker進程運行的用戶及用戶組
語法:user username [groupname];
默認:user nobody nobody;
user用於設置master進程啟動後,fork出的worker進程運行在哪個用戶和用戶組下。當按照「user username;」設置時,用戶組名與用戶名相同。
若用戶在configure命令執行時使用了參數--user=username和--group=groupname,此時nginx.conf將使用參數中指定的用戶和用戶組。
(5)指定Nginx worker進程可以打開的最大句柄描述符個數
語法:worker_rlimit_nofile limit;
設置一個worker進程可以打開的最大文件句柄數。
(6)限制信號隊列
語法:worker_rlimit_sigpending limit;
設置每個用戶發往Nginx的信號隊列的大小。也就是說,當某個用戶的信號隊列滿了,這個用戶再發送的信號量會被丟掉。
⑻ nginx配置怎麼指定conf.d文件夾下位置文件
代碼如下:
#運行用戶
user www-data;
#啟動進程,通常設置成和cpu的數量相等
worker_processes 1;
#全局錯誤日誌及PID文件
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
#工作模式及連接數上限
events {
use epoll; #epoll是多路復用IO(I/O Multiplexing)中的一種方式,但是僅用於linux2.6以上內核,可以大大提高nginx的性能
worker_connections 1024;#單個後台worker process進程的最大並發鏈接數
# multi_accept on;
}
#設定http伺服器,利用它的反向代理功能提供負載均衡支持
http {
#設定mime類型,類型由mime.type文件定義
include /etc/nginx/mime.types;
default_type application/octet-stream;
#設定日誌格式
access_log /var/log/nginx/access.log;
#sendfile 指令指定 nginx 是否調用 sendfile 函數(zero 方式)來輸出文件,對於普通應用,
#必須設為 on,如果用來進行下載等應用磁碟IO重負載應用,可設置為 off,以平衡磁碟與網路I/O處理速度,降低系統的uptime.
sendfile on;
#tcp_nopush on;
#連接超時時間
#keepalive_timeout 0;
keepalive_timeout 65;
tcp_nodelay on;
#開啟gzip壓縮
gzip on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
#設定請求緩沖
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
#設定負載均衡的伺服器列表
upstream mysvr {
#weigth參數表示權值,權值越高被分配到的幾率越大
#本機上的Squid開啟3128埠
server 192.168.8.1:3128 weight=5;
server 192.168.8.2:80 weight=1;
server 192.168.8.3:80 weight=6;
}
server {
#偵聽80埠
listen 80;
#定義使用www.xx.com訪問
server_name www.xx.com;
#設定本虛擬主機的訪問日誌
access_log logs/www.xx.com.access.log main;
#默認請求
location / {
root /root; #定義伺服器的默認網站根目錄位置
index index.php index.html index.htm; #定義首頁索引文件的名稱
fastcgi_pass www.xx.com;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
# 定義錯誤提示頁面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /root;
}
#靜態文件,nginx自己處理
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
root /var/www/virtual/htdocs;
#過期30天,靜態文件不怎麼更新,過期可以設大一點,如果頻繁更新,則可以設置得小一點。
expires 30d;
}
#PHP 腳本請求全部轉發到 FastCGI處理. 使用FastCGI默認配置.
location ~ \.php {
root /root;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/www/www$fastcgi_script_name;
include fastcgi_params;
}
#設定查看Nginx狀態的地址
location /NginxStatus {
stub_status on;
access_log on;
auth_basic "NginxStatus";
auth_basic_user_file conf/htpasswd;
}
#禁止訪問 .htxxx 文件
location ~ /\.ht {
deny all;
}
}
}
以上是一些基本的配置,使用Nginx最大的好處就是負載均衡
如果要使用負載均衡的話,可以修改配置http節點如下:
#設定http伺服器,利用它的反向代理功能提供負載均衡支持
http {
#設定mime類型,類型由mime.type文件定義
include /etc/nginx/mime.types;
default_type application/octet-stream;
#設定日誌格式
access_log /var/log/nginx/access.log;
#省略上文有的一些配置節點
#。。。。。。。。。。
#設定負載均衡的伺服器列表
upstream mysvr {
#weigth參數表示權值,權值越高被分配到的幾率越大
server 192.168.8.1x:3128 weight=5;#本機上的Squid開啟3128埠
server 192.168.8.2x:80 weight=1;
server 192.168.8.3x:80 weight=6;
}
upstream mysvr2 {
#weigth參數表示權值,權值越高被分配到的幾率越大
server 192.168.8.x:80 weight=1;
server 192.168.8.x:80 weight=6;
}
#第一個虛擬伺服器
server {
#偵聽192.168.8.x的80埠
listen 80;
server_name 192.168.8.x;
#對aspx後綴的進行負載均衡請求
location ~ .*\.aspx$ {
root /root; #定義伺服器的默認網站根目錄位置
index index.php index.html index.htm; #定義首頁索引文件的名稱
proxy_pass http://mysvr ;#請求轉向mysvr 定義的伺服器列表
#以下是一些反向代理的配置可刪除.
proxy_redirect off;
#後端的Web伺服器可以通過X-Forwarded-For獲取用戶真實IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
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伺服器傳
}
}
}
⑼ tomcat中 nginx 配置文件在哪
tomcat不包含nginx
tomcat是一個web伺服器
nginx也是 一個web伺服器
二者可以同時安裝,也可以只安裝一個,所以二者無聯系
tomcat中沒有nginx的配置文件
⑽ win7下 nginx cgi 配置文件在哪
在win7下用的是IIS做web伺服器,但近來因項目需求的原因,需要在伺服器遇到404錯誤的時候自動做轉向(不是在客戶端的跳轉,而是在伺服器收到客戶端請求去某目錄下讀取文件返回時,如果發現目錄或目錄下文件不存在,自動轉到另一個伺服器去取),用IIS發現很難做到這點,於是決定搭建nginx的開發環境,通過配置實現這一點。 首先,google nginx和php,分別到他們的官網把最新版本的下載回來,我當時下的PHP是5.4.3的版本,nginx是1.5.2,我把他們都放在D盤下一個叫webserver的文件夾里,然後開始做配置了。 nginx的啟動很簡單,進入它的目錄,然後雙擊nginx.exe,如果沒有埠沖突等問題的話,直接在瀏覽器輸入localhost就可以訪問welcome to nginx字樣的網頁了,這是默認的歡迎頁面,放在自帶的默認網頁文件目錄html下的。難道就這么簡單嗎?當然不是的。 這時如果你在html目錄下建一個php文件,寫上一句測試php環境的最經典的,然後在瀏覽器輸入這個php文件的路徑進行訪問,你會發現nginx根本不懂怎樣去解析php代碼,這是因為nginx與PHP還沒有配合起來。按道理來說,當遇到php文件的時候,nginx應該把它交給php的fast-cgi來處理,然後把處理完的結果返回給客戶端(瀏覽器)的。 怎樣告訴nginx當遇到php文件時交給誰處理呢?打開nginx1.5.2的文件夾,找到conf目錄,編輯目錄下的nginx.conf文件,我的編輯結果如下所示,具體配置過程中需要注意什麼請看注釋: server { listen 80; server_name localhost; charset utf-8; location / { root E:/work/jentian/client;//html文件目錄,由於我們項目的客戶端代碼與服務端服務是嚴格分開的,所以這里的root跟php的root不同 index index.html index.htm; } location ~ .php { root E:/work/jentian/server; //php文件目錄 fastcgi_param SCRIPT_FILENAME E:/work/jentian/server$fastcgi_script_name;//注意,$fastcgi_script_name前面的路徑必須與root是一致的 fastcgi_index index.php; fastcgi_pass 127.0.0.1:9000; include fastcgi_params; } } nginx的配置也就這么多了,很簡單吧,但這時候當你刷新php頁面的時候,會發現nginx現在還是沒有辦法解析php文件,原因在於php的fast-cgi還沒有啟動,如果打開一個普通的命令提示符窗口,然後輸入命令啟動fast-cgi時,啟動後這個窗口是不能關閉的,否則fast-cgi的進程也會終止,不能繼續解析php文件了,後來查了一下,原來windows是有一個運行隱形控制台的方法的,用這個方法啟動fast-cgi,就不怕關閉控制台後fast-cgi也跟著結束的問題的。最後,寫了一個批處理文件來啟動fast-cgi和nginx,這能就能一鍵啟動nginx+php的環境了。下面是這個批處理文件的內容: @echo off set PHP_FCGI_MAX_REQUESTS = 1000 echo Starting PHP FastCGI... rem 下面這里的分別替換成你的php-cgi.exe和php.ini的路徑 ,後面的-b,-c等參數必須保留且注意前後空格 RunHiddenConsole D:/webServer/php-5.4.3/php-cgi.exe -b 127.0.0.1:9000 -c D:/webServer/php-5.4.3/php.ini //這里 echo Starting nginx... rem 注意替換成你的nginx目錄 D:/webServer/nginx-1.5.2/nginx.exe -p D:/webServer/nginx-1.5.2/ cd D:/webServer/nginx-1.5.2/ pause 把這個批處理文件保存到好,雙擊,就能啟動你的nginx+php環境了,這時再刷新一下你的phpinfo頁面,一切正常了。