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;
}