Nginx 配置說明

##################################################################################################################

# main全局配置? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #

##################################################################################################################

user? www www;? #默認為nobody

# 設置nginx工作進程的用戶

worker_processes? 2; # 默認為1

# 設置worker角色的工作進程的個數(shù),正常情況下可以設置成cpu的內核數(shù),最多設置為8個;

# 也可以將worker_processes的值設為auto,這樣nginx會自動檢測CPU核數(shù)并打開相同數(shù)量的worker進程;

# 當nginx添加了SSL證書時,最好要打開多個worker進程。SSL握手會進行硬盤I/O操作。所以打開多個worker進程有利于性能的提升;

worker_cpu_affinity 01 10;

# 通過設置cpu粘性來降低由于多CPU核切換造成的寄存器等現(xiàn)場重建帶來的性能損耗,上述設置表示第一個worker進程用第一個cpu,第二個worker進程進程使用第二個cpu

worker_rlimit_nofile; # 默認為操作系統(tǒng)的限制(65535)

# 設置每個worker進程的最大打開文件數(shù)(句柄)限制

error_log? logs/error.log error;? ?

# 配置錯誤日志路徑以及打印級別(debug | info | notice | warn | error | crit | alert | emerg)

# 生產場景一般是warn | error | crit 這三個級別之一,級別太低會有太多IO消耗,影響效率

pid logs/nginx.pid;

# pid文件為文本文件,內容只有一行, 記錄了該進程的ID,根據(jù)PID文件的內容,準確判斷進程是否正在運行,防止意外啟動多個進程實例。

# 只有獲得pid文件(固定路徑固定文件名)寫入權限(F_WRLCK)的進程才能正常啟動并把自身的PID寫入該文件中,其它同一個程序的多余進程則自動退出。

##################################################################################################################

# events模塊中包含nginx中所有處理連接的設置? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #

##################################################################################################################

events {

? ? use epoll;? ?

? ? # 用于設置處理客戶端請求的輪詢方法

? ? # 在Linux操作系統(tǒng)下,nginx默認使用epoll事件模型

? ? # 同時Nginx在OpenBSD或FreeBSD操作系統(tǒng)上采用類似于epoll的高效事件模型kqueue

? ? # 在操作系統(tǒng)不支持這些高效模型時才使用select

? ? worker_connections? 2048;? #默認為512

? ? # 設置可由一個worker進程同時打開的最大連接數(shù)。但不能超過worker_rlimit_nofile的設置

? ? accept_mutex on;? # 默認為on

? ? # 當一個新連接到達時,如果激活了accept_mutex,那么多個Worker將以串行方式來處理,其中有一個Worker會被喚醒,其他的Worker繼續(xù)保持休眠狀態(tài);

? ? # 如果沒有激活accept_mutex,那么所有的Worker都會被喚醒,不過只有一個Worker能獲取新連接,其它的Worker會重新進入休眠狀態(tài),[thundering herd現(xiàn)象](https://en.wikipedia.org/wiki/Thundering_herd_problem)

? ? accept_mutex_delay 500ms; # 默認為500ms

? ? # 當accept_mutex功能啟用后,只有一個持有mutex鎖的worker進程會接受并處理請求,其他worker進程等待。accept_mutex_delay指定的時間就是這些worker進程的等待時間,過了等待時間下一個worker進程便取得mutex鎖,處理請求。

? ? multi_accept on # 默認為off

? ? # multi_accept可以讓nginx worker進程盡可能多地接受請求,提高性能

? ? # 如果設置為on,可以讓worker進程一次性地接受監(jiān)聽隊列里的所有請求,然后處理

? ? # 如果multi_accept的值設為off,那么worker進程必須一個一個地接受監(jiān)聽隊列里的請求

? ? # 如果web服務器面對的是一個持續(xù)的請求流,那么啟用multi_accept可能會造成worker進程一次接受的請求大于worker_connections指定可以接受的請求數(shù)。這就是overflow,這個overflow會造成性能損失,overflow這部分的請求不會受到處理

}

##################################################################################################################

# 提供http服務相關的一些配置參數(shù)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #

##################################################################################################################

http {

? ? ####################################################################################

? ? # 基本配置? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #

? ? ####################################################################################

? ? include? mime.types;

? ? # include可以包含若干子配置文件,實現(xiàn)不同需求配置獨立,可以將不同的server配置在不同的conf文件里

? ? # mime.types文件列出針對不同的請求文件返回的HTTP response的Content-Type的Accept值

? ? # 除非服務端Web程序手動設置了Content-Type,如果Web程序沒設置,則會從mime.types中匹配返回

? ? # 如果mime.types中也沒找到對應文件的擴展名的話,就使用默認的default_type

? ? default_type? application/octet-stream;

? ? # 如果在mime.types的配置中沒有找到響應請求文件的格式,則走default_type

? ? types_hash_max_size 2048;

? ? # 設置散列表的沖突率。

? ? # types_hash_max_size越大,就會消耗更多的內存,但散列key的沖突率會降低,檢索速度就更快。

? ? # types_hash_max_size越小,消耗的內存就越小,但散列key的沖突率可能上升。

? ? server_tokens off;

? ? # 返回錯誤頁面時是否在Server中注明Nginx版本

? ? server_names_hash_bucket_size 64;

? ? # 為了提高快速尋找到相應server_name的能力,Nginx 使用散列表來存儲server_name,server_names_hash_bucket_size設置了每個散列桶占用的內存大小。

? ? server_name_in_redirect off;

? ? # 重定向主機名稱的處理.該配置需要配合server_name使用.

? ? # 設置為on時,表示在重定向請求時會使用stream里配置的第一個主機名代替原先請求中的Host頭部,而當關閉時,表示在重定向請求時使用請求本身的Host頭部。

? ? ####################################################################################

? ? # 日志配置? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #

? ? ####################################################################################

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

? ? ? ? ? ? ? ? ? ? ? '$status $body_bytes_sent "$http_referer" '

? ? ? ? ? ? ? ? ? ? ? '"$http_user_agent" "$http_x_forwarded_for"';

? ? # 定義日志nginx日志文件的打印格式并命名為變量main

? ? access_log? logs/access.log? main;?

? ? # access_log指定nginx的訪問日志的存放路徑文件以及使用的日志文件格式

? ? #access_log off;?

? ? # 為了提高效率,可以將訪問日志關掉

? ? access_log /data/logs/nginx-access.log buffer=32k flush=5s;

? ? # buffer和flush可以設置緩存日志的刷盤策略,日志超過32k才刷盤,如果沒滿32k,但是超過5s也自動刷盤

? ? rewrite_log on; # 默認是off

? ? # 開啟或者關閉rewrite模塊指令執(zhí)行的日志,如果開啟,則重寫將記錄下notice等級的日志到nginx 的error_log中

? ? ####################################################################################

? ? # 高效文件傳輸? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #

? ? ####################################################################################

? ? sendfile on;

? ? # 當一個程序需要傳輸文件時,Linux內核首先將文件數(shù)據(jù)緩沖,然后將文件數(shù)據(jù)傳送給程序緩沖,最后程序將文件數(shù)據(jù)傳輸?shù)侥康牡亍?/p>

? ? # Sendfile方法是一種數(shù)據(jù)傳輸?shù)母咝У姆椒ǎ瑪?shù)據(jù)在內核中的文件描述符之間傳輸

? ? # 這種方法的結果是改善了對操作系統(tǒng)資源的利用,提高Nginx靜態(tài)資源托管效率,直接在內核空間完成文件發(fā)送,不需要先read再write,沒有上下文切換開銷

? ? tcp_nopush on;

? ? # TCP_NOPUSH是FreeBSD的一個socket選項,對應Linux的TCP_CORK,Nginx里統(tǒng)一用tcp_nopush來控制它,并且只有在啟用了sendfile之后才生效。

? ? # 啟用它之后,數(shù)據(jù)包會累計到一定大小之后才會發(fā)送,減小了額外開銷,提高網絡效率

? ? tcp_nodelay on;

? ? # TCP_NODELAY也是一個socket選項,啟用后會禁用Nagle算法,盡快發(fā)送數(shù)據(jù),某些情況下可以節(jié)約200ms

? ? # Nagle算法原理是:在發(fā)出去的數(shù)據(jù)還未被確認之前,新生成的小數(shù)據(jù)先存起來,湊滿一個 MSS 或者等到收到確認后再發(fā)送

? ? # Nginx 只會針對處于keep-alive狀態(tài)的TCP連接才會啟用tcp_nodelay

? ? keepalive_timeout? 65;

? ? # 一個keepalive連接在閑置超過一定時間后(默認的是75秒),會主動關閉這個長連接

? ? # 客戶端可以設置http服務要不要走長連接,通過設置請求頭Connection=keep-alive實現(xiàn)的,http1.0默認是關閉的,http1.1默認是打開的

? ? # 谷歌瀏覽器同時最多有6個tcp連接

? ? # keepalive_timeout時間不能設置太長,因為太長會長時間占用tcp連接不釋放,導致服務器的tcp連接不夠用;也不能太短,如果太短會導致一些大文件上傳接口因為上傳一半而中斷;

? ? keepalive_requests 200;

? ? # 設置同一個長連接上最多請求次數(shù),超過這個次數(shù),將主動關閉這個長連接

? ? ####################################################################################

? ? # http_proxy 設置,client相關配置? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #

? ? ####################################################################################

? ? client_max_body_size? 10m;

? ? # 允許客戶端請求的最大單文件字節(jié)數(shù)限制。如果有上傳較大文件的需求,盡量設置大一些

? ? client_body_buffer_size? 128k;

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

? ? client_header_timeout 60;

? ? # 指定等待client發(fā)送一個請求頭的超時時間,僅當在一次read中,沒有收到請求頭,才會算成超時。如果在超時時間內,client沒發(fā)送任何東西,nginx返回HTTP狀態(tài)碼408(“Request timed out”)

? ? client_body_timeout 60;

? ? # 該指令設置請求體(request body)的讀超時時間。僅當在一次readstep中,沒有得到請求體,就會設為超時。超時后,nginx返回HTTP狀態(tài)碼408(“Request timed out”)

? ? ####################################################################################

? ? # http_proxy 設置,server相關配置? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #

? ? ####################################################################################

? ? proxy_connect_timeout? 60;

? ? # 該指令設置與upstream server的連接超時時間,有必要記住,這個超時不能超過75秒

? ? proxy_send_timeout? 75;

? ? # 這個指定設置了發(fā)送請求給upstream服務器的超時時間。超時設置不是為了整個發(fā)送期間,而是在兩次write操作期間。如果超時后,upstream沒有收到新的數(shù)據(jù),nginx會關閉連接

? ? proxy_read_timeout? 75;

? ? # 該指令設置與代理服務器的讀超時時間。它決定了nginx會等待多長時間來獲得請求的響應。這個時間不是獲得整個response的時間,而是兩次reading操作的時間,默認值60s

? ? proxy_upstream_fail_timeout 10;

? ? # Upstream模塊下server指令的參數(shù),設置了某一個upstream后端失敗了指定次數(shù)(max_fails)后,該后端不可操作的時間,默認為10秒

? ? proxy_buffer_size? 4k;

? ? # 設置代理服務器(nginx)從后端realserver讀取并保存用戶頭信息的緩沖區(qū)大小,默認與proxy_buffers大小相同,其實可以將這個指令值設的小一點

? ? proxy_buffers? 4 32k;

? ? # proxy_buffers緩沖區(qū),4個緩存,每個大小限制為32k。

? ? proxy_busy_buffers_size? 64k;

? ? # 高負荷下緩沖大小(proxy_buffers*2)

? ? proxy_temp_file_write_size? 64k; # 默認為1024M

? ? # 當proxy_buffers放不下后端服務器的響應內容時,會將一部分保存到硬盤的臨時文件中,這個值用來設置最大臨時文件大小,默認1024M

? ? # 它與proxy_cache沒有關系,大于這個值,將從upstream服務器傳回。設置為0禁用

? ? proxy_temp_path? /usr/local/nginx/proxy_temp 1 2;

? ? # 指定緩存寫到那個目錄

? ? ####################################################################################

? ? # gzip壓縮功能設置? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #

? ? ####################################################################################

? ? gzip on;? ? ?

? ? # 開啟gzip壓縮輸出,減少網絡傳輸,客戶端通過設置請求頭Accept-Encoding=gzip, deflate, br來支持gzip壓縮

? ? gzip_static on;

? ? # nginx對于靜態(tài)文件的處理模塊,該模塊可以讀取預先壓縮的gz文件,這樣可以減少每次請求進行gzip壓縮的CPU資源消耗。

? ? # 該模塊啟用后,nginx首先檢查是否存在請求靜態(tài)文件的gz結尾的文件,如果有則直接返回該gz文件內容

? ? gzip_disable "msie[1-6].";?

? ? # IE6的某些版本對gzip的壓縮支持很不好,會造成頁面的假死,為了確保其它的IE6版本不出問題,所以建議加上gzip_disable的設置

? ? gzip_min_length 1k;

? ? # 設置允許壓縮的頁面最小字節(jié)數(shù),頁面字節(jié)數(shù)從header頭得content-length中進行獲取。默認值是20。建議設置成大于1k的字節(jié)數(shù),小于1k可能會越壓越大

? ? gzip_buffers? ? 4 16k;

? ? # 設置系統(tǒng)獲取幾個單位的緩存用于存儲gzip的壓縮結果數(shù)據(jù)流。4 16k代表以16k為單位,安裝原始數(shù)據(jù)大小以16k為單位的4倍申請內存

? ? gzip_http_version 1.0;

? ? # 用于識別http協(xié)議的版本,早期的瀏覽器不支持Gzip壓縮,用戶就會看到亂碼,所以為了支持前期版本加上了這個選項。

? ? # 如果你用了Nginx的反向代理并期望也啟用Gzip壓縮的話,由于末端通信是 http/1.0,故請設置為 1.0

? ? gzip_comp_level 6;

? ? # gzip壓縮比,1壓縮比最小處理速度最快,9壓縮比最大但處理速度最慢(傳輸快但比較消耗cpu)

? ? gzip_types text/html text/plain text/css text/javascript application/json application/javascript application/x-javascript

? ? application/xml;

? ? # 匹配mime類型進行壓縮,無論是否指定,”text/html”類型總是會被壓縮的

? ? gzip_vary on;

? ? # 和http頭有關系,會在響應頭加個Vary:Accept-Encoding,可以讓前端的緩存服務器緩存經過gzip壓縮的頁面,例如,用Squid緩存經過Nginx壓縮的數(shù)據(jù)

? ? gzip_proxied any

? ? # Nginx作為反向代理的時候啟用,決定開啟或者關閉后端服務器返回的結果是否壓縮,匹配的前提是后端服務器必須要返回包含”Via”的 header頭

? ? ##################################################################################

? ? # FastCGI 設置,為了保證Nginx下PHP環(huán)境的高速穩(wěn)定運行,需要添加一些FastCGI優(yōu)化指令? ? ? ? ? #

? ? ##################################################################################

? ? fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;

? ? # 為FastCGI緩存指定一個文件路徑、目錄結構等級、關鍵字區(qū)域存儲時間和非活動刪除時間

? ? fastcgi_connect_timeout 300;?

? ? # 指定連接到后端FastCGI的超時時間

? ? fastcgi_send_timeout 300;? ?

? ? # 指定向FastCGI傳送請求的超時時間,這個值是已經完成兩次握手后向FastCGI傳送請求的超時時間

? ? fastcgi_read_timeout 300;? ?

? ? # 指定接收FastCGI應答的超時時間,這個值是已經完成兩次握手后接收FastCGI應答的超時時間

? ? fastcgi_buffer_size 64k;? ? ?

? ? # 用于指定讀取FastCGI應答第一部分需要多大的緩沖區(qū),這個值表示將使用1個64KB的緩沖區(qū)讀取應答的第一部分(應答頭),可以設置為fastcgi_buffers選項指定的緩沖區(qū)大小

? ? fastcgi_buffers 4 64k;? ?

? ? # 指定本地需要用多少和多大的緩沖區(qū)來緩沖FastCGI的應答請求。

? ? # 如果一個PHP腳本所產生的頁面大小為256KB,那么會為其分配4個64KB的緩沖區(qū)來緩存;如果頁面大小大于256KB,那么大于256KB的部分會緩存到fastcgi_temp指定的路徑中。

? ? # 一般這個值應該為站點中PHP腳本所產生的頁面大小的中間值,如果站點大部分腳本所產生的頁面大小為256KB,那么可以把這個值設置為“16 16k”、“4 64k”等

? ? fastcgi_temp_file_write_size 128k;

? ? # 表示在寫入緩存文件時使用多大的數(shù)據(jù)塊,默認值是fastcgi_buffers的兩倍

? ? fastcgi_cache TEST;?

? ? # 表示開啟FastCGI緩存并為其指定一個名稱。開啟緩存非常有用,可以有效降低CPU的負載,并且防止502錯誤的發(fā)生

? ? fastcgi_cache_valid 200 302 1h;

? ? # 指定code為200,302的響應緩存為一小時

? ? fastcgi_cache_valid 301 1d;?

? ? # 指定code為301的緩存有效時間為1天

? ? fastcgi_cache_valid any 1m;

? ? # 其它緩存有效時間都為1分鐘

? ? ##################################################################################

? ? # 設定負載均衡后臺服務器列表? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #

? ? ##################################################################################

? ? upstream? backend? {

? ? ? ? keepalive 30

? ? ? ? # 在開啟長連接的情況下,最多保持空閑長連接的個數(shù),如果超過這個數(shù)量,最近最少使用的長連接將被關閉

? ? ? ? ip_hash;? ? # 默認為round-robin

? ? ? ? # 負載均衡處理方式,一共有三種方式:

? ? ? ? # (1)round-robin(輪訓請求方式)

? ? ? ? # (2)ip_hash(回話持久化方式,這個方法保證從同一個客戶端發(fā)起的請求總是定向到同一臺服務器)

? ? ? ? # (3)least_conn(最少連接方式,找連接最少的服務進行處理)

? ? ? ? server? 192.168.10.100:8080 max_fails=2 fail_timeout=30s weight=2;

? ? ? ? server? 192.168.10.101:8080 max_fails=2 fail_timeout=30s weight=3;

? ? ? ? server? 192.168.10.101:8080 backup

? ? ? ? server? 192.168.10.101:8080 down;

? ? ? ? # weight設置每個服務的命中幾率,默認是1;

? ? ? ? # backup表示備份服務,只有所有的非備份不能使用時,會啟動該服務,down表示當前服務永遠不參與負載;

? ? ? ? # max_fails表示容許請求失敗的次數(shù),當超過該次數(shù)時將暫停一定時間(fail_timeout)

? ? }

? ? ##################################################################################

? ? # server虛擬主機配置? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #

? ? ##################################################################################

? ? server {

? ? ? ? ############################################

? ? ? ? # 基本配置? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #

? ? ? ? ############################################

? ? ? ? listen? 80 default_server; # 默認為80

? ? ? ? # 監(jiān)聽端口設置,小于1024的要以root啟動,

? ? ? ? # default_server表示如果找不到對應端口的server_name,則默認走這個匹配

? ? ? ? server_name? itoatest.example.com;

? ? ? ? # 一個nginx可以配置多個server,nginx通過檢查請求header中host來匹配每個server的server_name決定走哪個server,

? ? ? ? # 如果沒有任何一個server可以匹配,則會選擇第一個server做匹配。默認匹配可以通過listen中添加defalut_server來改變。

? ? ? ? # server_name有四種匹配方式:

? ? ? ? # (1)精確匹配(itoatest.example.com)

? ? ? ? # (2)星號開頭的最長的通配符名稱(*.example.org)

? ? ? ? # (3)星號結束的最長的通配符名稱(mail.*)

? ? ? ? # (4)正則表達式匹配(~^www\d+\.example\.net$,正則表達式必須以~開頭)

? ? ? ? root? /apps/oaapp;

? ? ? ? # 見下文location講解

? ? ? ? allow 223.252.218.196;

? ? ? ? allow 59.111.28.48/32;

? ? ? ? # allow表示允許某個ip或ip段訪問

? ? ? ? deny all

? ? ? ? # deny表示禁止某個ip或者ip段訪問

? ? ? ? error_page? 500 502 503 504? /50x.html;

? ? ? ? error_page? 403? ? http://example.com/forbidden.html;

? ? ? ? # 這個參數(shù)可以為錯誤代碼指定相應的錯誤頁面

? ? ? ? charset utf-8;

? ? ? ? # 設置http頭信息的charset編碼

? ? ? ? if ($request_method = POST) {

? ? ? ? ? ? return 405;

? ? ? ? }

? ? ? ? # 關于if的使用請看下文[Nginx中如何使用變量?]

? ? ? ? ############################################

? ? ? ? # location特定的URL對應的一系列配置項? ? ? ? ? #

? ? ? ? ############################################

? ? ? ? location /i/ {? ? ? # 關于location中的路徑匹配規(guī)則以及匹配優(yōu)先級請看下文[Nginx中l(wèi)ocation部分URL如何匹配?]

? ? ? ? ? ? root? /apps/oaapp;?

? ? ? ? ? ? #alias? /apps/oaapp/;

? ? ? ? ? ? # root和alias都可以用來指定請求資源的真實路徑。

? ? ? ? ? ? # 區(qū)別是root最后得到的資源地址是root的值加上location的值,而alias正如其名,alias指定的路徑是location的別名,不管location的值怎么寫,資源的真實路徑都是 alias 指定的路徑。

? ? ? ? ? ? # 比如當訪問http://itoatest.example.com/i/hello.gif這個地址時,如果是root,資源的真實路徑是/apps/oaapp/i/hello.gif;如果是alias真實路徑是/apps/oaapp/hello.gif;

? ? ? ? ? ? # alias只能作用在location中,而root可以存在server、http和location中

? ? ? ? ? ? # alias 后面必須要用 “/” 結束,否則會找不到文件,而 root 則對 ”/” 可有可無

? ? ? ? ? ? index? index.jsp index.html index.htm;

? ? ? ? ? ? # 當用戶請求的是http://itoatest.example.com/i/這個地址時,就會自動在root配置指令指定的文件系統(tǒng)目錄下依次尋找 index.jsp 和 index.html,index.htm這三個文件,直到找到一個并返回

? ? ? ? ? ? autoindex on; # 默認為off

? ? ? ? ? ? # 當index指定的文件都找不到時,如果開啟autoindex,那么則會生成一個root所指目錄下的“目錄索引”的html并返回,如果沒有開啟,則會返回forbidden

? ? ? ? ? ? autoindex_exact_size off # 默認為on

? ? ? ? ? ? # 只有在autoindex開啟時才起作用,默認為on,顯示出文件的確切大小,單位是bytes。改為off后,顯示出文件的大概大小,單位是kB或者MB或者GB

? ? ? ? ? ? autoindex_localtime on # 默認為off

? ? ? ? ? ? # 只有在autoindex開啟時才起作用,默認為off,顯示的文件時間為GMT時間。改為on后,顯示的文件時間為文件的服務器時間

? ? ? ? ? ? proxy_pass? http://backend;

? ? ? ? ? ? # 請求轉向某個upstream定義的負載均衡的服務器列表,如果只有一臺服務器的話,也可以直接寫成proxy_pass http://ip:port;

? ? ? ? ? ? rewrite ^/i/(.*) /$1 break;

? ? ? ? ? ? # rewrite 的作用是修改 $uri,具體細節(jié)請看下文[rewrite如何重寫url?]

? ? ? ? ? ? proxy_redirect off; # 默認是default

? ? ? ? ? ? proxy_redirect http://192.168.10.101:8080/i/wuman/ http://itoatest.example.com/i/wuman/

? ? ? ? ? ? # 如果需要修改從被代理服務器傳來的應答頭中的"Location"和"Refresh"字段,可以用這個指令設置,分為三種情況:

? ? ? ? ? ? #(1)proxy_redirect off表示不修改服務端的redirect地址

? ? ? ? ? ? #(2)proxy_redirect default 將根據(jù)location和proxy_pass的設置來決定

? ? ? ? ? ? #(3)可以自己設置不同的替換規(guī)則

? ? ? ? ? ? proxy_set_header? Host? $host; #默認是$proxy_host

? ? ? ? ? ? # 可以通過三個變量對Host進行設置:

? ? ? ? ? ? #(1)$proxy_host,表示是反向代理后的host,就是proxy_pass后面跟的host

? ? ? ? ? ? # (2) $host首先從請求頭中獲取Host值,如果沒有則選擇server_name

? ? ? ? ? ? # (3) $http_host是直接從請求頭中獲取,所以可能為空,如果是非80/443端口的時候,$http_host = $host:$port

? ? ? ? ? ? proxy_set_header? X-Real-IP? $remote_addr;?

? ? ? ? ? ? # 由于在客戶端和web服務器之間增加了中間層,因此web服務器無法直接拿到客戶端的ip,通過$remote_addr變量拿到的將是反向代理服務器的ip地址;

? ? ? ? ? ? # 所以我們可以設置一個請求頭X-Real-IP,通過獲取這個請求頭就可以拿到客戶端的真實ip

? ? ? ? ? ? proxy_set_header? X-Forwarded-For? $proxy_add_x_forwarded_for;

? ? ? ? ? ? # 上述的意思增加一個$proxy_add_x_forwarded_for到X-Forwarded-For里去,注意是增加,而不是覆蓋

? ? ? ? ? ? # 如果每次代理都使用上述配置,那么X-Forwarded-For可以獲取到經過多次代理后的客戶多IP以及多層代理nginx的IP:IP0, IP1, IP2...

? ? ? ? ? ? # 所以proxy_set_header也是獲取真實客戶端ip的一種方法

? ? ? ? ? ? proxy_set_header X-Forwarded-Proto? https;

? ? ? ? ? ? # 請求標頭可幫助您識別客戶端與您的負載均衡器連接時所用的協(xié)議,并隨后將標題傳遞到您的服務器

? ? ? ? ? ? proxy_set_header X-Forwarded-Host $host

? ? ? ? ? ? # 可以幫助您識別客戶端與您的負載均衡器連接時所用的host,并隨后將標題傳遞到您的服務器

? ? ? ? ? ? proxy_set_header X-Forwarded-Host $port

? ? ? ? ? ? # 可以幫助您識別客戶端與您的負載均衡器連接時所用的port,并隨后將標題傳遞到您的服務器

? ? ? ? ? ? proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; # 默認是error timeout

? ? ? ? ? ? # 指定在什么情況下將請求應傳遞到下一個服務器,如果設置為off表示在任何情況下都不需要傳遞

? ? ? ? ? ? # error表示發(fā)生錯誤時,將請求傳遞到下一個服務器

? ? ? ? ? ? # timeout表示發(fā)生請求或者響應超時時,將請求傳遞給下一個服務器

? ? ? ? ? ? # invalid_header表示服務器返回空響應或無效響應時,將請求傳遞給下一個服務器

? ? ? ? ? ? # http_code表示服務器返回對應的code時將請求傳遞到下一個服務器

? ? ? ? ? ? proxy_next_upstream_timeout 30 # 默認是0

? ? ? ? ? ? # 限制請求可以傳遞到下一個服務器的時間,0表示關閉限制

? ? ? ? ? ? proxy_next_upstream_tries 2 # 默認為0

? ? ? ? ? ? # 限制將請求傳遞到下一個服務器的可能嘗試次數(shù), 0值關閉此限制

? ? ? ? }

? ? ? ? location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$?

? ? ? ? {?

? ? ? ? ? ? root /apps/oaapp;

? ? ? ? ? ? expires? ? ? 7d;

? ? ? ? ? ? # 對于站點中不經常修改的靜態(tài)內容(如圖片,JS,CSS),可以在服務器中設置expires過期時間,控制瀏覽器緩存,達到有效減小帶寬流量,降低服務器壓力的目的

? ? ? ? }

? ? ? ? location = /50x.html {

? ? ? ? ? ? root? html;

? ? ? ? }

? ? ? ? location = /video {

? ? ? ? ? ? directio 4m;? # 該路徑下所有大于4M的文件不直接從磁盤讀取,不走緩存

? ? ? ? ? ? # Direct I/O是文件系統(tǒng)的一個功能,它允許程序繞過內核緩存,直接在硬盤上讀寫數(shù)據(jù)

? ? ? ? ? ? # 這可以充分利用CPU頻數(shù),改善緩存的有效性,Directo I/O適用于訪問率少的數(shù)據(jù)。這些數(shù)據(jù)不需要緩存在任何位置

? ? ? ? ? ? # 在http, server和location當中都可以定義

? ? ? ? ? ? # 如果某個請求是通過directo I/O,那么這個請求不能使用sendfile功能

? ? ? ? }

? ? }

}

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Nginx簡介 解決基于進程模型產生的C10K問題,請求時即使無狀態(tài)連接如web服務都無法達到并發(fā)響應量級一萬的現(xiàn)...
    魏鎮(zhèn)坪閱讀 2,049評論 0 9
  • 1.簡介: ? Nginx:engine X ,2002年,開源,商業(yè)版? http協(xié)議:web服務器(類似于ht...
    尛尛大尹閱讀 1,895評論 0 3
  • I/O模型Nginx介紹Nginx的安裝和目錄結構Nginx的配置Nginx的編譯安裝 一、I/O模型 (一)I/...
    哈嘍別樣閱讀 906評論 0 4
  • #運行用戶 user nobody; #啟動進程,通常設置成和cpu的數(shù)量相等 worker_processes ...
    屁公主奶爸閱讀 286評論 0 2
  • nginx在工作中已經有好幾個環(huán)境在使用了,每次都是重新去網上扒博客,各種編譯配置,今天自己也整理一份安裝文檔和n...
    AndyChin閱讀 2,316評論 0 4