Nginx反向代理基本設(shè)置的21個指令詳解
1,proxy_pass
設(shè)置被代理服務(wù)器的地址,可以主機名,IP加端口號的形勢,語法位:proxy_pass URL,下面舉例說明:
upstream proxy_sers {
server 192.168.123.1/URI;
server 192.168.123.2/URI;
server 192.168.123.3/URI;
}
server{
listen 80;
server_name www.form1.cn;
location / {
proxy_pass http://proxy_sers; #server中指明 http:// 在proxy_pass就不需要指定
}
}proxy_pass中URL是否包含URI的問題,當訪問 www.form1.cn/server
location /server/ {
server_name www.form1.cn;
proxy_pass http://192.168.123.2;
}由于proxy_pass中URL不包含URI,所以轉(zhuǎn)向的地址為 http://192.168.123.2/server
location /server/ {
server_name www.form1.cn;
proxy_pass http://192.168.123.2/loc;
}由于proxy_pass中URL指明了URI,所以轉(zhuǎn)向的地址為 http://192.168.123.2/loc
proxy_pass http://192.168.123.2; www.form1.cn/server/ http://192.168.123.2/server/ proxy_pass http://192.168.123.2/; www.form1.cn/server/ http://192.168.123.2/
2,proxy_hide_header
Nginx在發(fā)送HTTP響應(yīng)時,可以去掉相關(guān)的響應(yīng)頭信息:
proxy_hide_header Set-Cookie;
3,proxy_pass_header
默認情況下,Nginx服務(wù)器在發(fā)送響應(yīng)報頭時,報文頭中不包含"Date 、Server、X-Accel"等來自代理服務(wù)器的頭域信息。proxy_pass_header可以調(diào)置這些頭域信息以被發(fā)送
語法為
proxy_pass_header field;
field 為需要發(fā)送的頭域
4,proxy_pass_request_body
配置是否將客戶端請求的請求體發(fā)送給代理服務(wù)器。
語法為
proxy_pass_request_body on | off;
默認為開啟狀態(tài)(on)
5,proxy_pass_request_headers
配置是否將客戶端請求的請求頭發(fā)送給代理服務(wù)器。
語法為
proxy_pass_request_headers on | off;
默認為開啟狀態(tài)(on)
6,proxy_set_header
可以更改nginx服務(wù)接收到的客戶端請求的請求頭信息,然后將新頭發(fā)送給被代理服務(wù)器。
語法為
proxy_set_header field value;
默認值:
proxy_set_header Host $proxy_host; proxy_set_header Connection close;
7,proxy_set_body
可以更改nginx服務(wù)接收到的客戶端請求的請求體信息,然后將新體發(fā)送給被代理服務(wù)器。
語法為
proxy_set_body value;
8,proxy_bind
強制將與代理主機的連接綁定到指定IP地址。
語法為
proxy_bind address;
其中 address為IP地址
9,proxy_connect_timeout
配置Nginx服務(wù)器與后端被代理服務(wù)器嘗試建立連接的超時時間,
語法為
proxy_connect_timeout time;
其中time為設(shè)置的超時時間,默認為 60s;
10,proxy_read_timeout
配置Nginx服務(wù)器向后端被代理服務(wù)器(組)發(fā)出read請求后,等待響應(yīng)的超時時間,
語法為
proxy_read_timeout time;
其中time為設(shè)置的超時時間,默認為 60s;
11,proxy_send_timeout
配置Nginx服務(wù)器向后端被代理服務(wù)器(組)發(fā)出write請求后,等待的響應(yīng)超時時間,
語法為
proxy_send_timeout time;
其中time為設(shè)置的超時時間,默認為 60s;
12,proxy_http_version
設(shè)置用于Nginx服務(wù)器提供代理服務(wù)的HTTP協(xié)議版本,
語法為
proxy_http_version 1.0 | 1.1;
默認為 1.0版本。1.1版本支持upsteam服務(wù)器組設(shè)置中的keepalive指令
13,proxy_method
設(shè)置Nginx服務(wù)器請求被代理服務(wù)器時使用的請求方法,一般為 POST 或者 GET ,設(shè)置了該值,客戶端的請求方法將被忽略。
語法為
proxy_method POST | GET;
14,proxy_ignore_client_abort
用于設(shè)置在客戶端中斷網(wǎng)絡(luò)請求時,Nginx服務(wù)器是否中斷對被代理服務(wù)器的請求,
語法為
proxy_ignore_client_abort on | off;
默認為 off ,客戶端斷了,nginx對被代理服務(wù)器也斷
15,proxy_ignore_headers
用于設(shè)置一些HTTP響應(yīng)頭中的頭域,Nginx服務(wù)器接收到被代理服務(wù)器的響應(yīng)數(shù)據(jù)后不會處理被設(shè)置的頭域
語法為
proxy_ignore_headers field....
field為要設(shè)置的HTTP響應(yīng)頭的頭域,例如 "X-Accel-Redirect 、X-Accel-Expires 、EXpires 、Cache-Control 、Set-Cookie"
16,proxy_redirect
假設(shè)前端url是example.com。后端server域名是csdn123.com,那么后端server在返回refresh或location的時候,host為csdn123.com,顯然這個信息直接返回給客戶端是不行的,需要nginx做轉(zhuǎn)換,這時可以設(shè)置:
proxy_redirect http://csdn123.com /
nginx會將host及port部分替換成自身的server_name及l(fā)isten port。不過這種配置對server_name有多個值的情況下支持不好。
我們可以用nginx內(nèi)部變量來解決這一問題:
proxy_redirect http://csdn123.com http://$host:$server_port
17,proxy_intercept_errors
配置一個狀態(tài)是開啟還是關(guān)閉。
開啟時:被代理服務(wù)器返回狀態(tài)碼為 400或400以上,Nginx服務(wù)器使用自己的 error_page。
關(guān)閉時:Nginx直接將代理服務(wù)器返回的狀態(tài)碼返回給客戶端
語法為
proxy_intercept_errors on | off;
18,proxy_headers_hash_max_size
存放HTTP報文頭的哈希表的容量
默認為
proxy_headers_hash_max_size 512;
19,proxy_headers_hash_bucket_size
Nginx服務(wù)器申請存放HTTP報文頭的哈希表容量的單位大小
默認為
proxy_headers_hash_max_size 64;
對(18和19):在啟動 Nginx 的時候,有時候會遇到這樣的一個錯誤:
解決辦法就是在配置文件中新增以下配置項:
proxy_headers_hash_max_size 51200; proxy_headers_hash_bucket_size 6400;
20,proxy_next_upstream
如果Nginx定義了 upstream 后端服務(wù)器組,如果組內(nèi)有異常情況,將請求順次交給下一個組內(nèi)服務(wù)器處理
語法為
proxy_next_upstream status...
可以是一個也可以是多個
status = error,timeout,invalid_header,http_500 502 503 504 404,off
21,proxy_ssl_session_reuse
該指令用于配置是否使用基于SSL安全協(xié)議的會話連接(htts://)被代理服務(wù)器,
語法為
proxy_ssl_session_reuse on | off;
默認為開啟 on,如果在錯誤日志中發(fā)現(xiàn)“SSL3_GET_FINISHED:digest check fiailed”的情況,關(guān)閉該指令即可
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
如何實現(xiàn)Nginx同一端口同時支持http與https協(xié)議
最近有一個需求,需要讓一個端口的http服務(wù)支持https訪問,本文就來介紹一下如何實現(xiàn)Nginx同一端口同時支持http與https協(xié)議,感興趣的可以了解一下2023-11-11
配置nginx轉(zhuǎn)發(fā)內(nèi)網(wǎng)請求到外網(wǎng)的實現(xiàn)示例
本文主要介紹了配置nginx轉(zhuǎn)發(fā)內(nèi)網(wǎng)請求到外網(wǎng)的實現(xiàn)示例,通過nginx配置代理實現(xiàn)內(nèi)網(wǎng)對外網(wǎng)接口數(shù)據(jù)的獲取,涉及nginx安裝、配置SSL、日志設(shè)置和錯誤排查,感興趣的可以了解一下2024-10-10
Linux平臺通過nginx和vsftpd構(gòu)建圖片服務(wù)器
這篇文章主要介紹了Linux平臺通過nginx和vsftpd構(gòu)建圖片服務(wù)器,需要的朋友可以參考下2017-05-05
nginx反向代理配置400,404,502等狀態(tài)的自定義頁面問題
這篇文章主要介紹了nginx反向代理配置400,404,502等狀態(tài)的自定義頁面問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01
Nginx 設(shè)置域名轉(zhuǎn)發(fā)到指定端口的實現(xiàn)方法
這篇文章主要介紹了Nginx 設(shè)置域名轉(zhuǎn)發(fā)到指定端口的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
在nginx中實現(xiàn)單位時間內(nèi)限制訪問頻率的教程
這篇文章主要介紹了在nginx中實現(xiàn)單位時間內(nèi)限制訪問頻率的教程,并非針對IP而是全局的訪問量限制,需要的朋友可以參考下2015-04-04

