我正在将 nginx 设置为反向代理。我之前只使用过 Apache,没有使用过虚拟主机。
我希望我的用户能够通过在地址栏中输入服务名称来访问各种内部网 Web 服务。例如,输入“timesheets”而不是“timesheets.intranet.local”。
在客户端机器上,如果我使用“wget”或浏览器访问站点的 FQDN(timesheets.intranet.local),那么一切都正常。
如果我使用“wget”或浏览器在客户端计算机上访问站点(时间表)的纯主机名,则会失败。
如果我在 nginx 服务器上本地使用“wget”,那么两者都可以正常工作。
我的网站配置如下:
server {
server_name timesheets timesheets.intranet.local;
location / {
proxy_pass http://127.0.0.1:8080;
}
listen [::]:443 ssl ipv6only=on;
listen 443 ssl;
ssl_certificate /root/timesheet.crt;
ssl_certificate_key /root/timesheet.key;
}
名称解析不是问题。客户端计算机上的“wget”正确解析了 IP 地址,但仍然无法检索页面。
答案1
配置反向代理时,不仅要注意代理配置,还要考虑其背后服务的配置。
代理不仅必须接受其虚拟主机中的名称,还必须发出后端所需的 Host 标头。在这种情况下,最简单的方法是将代理和后端都配置为接受简短的非限定主机名。
另一种方法可能是覆盖代理向后端发送的 Host 标头。然后,您只需要后端服务器即可。请参阅此答案https://stackoverflow.com/questions/14352690/change-host-header-in-nginx-reverse-proxy