最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

nginx反向代理proxy_pass遇到的死循環(huán)問題

 更新時間:2024年01月26日 11:59:31   作者:盛桃云  
這篇文章主要介紹了nginx反向代理proxy_pass遇到的死循環(huán)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

nginx反向代理proxy_pass遇到的死循環(huán)

為了解決接口調(diào)用的跨域問題,跨域使用nginx的反向代理來解決

最簡單的代碼示意如下:

server{
    server www.demo.com;
 
    location /api/ {
        proxy_pass http://hello.test.com/api/;
    }
}

但是運行nginx,訪問代理后的接口,發(fā)現(xiàn)響應特別慢,過一段時間后出現(xiàn) 413 Request Entity Too Large 這樣的提示。

然后查看nginx的日志,發(fā)現(xiàn)日志中的請求頭內(nèi)容出現(xiàn)了大量重復的ip地址,似乎是請求出現(xiàn)了無限死循環(huán),然后就出現(xiàn)了請求內(nèi)容過大的提示。

那定位了大概的問題,搜索關鍵字“nginx proxy_pass 循環(huán)”

找到了問題的原因和解決辦法:

server{
    server www.demo.com;
 
    location /api/ {
        proxy_set_header Host "hello.test.com";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://hello.test.com/api/;
    }
}

就是需要修改請求頭,不要讓www.demo.com帶到proxy_pass的請求頭中,否則會再次調(diào)用反向代理,導致代理出現(xiàn)死循環(huán)。

直接將proxy_set_header 的Host寫死就解決了問題。

nginx反向代理基本設置的21個指令

1,proxy_pass

設置被代理服務器的地址,可以主機名,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,所以轉向的地址為 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,所以轉向的地址為 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響應時,可以去掉相關的響應頭信息:

proxy_hide_header Set-Cookie;

3,proxy_pass_header

默認情況下,Nginx服務器在發(fā)送響應報頭時,報文頭中不包含"Date 、Server、X-Accel"等來自代理服務器的頭域信息。proxy_pass_header可以調(diào)置這些頭域信息以被發(fā)送

語法為

proxy_pass_header field;

field 為需要發(fā)送的頭域 

4,proxy_pass_request_body

配置是否將客戶端請求的請求體發(fā)送給代理服務器。

語法為

proxy_pass_request_body on | off;

默認為開啟狀態(tài)(on) 

5,proxy_pass_request_headers

配置是否將客戶端請求的請求頭發(fā)送給代理服務器。

語法為

proxy_pass_request_headers on | off;

默認為開啟狀態(tài)(on) 

6,proxy_set_header

可以更改nginx服務接收到的客戶端請求的請求頭信息,然后將新頭發(fā)送給被代理服務器。

語法為

proxy_set_header field value;

默認值:

proxy_set_header Host $proxy_host;
proxy_set_header Connection close;

7,proxy_set_body

可以更改nginx服務接收到的客戶端請求的請求體信息,然后將新體發(fā)送給被代理服務器。

語法為

proxy_set_body value;

8,proxy_bind

強制將與代理主機的連接綁定到指定IP地址。

語法為

proxy_bind address; 其中 address為IP地址

9,proxy_connect_timeout

配置Nginx服務器與后端被代理服務器嘗試建立連接的超時時間,

語法為

proxy_connect_timeout time; 其中time為設置的超時時間,默認為 60s;

10,proxy_read_timeout

配置Nginx服務器向后端被代理服務器(組)發(fā)出read請求后,等待響應的超時時間,

語法為

proxy_read_timeout time; 其中time為設置的超時時間,默認為 60s;

11,proxy_send_timeout

配置Nginx服務器向后端被代理服務器(組)發(fā)出write請求后,等待的響應超時時間,

語法為

proxy_send_timeout time; 其中time為設置的超時時間,默認為 60s;

12,proxy_http_version

設置用于Nginx服務器提供代理服務的HTTP協(xié)議版本,

語法為

proxy_http_version 1.0 | 1.1;

默認為 1.0版本。1.1版本支持upsteam服務器組設置中的keepalive指令 

13,proxy_method

設置Nginx服務器請求被代理服務器時使用的請求方法,一般為 POST 或者 GET ,設置了該值,客戶端的請求方法將被忽略。

語法為

proxy_method POST | GET;

14,proxy_ignore_client_abort

用于設置在客戶端中斷網(wǎng)絡請求時,Nginx服務器是否中斷對被代理服務器的請求,

語法為

proxy_ignore_client_abort on | off;

默認為 off ,客戶端斷了,nginx對被代理服務器也斷 

15,proxy_ignore_headers

用于設置一些HTTP響應頭中的頭域,Nginx服務器接收到被代理服務器的響應數(shù)據(jù)后不會處理被設置的頭域

語法為

proxy_ignore_headers field....

field為要設置的HTTP響應頭的頭域,例如 "X-Accel-Redirect 、X-Accel-Expires 、EXpires 、Cache-Control 、Set-Cookie" 

16,proxy_redirect

假設前端url是example.com。后端server域名是csdn123.com,那么后端server在返回refresh或location的時候,host為csdn123.com,顯然這個信息直接返回給客戶端是不行的,需要nginx做轉換,這時可以設置:

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)是開啟還是關閉。

開啟時:被代理服務器返回狀態(tài)碼為 400或400以上,Nginx服務器使用自己的 error_page。

關閉時:Nginx直接將代理服務器返回的狀態(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服務器申請存放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 后端服務器組,如果組內(nèi)有異常情況,將請求順次交給下一個組內(nèi)服務器處理

語法為

proxy_next_upstream status...

可以是一個也可以是多個

status = error,timeout,invalid_header,http_500 502 503 504 404,off

21,proxy_ssl_session_reuse

該指令用于配置是否使用基于SSL安全協(xié)議的會話連接(htts://)被代理服務器,

語法為

proxy_ssl_session_reuse on | off;

默認為開啟 on,如果在錯誤日志中發(fā)現(xiàn)“SSL3_GET_FINISHED:digest check fiailed”的情況,關閉該指令即可

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。 

相關文章

最新評論

长垣县| 罗平县| 濮阳市| 奈曼旗| 泌阳县| 德格县| 交口县| 博湖县| 霍城县| 融水| 南部县| 弥渡县| 偃师市| 鄂尔多斯市| 怀安县| 龙泉市| 桃园县| 游戏| 临沭县| 千阳县| 永福县| 溧水县| 石嘴山市| 两当县| 福清市| 中宁县| 四平市| 礼泉县| 泰来县| 米泉市| 行唐县| 安吉县| 富宁县| 水富县| 安多县| 遵义县| 永宁县| 台湾省| 彰化县| 彭阳县| 合江县|