如何设置 apache 来从 nginx 捕获 proxy_pass?

如何设置 apache 来从 nginx 捕获 proxy_pass?

我有一个工作的 apache vhost,例如

<VirtualHost localhost:10006>
    DocumentRoot "/home/pate/***/git/kohana_site/public/site/"
</VirtualHost>

<VirtualHost *:10006>
    ServerName api.*
    DocumentRoot "/home/pate/***/git/kohana_site/public/api/"
    LogLevel debug
</VirtualHost>

如果我指向 localhost:10006,我就会得到我的网站和 api.localhost:10006,我就会得到我的 api。

然后我在其上设置了 haproxy,它在端口 10010 上运行,并且 localhost:10010 和 api.localhost:10010 都具有预期的行为。

现在我已使用此配置在端口 80 上设置了 nginx。

server {

    listen  10000;
    server_name api.*;

    location / {
        proxy_pass http://legacy_server;
    }

}

server {
    listen                  10000 default;
    server_name             _;

    location /nginx_status {
        stub_status  on;
        access_log   off;
    }

    # images are accessed via the CDN over HTTP (not https)

    location /n/image {
        proxy_pass http://image_caching_server;
    }

    location / {
        return 301 https://$host:10014$request_uri;
    }
}

upstream legacy_server {

    server localhost:10010 fail_timeout=0;

}

问题是 apache 无法正确识别 vhost,并将 api.localhost 重定向到网站而不是 api。

我尝试使用 set_proxy_header Host $host 但似乎没有任何反应。

答案1

您可以尝试将这些标签添加到位置块吗:

proxy_set_header 主机 $host;

proxy_set_header X-真实IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

重启 nginx 并尝试是否有效

相关内容