Nginx 将请求转发到错误的 Apache/Plesk 虚拟主机

Nginx 将请求转发到错误的 Apache/Plesk 虚拟主机
server {
    listen       81;
    server_name  example.com localhost direct1.example.com www.example.com admin.example.com forum.example.com;

    location /media/ {
        root /var/www/vhosts/example.com/html;
    }

    error_page  404              /404.html;

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location / {
        proxy_set_header Host $host;
        proxy_set_header Connection Close;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        root /var/www/vhosts/example.com/html;
        proxy_pass   http://127.0.0.1:80;
    }
}

这是我在 nginx/defaults.conf 中的内容。服务器当前正在使用 Apache 和 Plesk,后者似乎可以自行管理虚拟主机(不知何故)。

任何请求都可以example.com:81/media/image.jpg正常工作,但example.com:81使用了错误的虚拟主机。

我不能 100% 确定 Plesk 的 vhost 情况如何运作,但它已安装并且默认 vhost 是server1.example.com,而且无论我如何摆弄代理设置,我都无法让它使用 vhost example.com

编辑;在 location 下的 root 行中添加了 a 。它缺失了,我尝试添加它,但仍然没有成功。

更新已添加ServerName "example.com"/etc/httpd/conf.d/zz010_psa_httpd.conf。现在在 apache-status 下,它将 vhost 列为 example.com,但仍然“使用”server1.example.com。嘘。

它还似乎使用了主 apache httpd.conf 中的 DocumentRoot,而不是使用正确的虚拟主机。

答案1

来自nginx 文档proxy_pass

请注意,HTTP Host 标头未被转发,而是基于 proxy_pass 语句设置的。

这意味着您的proxy_set_header Host $host;行无效。传递给 Apache 的实际 Host 标头将Host: 127.0.0.1按照proxy_pass语句进行。

我建议location /按照您描述的方式代理此部分:

location / {
    proxy_set_header Connection Close;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://example.com:80;
}

相关内容