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,似乎自行pipe理虚拟主机(以某种方式)。
对example.com:81/media/image.jpg任何请求都能正常工作,但example.com:81使用的是不正确的虚拟主机。
我并不是100%确定虚拟主机的情况如何与Plesk协同工作,但已经安装,默认虚拟主机是server1.example.com ,不pipe有多less代理设置,我都搞不清楚使用example.com虚拟主机。
编辑添加了一个; 到位置下的根线。 这是失踪,我试图增加它,但仍然没有运气。
更新将ServerName "example.com"添加到/etc/httpd/conf.d/zz010_psa_httpd.conf 。 现在在Apache状态下,它将虚拟主机列为example.com,但仍使用server1.example.com。 嘘。
它似乎也使用Apache的httpd.conf中的DocumentRoot,而不是使用正确的虚拟主机。
从proxy_pass上的nginx文档 :
请注意,HTTP主机头不会被转发,但会根据proxy_pass语句进行设置。
这意味着你的proxy_set_header Host $host; 行不起作用。 根据proxy_pass语句,传递给Apache的实际Host头将是Host: 127.0.0.1 。
我推荐这个location /部分来代理你所描述的:
location / { proxy_set_header Connection Close; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://example.com:80; }