我正在将 nginx 设置为反向代理。我以前只使用过 Apache,并且没有使用虚拟主机。
我希望我的用户能够通过在地址栏中输入服务名称来访问各种 Intranet 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 地址,但仍无法检索页面。
配置反向代理时,不仅要注意代理配置,还要考虑其背后的服务配置。
代理不仅必须在其虚拟主机中接受名称,而且还必须发出一个主机头,该头应发送给后端。在这种情况下,最简单的方法是将代理和后端都配置为接受短的非限定主机名。
另一种方法可能是覆盖哪个 Host 标头代理正在发送到后端。然后你只需要你的后端服务器只服务器那个主机名。看到这个答案https://stackoverflow.com/questions/14352690/change-host-header-in-nginx-reverse-proxy