Nginx 转发导致死循环

Nginx 转发导致死循环

考虑以下 nginx 配置:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
server {
    listen 80;
    server_name wiki.kpromise.top;

    location ~ ^/(api|druid) {
        proxy_pass http://api.kpromise.top;
        proxy_connect_timeout 10s;
        proxy_read_timeout 10s;
        proxy_send_timeout 10s;
        gzip off;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header x-wiz-real-ip $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

假设 api.kpromise.top 和 wiki.kpromise.top 解析到同一个 ip,那么请求:wiki.kpromise.top/api/xx 时,虽然反代到了 api.kpromise.top,但由于又设置了 proxy_set_header Host $http_host; 这里 http_host 指的是:wiki.kpromise.top,那么请求又会继续转发,从而进入死锁。想要解决该问题也简单,将 proxy_set_header Host $http_host; 改为:proxy_set_header Host api.kpromise.top;

最后更新于