首頁 >後端開發 >php教程 >Nginx 設定檔詳解

Nginx 設定檔詳解

WBOY
WBOY原創
2016-08-08 09:31:29740瀏覽

Nginx 設定檔詳情


#

用戶


#工作進程,根據硬體調整,大於等於

cpu

核數

error_log logs/nginx_error.log crit;


#錯誤日誌

pid logs/nginx.pid;

#pid


放置的位置

worker_rlimit_nofile 204800;

#

指定進程可以打開的最大描述符


應該是最多開啟文

件數(

ulimit -n nginx分配請求並不是那麼均勻,所以最好與ulimit -n 

的值保持一致。

現在在linux 2.6

worker_rlimit_nofile

就對應應該填入 65535這是因為nginx ,總並發量達到

3-4

萬時就有進程可能超過10240 錯誤。

{ use epoll; I/O 模型


補充說明

:

相類,

nginx針對不同的操作系統,有不同的事件模式


A

Select

poll

屬於標準事件模型,如果目前系統不存在更有效的方法,nginx會或nginx或c

B

)高效事件模型使用於FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 

和 MacOS X.

使用雙處理器的MacOS X系統使用kqueue可能會造成內核崩潰。

Epoll:使用於Linux

/dev/poll

:使用於 7 11/99+, HP/UX 11.22+ (eventport), IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+Tru64 UNIX 5.1A+Tru64 UNIX 5.1A+Tru64 UNIX 5.1A+

EventportEventport 10. 

為了防止出現內核崩潰的問題, 有必要安裝安全補丁



worker_connections 204800;

# cpu跑到100%就行

伺服器的最大連接數為worker_processes*worker_connections


live_timeout 60;


keepalive

超時時間。

_


客戶端請求頭部的緩衝區大小,這個可以根據你的系統分頁大小來設置,一般一個請求頭的大小不會超過

1k

,但由於一般系統分頁都要大於
1k

,但由於一般系統分頁都要大於1k

這裡設定為分頁大小。 分頁大小可用指令getconf PAGESIZE 

getconf PAGESIZE 取得。

[root@web001 ~]# getconf PAGESIZE

4096

但也有

client_header_buffer_size超過4k

_含

該值必須設定為「系統分頁大小」的整數倍。

這個將為開啟檔案指定緩存,預設是沒有啟用的,
max

指定快取數量,建議和開啟檔案數一致,

inactive長時間文件沒被請求後刪除快取。


這個是指多長時間檢查一次快取的有效資訊。


open_file_cache


open_file_cache

open_file_cacheopen_file_cache

open_file_cache


open_file_cache

指令中的

inactive參數時間內文件的最少使用次數,如果超過這個數字,文件描述符一直是在緩存中打開的,如上例,如果有一個文件在

inactive


時間內一次沒被使用,它將被移除。

}


設定http伺服器,利用它的反向代理功能提供負載平衡支援

http

include mime.types;

#

設定

mime me.type檔案定義 default_type application/octet-stream;🎼

'"$http_referer" "$http_user_agent" "$http_x_forwarded_for" $request_time $sent_http_x_cache_hit';

log_format log404 '$status [$time_local] $remote_addr $host$request_uri $sent_http_location';

$remote_addr

$http_x_forwarded_for

用以記錄客戶端的

ip $remote_user:用來記錄客戶端使用者名稱;$time_local

$time_local

用來記錄訪問時間與時區;

$request

: 用來記錄請求的url

http

$status : 用來記錄請求狀態;成功是200

_🜎

:記錄傳送給客戶端文件主體內容大小;$http_referer$http_referer

$http_user_agent :記錄客戶毒啊瀏覽器的相關資訊;

客戶的IP

位址了,透過

$remote_add$remote_add

iP

地址。反向代理伺服器在轉送請求的http頭資訊中,可以增加x_forwarded_for客戶端的請求的伺服器位址;access_log /dev/null; 用了log_format 指令設定了日誌格式之後,需要用access_log指令指定日誌檔案的存放路徑; /nginx/logs /access_log main;server_names_hash_bucket_size 128;

server_names_hash_bucket_size 128;

#保存伺服器名稱的hash server_names_hash_bucket_size所控制的。參數hash bucket size總是等於hash表的大小,並且是一路處理器快取大小的倍數。在減少了在記憶體中的訪問次數後,使在處理器中加速查找hash表鍵值成為可能。如果hash bucket size等於一路處理器快取的大小,那麼在查找鍵的時候,最壞的情況下在記憶體中查找的次數為2。第一次是確定儲存單元的位址,第二次是在儲存單元中尋找鍵 值。因此,如果Nginx給出需要增大hash max size 或 hash bucket size的提示,首要的就是增加前一個參數的大小.

client_header_buffer_size 4k;


客戶端請求頭部的緩衝區可以將這個尺寸

1k,不過由於一般系統分頁都要大於1k

,所以這裡設定為分頁大小。分頁大小可以用指令

getconf PAGESIZE取得。 large_client_o


客戶請求頭緩衝大小

nginx

預設會用client_header_buffer_size

這個buffer

來讀取header
header過大,它會使用large_client_header_buffers來讀取

如果設定過小

過大 會報400 錯誤nginx 400 bad request求行如果超過buffer,就會報 414錯誤(URI Too Long)nginx 頭部大小必須比其中一個
buffer
大,否則就會報400 (Bad Request)
open_file_cache max 102400 , location 這個指令指定快取是否啟用, 如果啟用,將記錄檔案以下資訊: ·開啟的檔案描述子

,大小資訊和修改時間

. ·存在的目錄資訊. ·在搜尋檔案過程中的錯誤訊息 --

, 參考

open_file_cache_errors指令選項

:·max

,最長使用過的檔案(LRU)會移除: open_file_cache max=1000 inactive=20s; open_ache_cache_valid 30 open_file_cache_errors on;

open_file_cache_errors
語法:open_語法 :open_file_cache_errors off 使用欄位:http, server, location 這個指令指定是否在搜尋一個檔案是記錄是否在搜尋一個檔案是記錄是否在搜尋一個檔案. open_file_cache_min_uses

.

預設值:open_file_cache_min_uses 1 

使用欄位

:http, server, location 這個指令指定了在一定的時間範圍內的指令使用的最小文件數,如 果實使用較大的值,檔案描述子在cache_open valid 語法:open_file_cache_valid time 預設值:open_file_cache_valid 60 使用欄位:http, server, location 這個指令指定了何時需要檢查open_file_cacheache

client_max_body_size 300m; nginx上傳檔案的大小


sendfile on; #sendfile指令指定 

nginx 是否呼叫

sendfile 函數(

zero copy 方式)來輸出文件,對於普通應用,必須設為on如果用來進行下載等應用磁碟

IO重負載應用,可設定為


off

,以平衡磁碟機off

uptime

tcp_nopush on;或使用此選項。 TCP_CORK的選項,此選項只在使用sendfile的時候使用#後端伺服器連接的超時時間_發起握手等待回應超時時間_

#

連接成功後_

等候後端伺服器回應時間_

其實已經進入後端的排隊中等待處理(也可以說是後端伺服器處理請求的時間)其實已經進入後端的排隊之中。 proxy_send_timeout 180; 就是在規定時間內後端伺服器必須傳完所有的資料


proxy_buffer_size 256k;

#設定從被代理伺服器讀取的第一部分應答的緩衝區大小,通常情況下這部分應答中包含一個小的應答頭,默認情況下這個值的大小為指令proxy_buffers中指定的一個緩衝區的大小,不過可以將其設定為更小

5

#

設定用於讀取應答(來自被代理伺服器)的緩衝區數目和大小,預設情況也為分頁大小,根據作業系統的差異可能是4k

4k

proxy_busy_buffers_size 256k;

proxy_temp_file_write_size 256k;


#設定在寫入proxy_temp_path

時資料的大小,預防一個工作進程在傳遞檔案時阻塞太長

proxy_temp_path /data0 /proxy_temp_dir;#proxy_temp_path
_cachekpache proxy_cache_path /data0/proxy_cache_dir levels=1:2 keys_zone =cache_one:200m inactive=1d max_size=30g;#設定記憶體快取空間大小為200MB 天沒有被存取的內容自動清除,硬碟快取空間大小為30GB

keepalive_timeout 120;keepalive_timeout 120;

keepalive超時時間。

tcp_nodelay on;

_s 如果把它設定為比較大的數值,例如

256k

,那麼,無論使用firefox
還是IE還是IEIE 的圖片,都很正常。如果註解該指令,使用預設的client_body_buffer_size設置,也就是作業系統頁面大小的兩倍,8k1 ,問題就出現了。 無論使用firefox4.0還是IE8.0 左右的圖片,都返回500 Internal Server Error錯誤proxy_intercept_ 表示使nginx阻止HTTP 應答代碼為400或更高的應答。

com  {

server 127.0 .0.1:8027;server

server 127.0.0.1:8029;


hash $request_uri;

nginx upstream

目前支援4

種方式的分配

每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。

2weight存取比率成正比,用於後端伺服器效能不均的情況。
例如:upstream bakend {server 192.168.0.14 weight=10;server 192.168.0.155%;


2

ip_hash每個請求按訪問

ipip
session的問題。 例如:upstream bakend {ip_hash;server 192.168.0.14:88;

3

fair
(第三方)按後端伺服器的回應時間來分配請求,回應時間短的優先分配。

upstream backend {server1;

server server2;fair;} 4url_hash
(第三方)



按訪問
url

url

定向到同一個後端伺服器,後端伺服器為快取時比較有效。 例:在upstream

中加入 語句中不能寫入

weight等其他的參數,hash_method是使用的hash演算法hash演算法

squid1:3128;

server squid2: 3128;hash $request_uri;hash_method crc32;} upstream bakend{# 定義負載平衡設備的Ip及設備狀態ip_hash;server 127.0.0.1:9090 7% 2;

server 127.0.0.1:6060;server 127.0.0.1:7070 backup;

}
在需要使用負載的}

在需要使用負載的 proxy_pass http://bakend /;

每個設備的狀態設定為

:1.down

:暫時不參與負載

2.weight預設為1.weight越大,負載的權重越大。 3.max_fails
:允許請求失敗的次數預設為
1.
當超過最大次數

up🜎 4. fail_timeout:max_fails
次失敗後,暫停的時間。
5.backup: 其它所有的非backup
機器
down

機器

down請 機器。所以這台機器壓力會最輕。
nginx支援同時設定多組的負載平衡,用來給不用的
支援同時設定多組的負載平衡,用來給不用的來使用

client_body_in_file_only設定為On  post過來的資料記錄到檔案中用來做debugclient_body_temp_path33355%
的目錄可以設定最多33
location

URL進行配對

.可以進行配對.可以進行新重定向 負載平衡


#

設定虛擬機

{

#設定監聽埠

server_name image.***.com;

location ~* .(mp3|exe)$ {

#

結尾的位址進行負載平衡

proxy_pass http://img_relay

#設定被代理伺服器的連接埠或套接字,以及

URL

_

proxy_set_header X-Real-IP $remote_addr;

_fidward_fid; # 以上三行,目的是將代理伺服器收到的用戶的資訊傳到真實伺服器上

}

location /face {

if ($http_user_agent ~* "x") {if ($http_user_agent ~* "x") {

rewrite ^(.*)$ http://211.151.188.190:8080/face.jpg redirect;

proxy_pass http:// img_relay

$request_uri;

proxy_set_header X-Real-IP $remote_addr ;

proxy_set_header X-Forwarded-For $proxy_add_xforwarded_forforfor;

error_page 404 502 = @fetch;

}

access_log /data/logs/face. log log404;

#

rewrite ^(.* )$ http://211.151.188.190:8080/face.jpg redirect;

location /image {

*

重寫^(.*)$ http://211.151.188.190:8080/face.jpg 重定向; }

proxy_pass http://

img_relay

proxy_set_header 主機$host;

proxy_set_header X-真實IP $remote_addr;

_pro er X-轉寄-For $proxy_add_x_forwarded_for;

error_page 404 502 = @fetch;

位置@fetch {

access_log /data/logs/image.log log404; 1.188.190:8080/ face. jpg 重新導向;

}

伺服器

聽80;

伺服器名稱*.***.com *.***.cn;

* exe )$ {

proxy_pass http://img_relay$request_uri;

pr oxy_set_header 主機$host;

proxy_set_header X-真實IP $remote_addr;

$proxy_add_x_forwarded_for ;

}

位置/ {*

重寫^(.*)$ http://i1.***img.com/help/noimg.gif 重新導向;

proxy_pass http://img_relay$request_uri;

_

proxy_set_header X-真實IP $ remote_addr; #error_第404 頁http://i1.***img.com/help/ noimg.gif;

}

access_log /data/logs/baijiaqi.log log404;

重寫^( .*)$ http://i1. ***img.com/help/noimg.gif 重定向; }

#access_log off;

伺服器

聽80;

server_name *.***img.com;

~* .(mp3|exe)$ {

proxy_pass http://img_relay$request_uri;

_pro

proxy_set_header X-真實IP $re proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

地點/ {


if ($http_user_agent ~* "xnp") {

重寫^(.*)$ gif;

}

g_relay$request_uri;

proxy_set_header 主機$host;

_p

proxy_set_head呃X-轉發-對於$proxy_add_x_forwarded_for;

#error_page 404 http://i1.***img.com/H#error_page 404 http://i1.***img.com/help/nomcom/hel

error_page 404 = @fetch;

} log off;

位置@fetch {

access_log /data/logs/b

重寫^(. * )$ http://i1.***img。 com/help/noimg.gif }

伺服器

伺服器

聽8080;

server_name ngx-ha.***img.com;

位置/ {

stub_status 開啟;

}

80;

伺服器名稱imgsrc1 .***.net ;

rootroot

伺服器{

聽80; ;

# access_log /usr /local/nginx/logs/access_log main;

位置/ {

重寫^( .*)$ www。 ***.com/ ;

}

}

伺服器{

server_name *** *****.com w。

# access_log /usr/local/nginx/logs/access_log main;

重寫^(.*)$ http://www.********.com/;

}

聽80;

server_name ******.com;

💎

地點/ {

.

}



位置 /NginxStatus {
stub_status on;
access_log on;
auth_basic "NginxStatus";

#設定查看NginxNginx


位置 ~ /.ht {否認所有;}

.htxxx 文件

註解:變數

core模組支援內建變量,他們的名字和

apache

的內建變數是一致的。

首先是說明客戶請求 $http_user_agent,$http_cookie 等等。

還有其他一些變數 此參數與請求行中的參數一致$content_length

$content_length th”

的值。

$content_type$content_type

的值 $document_root的值

$document_uri$uri

$host與請求頭部中「值或是request 到達的server的名字(沒有 行)一樣 $limit_rate

允許限制的連線速率

等同於request

method 或「POST」 $remote_addr $remote_port客戶端

port

ngx_http_auth_basic_module

認證

$request_filename$request_filename$request_filename

aliasURI request組合而成

$request_uri含有參數的完整的初始URI $args一樣

$sheeme http

)盡在要求是評估例如

Rewrite ^(.+)$ $sheme://example.com$; _protocol 等同於

request

的協議,使用「 HTTP/

$server_addr request

ip

,一般取得此變數的值的目的是進行系統呼叫。為了避免系統調用,有必要在

listen

指令中指明

指令中指明指令中指明指令中指明 bind 參數。 $server_name

$server_port請求到達的伺服器的連接埠號碼

$uri等同於當前等同於當前 URI,可不同於初始值,例如內部重定向時或使用index



nginx

中文維基百科 http://wiki.nginx.org/NginxChs

以上就介紹了Nginx 設定檔詳解,包括了方面的內容,希望對PHP教學有興趣的朋友有所幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn