溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

nginx之nginx.conf配置詳解

發(fā)布時(shí)間:2020-09-10 00:10:03 來源:網(wǎng)絡(luò) 閱讀:554 作者:haitaoliu 欄目:建站服務(wù)器


#配置用戶或者組,默認(rèn)為nobody nobody

user nobody;

#啟動(dòng)進(jìn)程,根據(jù)硬件調(diào)整,通常等于CPU數(shù)量或者2倍于CPU

worker_processes  1;

#指定日志路徑,級(jí)別。這個(gè)設(shè)置可以放入全局塊,http塊,server塊,級(jí)別以此為:debug|info|notice|warn|error|crit|alert|emerg

#error_log  logs/error.log;

#error_log  logs/error.log  notice;

#error_log  logs/error.log  info;

#指定nginx進(jìn)程運(yùn)行文件存放地址

pid        logs/nginx.pid;

#工作模式及連接數(shù)上限

events {

#設(shè)置網(wǎng)路連接序列化,防止驚群現(xiàn)象發(fā)生,默認(rèn)為on

    accept_mutex on;


#設(shè)置一個(gè)進(jìn)程是否同時(shí)接受多個(gè)網(wǎng)絡(luò)連接,默認(rèn)為off

multi_accept on;


   #epoll是多路復(fù)用IO(I/O Multiplexing)中的一種方式,

   #僅用于linux2.6以上內(nèi)核,可以大大提高nginx的性能

#linux建議epoll,F(xiàn)reeBSD建議采用kqueue,window下不指定。

#補(bǔ)充說明: 與apache相類,nginx針對不同的操作系統(tǒng),有不同的事件模型

#A)標(biāo)準(zhǔn)事件模型:Select、poll屬于標(biāo)準(zhǔn)事件模型,如果當(dāng)前系統(tǒng)不存在更有效的方法,nginx會(huì)選擇select或poll

#B)高效事件模型:Kqueue:使用于FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和 MacOS X.使用雙處理器的MacOS X系統(tǒng)使用kqueue可能會(huì)造成內(nèi)核崩潰。

#Epoll:使用于Linux內(nèi)核2.6版本及以后的系統(tǒng)。

#/dev/poll:使用于Solaris 7 11/99+,HP/UX 11.22+ (eventport),IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+。

#Eventport:使用于Solaris 10。 為了防止出現(xiàn)內(nèi)核崩潰的問題, 有必要安裝安全補(bǔ)丁

# use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]

use   epoll;

   #單個(gè)后臺(tái)worker process進(jìn)程的最大并發(fā)鏈接數(shù)    

worker_connections  1024;

   # 并發(fā)總數(shù)是 worker_processes 和 worker_connections 的乘積

   # 即 max_clients = worker_processes * worker_connections

   # 在設(shè)置了反向代理的情況下,max_clients = worker_processes * worker_connections / 4  為什么

   # 為什么上面反向代理要除以4,應(yīng)該說是一個(gè)經(jīng)驗(yàn)值

   # 根據(jù)以上條件,正常情況下的Nginx Server可以應(yīng)付的最大連接數(shù)為:4 * 8000 = 32000

   # worker_connections 值的設(shè)置跟物理內(nèi)存大小有關(guān)

   # 因?yàn)椴l(fā)受IO約束,max_clients的值須小于系統(tǒng)可以打開的最大文件數(shù)

   # 而系統(tǒng)可以打開的最大文件數(shù)和內(nèi)存大小成正比,一般1GB內(nèi)存的機(jī)器上可以打開的文件數(shù)大約是10萬左右

   # 我們來看看360M內(nèi)存的VPS可以打開的文件句柄數(shù)是多少:

   # $ cat /proc/sys/fs/file-max

   # 輸出 34336

   # 32000 < 34336,即并發(fā)連接總數(shù)小于系統(tǒng)可以打開的文件句柄總數(shù),這樣就在操作系統(tǒng)可以承受的范圍之內(nèi)

   # 所以,worker_connections 的值需根據(jù) worker_processes 進(jìn)程數(shù)目和系統(tǒng)可以打開的最大文件總數(shù)進(jìn)行適當(dāng)?shù)剡M(jìn)行設(shè)置

   # 使得并發(fā)總數(shù)小于操作系統(tǒng)可以打開的最大文件數(shù)目

   # 其實(shí)質(zhì)也就是根據(jù)主機(jī)的物理CPU和內(nèi)存進(jìn)行配置

   # 當(dāng)然,理論上的并發(fā)總數(shù)可能會(huì)和實(shí)際有所偏差,因?yàn)橹鳈C(jī)還有其他的工作進(jìn)程需要消耗系統(tǒng)資源。

   # ulimit -SHn 65535


#keepalive超時(shí)時(shí)間

    keepalive_timeout 60;


#客戶端請求頭部的緩沖區(qū)大小。這個(gè)可以根據(jù)你的系統(tǒng)分頁大小來設(shè)置,一般一個(gè)請求頭的大小不會(huì)超過1k,

#不過由于一般系統(tǒng)分頁都要大于1k,所以這里設(shè)置為分頁大小。分頁大小可以用命令getconf PAGESIZE 取得。

#但也有client_header_buffer_size超過4k的情況,但是client_header_buffer_size該值必須設(shè)置為“系統(tǒng)分頁大小”的整倍數(shù)

    client_header_buffer_size 4k;


#這個(gè)將為打開文件指定緩存,默認(rèn)是沒有啟用的,max指定緩存數(shù)量,建議和打開文件數(shù)一致,inactive是指經(jīng)過多長時(shí)間文件沒被請求后刪除緩存。

    open_file_cache max=65535 inactive=60s;

#這個(gè)是指多長時(shí)間檢查一次緩存的有效信息

    open_file_cache_valid 80s;

#open_file_cache指令中的inactive參數(shù)時(shí)間內(nèi)文件的最少使用次數(shù),如果超過這個(gè)數(shù)字,

#文件描述符一直是在緩存中打開的,如上例,如果有一個(gè)文件在inactive時(shí)間內(nèi)一次沒被使用,它將被移除。

    open_file_cache_min_uses 1;

}

http {

   #隱藏nginx的版本號(hào)

    server_tokens  off;


   #設(shè)定mime類型,類型由mime.type文件定義

include    mime.types;


#默認(rèn)文件類型

default_type  application/octet-stream;


#默認(rèn)編碼

    charset utf-8;


#取消服務(wù)日志

    access_log off;


   #設(shè)定日志格式

#$remote_addr 與$http_x_forwarded_for 用以記錄客戶端的ip地址;

#$remote_user:用來記錄客戶端用戶名稱;

#$time_local:用來記錄訪問時(shí)間與時(shí)區(qū);

#$request:用來記錄請求的url與http協(xié)議;

#$status:用來記錄請求狀態(tài);成功是200,

#$body_bytes_sent:記錄發(fā)送給客戶端文件主體內(nèi)容大小;

#$http_referer:用來記錄從那個(gè)頁面鏈接訪問過來的;

#$http_user_agent:記錄客戶瀏覽器的相關(guān)信息;

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';

#combined為日志格式的默認(rèn)值

access_log  logs/access.log  main;


#服務(wù)器名字的hash表大小

#保存服務(wù)器名字的hash表是由指令server_names_hash_max_size 和server_names_hash_bucket_size所控制的。參數(shù)hash bucket #size總是等于hash表的大小,并且是一路處理器緩存大小的倍數(shù)。在減少了在內(nèi)存中的存取次數(shù)后,使在處理器中加速查找hash表鍵值成為可能。如果hash bucket #size等于一路處理器緩存的大小,那么在查找鍵的時(shí)候,最壞的情況下在內(nèi)存中查找的次數(shù)為2。第一次是確定存儲(chǔ)單元的地址,第二次是在存儲(chǔ)單元中查找鍵 #值。因此,如果Nginx給出需要增大hash max size 或 hash bucket size的提示,那么首要的是增大前一個(gè)參數(shù)的大小.

    server_names_hash_bucket_size 128;


    client_header_buffer_size 32k;


#客戶請求頭緩沖大小。nginx默認(rèn)會(huì)用client_header_buffer_size這個(gè)buffer來讀取header值,如果

#header過大,它會(huì)使用 large_client_header_buffers 來讀取。

    large_client_header_buffers 8 128k;

#這個(gè)指令指定緩存是否啟用;打開緩存的同時(shí)也指定了緩存最大數(shù)目,以及緩存的時(shí)間。

#我們可以設(shè)置一個(gè)相對高的最大時(shí)間,這樣我們可以在它們不活動(dòng)超過20秒后清除掉

    open_file_cache max=100000 inactive=20s;


#在open_file_cache中指定檢測正確信息的間隔時(shí)間。

    open_file_cache_valid 30s;


#定義了open_file_cache中指令參數(shù)不活動(dòng)時(shí)間期間里最小的文件數(shù)。使用字段:http, server, location

    open_file_cache_min_uses 2;


#指定了當(dāng)搜索一個(gè)文件時(shí)是否緩存錯(cuò)誤信息,也包括再次給配置中添加文件。

#使用字段:http, server, location

    open_file_cache_errors on;


#設(shè)定通過nginx上傳文件的大小

    client_max_body_size 300m;

   #sendfile 指令指定 nginx 是否調(diào)用 sendfile 函數(shù)(zero copy 方式)來輸出文件,

   #對于普通應(yīng)用,必須設(shè)為 on,

   #如果用來進(jìn)行下載等應(yīng)用磁盤IO重負(fù)載應(yīng)用,可設(shè)置為 off,

   #以平衡磁盤與網(wǎng)絡(luò)I/O處理速度,降低系統(tǒng)的uptime.

sendfile     on;


   #連接超時(shí)時(shí)間

keepalive_timeout  65;


#后端服務(wù)器連接的超時(shí)時(shí)間_發(fā)起握手等候響應(yīng)超時(shí)時(shí)間

    proxy_connect_timeout 90;


#連接成功后_等候后端服務(wù)器響應(yīng)時(shí)間_其實(shí)已經(jīng)進(jìn)入后端的排隊(duì)之中等候處理(也可以說是后端服務(wù)器處理請求的時(shí)間)

    proxy_read_timeout 180;

#后端服務(wù)器數(shù)據(jù)回傳時(shí)間_就是在規(guī)定時(shí)間之內(nèi)后端服務(wù)器必須傳完所有的數(shù)據(jù)

    proxy_send_timeout 180;

#設(shè)置代理服務(wù)器(nginx)保存用戶頭信息的緩沖區(qū)大小

    proxy_buffer_size 256k;

#設(shè)置用于讀取應(yīng)答(來自被代理服務(wù)器)的緩沖區(qū)數(shù)目和大小,默認(rèn)情況也為分頁大小,根據(jù)操作系統(tǒng)的不同可能是4k或者8k

    proxy_buffers 4 256k;


#高負(fù)荷下緩沖大?。╬roxy_buffers*2)

    proxy_busy_buffers_size 256k;


#緩沖區(qū)代理緩沖用戶端請求的最大字節(jié)數(shù)

    client_body_buffer_size


#設(shè)置在寫入proxy_temp_path時(shí)數(shù)據(jù)的大小,預(yù)防一個(gè)工作進(jìn)程在傳遞文件時(shí)阻塞太長;

#設(shè)定緩存文件夾大小,大于這個(gè)值,將從upstream服務(wù)器傳

    proxy_temp_file_write_size 256k;


#告訴nginx在一個(gè)數(shù)據(jù)包里發(fā)送所有頭文件,而不一個(gè)接一個(gè)的發(fā)送

    tcp_nopush on;


#告訴nginx不要緩存數(shù)據(jù),而是一段一段的發(fā)送

tcp_nodelay     on;

#開啟gzip壓縮

gzip  on;


#為指定的客戶端禁用gzip功能。我們設(shè)置成IE6或者更低版本以使我們的方案能夠廣泛兼容。

   gzip_disable "MSIE [1-6].";

#告訴nginx在壓縮資源之前,先查找是否有預(yù)先gzip處理過的資源。這要求你預(yù)先壓縮你的文件(在這個(gè)例子中被注釋掉了)

#從而允許你使用最高壓縮比,這樣nginx就不用再壓縮這些文件了(想要更詳盡的gzip_static的信息,請點(diǎn)擊這里)。

    gzip_static on;

#允許或者禁止壓縮基于請求和響應(yīng)的響應(yīng)流。我們設(shè)置為any,意味著將會(huì)壓縮所有的請求。

    gzip_proxied  any;

#最小壓縮文件大小

    gzip_min_length 1k;


#壓縮緩沖區(qū)

    gzip_buffers 4 16k;


#壓縮版本(默認(rèn)1.1,前端如果是squid2.5請使用1.0)

    gzip_http_version 1.0;


#壓縮等級(jí)

    gzip_comp_level 2;


#壓縮類型,默認(rèn)就已經(jīng)包含text/html,所以下面就不用再寫了,寫上去也不會(huì)有問題,但是會(huì)有一個(gè)warn。

    gzip_types text/plain application/x-javascript text/css application/xml;


#和http頭有關(guān)系,加個(gè)vary頭,給代理服務(wù)器用的,有的瀏覽器支持壓縮,有的不支持,所以避免浪費(fèi)不支持的也壓縮,所以根據(jù)客戶端的HTTP頭來判斷,是否需要壓縮

    gzip_vary on;


#limit_zone crawler $binary_remote_addr 10m; #開啟限制IP連接數(shù)的時(shí)候需要使用

    upstream mysvr {


#nginx的upstream目前支持4種方式的分配

#1、輪詢(默認(rèn))每個(gè)請求按時(shí)間順序逐一分配到不同的后端服務(wù)器,如果后端服務(wù)器down掉,能自動(dòng)剔除。

#2、weight 指定輪詢幾率,weight和訪問比率成正比,用于后端服務(wù)器性能不均的情況。

#3、ip_hash 每個(gè)請求按訪問ip的hash結(jié)果分配,這樣每個(gè)訪客固定訪問一個(gè)后端服務(wù)器,可以解決session的問題。

#4、fair(第三方):按后端服務(wù)器的響應(yīng)時(shí)間來分配請求,響應(yīng)時(shí)間短的優(yōu)先分配。

#5、url_hash(第三方):按訪問url的hash結(jié)果來分配請求,使每個(gè)url定向到同一個(gè)后端服務(wù)器,后端服務(wù)器為緩存時(shí)比較有效。

#每個(gè)設(shè)備的狀態(tài)設(shè)置為:

#1.down表示單前的server暫時(shí)不參與負(fù)載

#2.weight為weight越大,負(fù)載的權(quán)重就越大。

#3.max_fails:允許請求失敗的次數(shù)默認(rèn)為1.當(dāng)超過最大次數(shù)時(shí),返回proxy_next_upstream模塊定義的錯(cuò)誤

#4.fail_timeout:max_fails次失敗后,暫停的時(shí)間。

#5.backup: 其它所有的非backup機(jī)器down或者忙的時(shí)候,請求backup機(jī)器。所以這臺(tái)機(jī)器壓力會(huì)最輕。

    server 127.0.0.1:7878 down;

    server 192.168.10.121:3333 backup;  #熱備

    server 192.168.10.122:3333 weight=2;

    server 192.168.10.123:3333 max_fails=2 fail_timeout=3s;

    }

   #設(shè)定虛擬主機(jī)配置

server {


    #單連接請求上限次數(shù)。

    keepalive_requests 120;


       #偵聽80端口

listen    80;


#定義使用 localhost訪問

server_name  localhost;

  #定義服務(wù)器的默認(rèn)網(wǎng)站根目錄位置

root html;

#設(shè)定本虛擬主機(jī)的訪問日志

access_log  logs/nginx.access.log  main;

#默認(rèn)請求:location對URL進(jìn)行匹配.可以進(jìn)行重定向或者進(jìn)行新的代理 負(fù)載均衡

location / {

 #后端的Web服務(wù)器可以通過X-Forwarded-For獲取用戶真實(shí)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;

#請求轉(zhuǎn)向mysvr 定義的服務(wù)器列表

    proxy_pass mysvr;


    proxy_redirect default;


         #定義首頁索引文件的名稱

index index.php index.html index.htm;

}

#防止網(wǎng)絡(luò)爬蟲

    if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot") {

return 403;

    }

  # 定義錯(cuò)誤提示頁面

error_page   500 502 503 504 /50x.html;

location = /50x.html {

}

       #靜態(tài)文件,nginx自己處理 ,正則匹配,~為區(qū)分大小寫,~*為不區(qū)分大小寫。

location ~ ^/(p_w_picpaths|javascript|js|css|flash|media|static)/ {

 #讓客戶端緩存不常改變的數(shù)據(jù)

           #過期30天,靜態(tài)文件不怎么更新,過期可以設(shè)大一點(diǎn),

           #如果頻繁更新,則可以設(shè)置得小一點(diǎn)。

expires 30d;

}

       #PHP 腳本請求全部轉(zhuǎn)發(fā)到 FastCGI處理. 使用FastCGI默認(rèn)配置.

location ~ .php$ {

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

include fastcgi_params;

}

       #禁止訪問 .htxxx 文件

location ~ /.ht {

#設(shè)置默認(rèn)頁


    index vv.txt;


#root path;  #根目錄

deny all;

#拒絕的ip

    deny 127.0.0.1;

#允許的ip  

allow 172.18.5.54;

}

}

}



向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI