我经常使用Nginx作为所有内部托管应用程序的反向代理。
大多数情况下,这些应用程序都是通过基于 IP 的地址调用的,并且一切运行良好。
这次,我想代理托管在内部 Apache2 服务器上的 wordpress。
因此,我想使用内部 DNS 作为虚拟主机在 Apache 中。
问题是 Nginx 总是使用 IP 而不是内部 DNS 来调用 Wordpress。
所以我没有在 Apache 上定位正确的 VirtualHost。
我怎么能够强制 Nginx 使用 DNS将其重写为 IP?
Nginx vhost 配置
server{
server_name http://my-external-dns.com;
location / {
proxy_pass http://my-internal-dns.lan/;
proxy_set_header X-Forwarded-Host $host;
proxy_read_timeout 10;
proxy_connect_timeout 10;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Host $host;
}
}
nginx 上的具体代理配置
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
client_header_buffer_size 64k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 16k;
proxy_buffers 32 16k;
proxy_busy_buffers_size 64k;
Nginx访问日志
[01/Jun/2020:10:14:26 +0200] 109.190.219.189 (-) "my-external-dns.com" "GET / HTTP/1.1" 200 2 => 192.168.10.10:80
您可以看到它确实使用 IP 192.168.10.10,这是 my-internal-dns.lan 主机的 IP。
它应该是
[01/Jun/2020:10:14:26 +0200] 109.190.219.189 (-) "my-external-dns.com" "GET / HTTP/1.1" 200 2 => my-internal-dns:80
在 Apache 方面,我有这个配置。
我认为问题不在这里,而是在 Nginx 配置上
# My Specific Host
<VirtualHost *:80>
ServerName my-internal-dns.lan
DocumentRoot /var/www/prod/mydir/
<Directory /var/www/prod/mydir>
Options All
AllowOverride All
</Directory>
</VirtualHost>
# My Default Host
<VirtualHost *:80>
DocumentRoot /var/www/
<Directory /var/www>
AllowOverride All
Options All
</Directory>
</VirtualHost>
如前所述,Nginx 跳转到默认主机,而不是特定主机。
问候