我有一个使用 proxy_pass 指令指向内部服务器的 Nginx 代理服务器。
当我尝试从网络内部使用代理时,一切都很好,但是从网络外部连接到代理时,我得到了上游服务器,但是单击链接会出现浏览器超时消息。(在 Chrome 中,[内部 IP] 响应时间过长)
这对我来说毫无意义。Nginx 是否在告诉我的浏览器重定向到这个内部 IP?它应该将单击链接的请求发送到上游服务器并将响应转发给客户端,而不是重置连接。
谢谢。
答案1
如果您使用 proxy_pass,则 Nginx 是中间人。但是,听起来它可能没有正确地重写来自内部 Web 服务器的回复。那么,也许您的配置中缺少第二行?
proxy_pass http://internal-server/;
proxy_redirect http://internal-server/ http://$server_name/;
将 internal-server 替换为服务器的内部主机名或 IP 地址。$server_name 是一个变量,它使用您配置的 server_name。它可能会按原样工作。
如果您还有其他配置问题,请询问。
根据您的描述,另一种可能性是您的上游 Web 服务器可能配置为在正文内容中使用其自己的内部主机名或 IP 地址,而不是外部分配的主机名。上面的重定向行只会更改来自 Web 服务器的回复中的 http 标头信息,而不会更改来自服务器的回复网页中的内容。因此,您需要小心 Web 服务器在网页正文中发出的链接。某些 Web 内容系统比其他系统更能处理这些问题,因此告诉我们您使用的 Web 服务器将有助于我们了解如何帮助您。例如,Wordpress 对用于访问服务器的 URL 有一个简单的设置。其他系统可能会更复杂,也可能不会更复杂。
我假设您在网络内部和外部使用完全相同的 URL?
无论是哪种情况,当您在网络内部时,您的 Web 服务器本身都会导致您绕过反向代理服务器,因为您可以直接访问内部服务器。而在外部时,您显然无法直接访问。