当前位置: 首页 > 知识库问答 >
问题:

使用IP和Nginx作为反向代理出错

胡元忠
2023-03-14

我将Nginx配置为简单反向代理。

我只是使用基本设置

location / {
    proxy_pass foo.dnsalias.net;
    proxy_pass_header Set-Cookie;
    proxy_pass_header P3P;
}

问题是,经过一段时间(几天)后,nginx背后的站点变得不可访问。Indead nginx尝试调用一个坏的ip(nginx后面的站点在我家盒子后面,我正在使用dyn dns,因为我的ip不固定)。这个dyn dns总是有效的(我可以直接调用我的站点),但由于不清楚的原因,Nginx被卡住了。。

如前所述,nginx只需在一段时间后给我504网关超时。当我的ip在家中更改时,似乎出现了错误。以下是错误日志的示例:

[error] ... upstream timed out (110: Connection timed out) while connecting to upstream, client: my.current.ip, server: myreverse.server.com, request: "GET /favicon.ico HTTP/1.1", upstream: "http://my.old
.home.ip", host: "myreverse.server.com"

那么您知道为什么nginx使用ip而不是DN吗?

共有2个答案

鞠自明
2023-03-14

也许看看这个http://forum.nginx.org/read.php?2,215830,215832#msg-215832

resolver 127.0.0.1;
set $backend "foo.example.com";
proxy_pass http://$backend;

In such setup ip address of "foo.example.com" will be looked up
dynamically and result will be cached for 5 minutes.
宁侯林
2023-03-14

如果proxy\u pass值不包含变量,nginx将在加载配置时将域名解析为IPs,并缓存它们,直到您重新启动/重新加载配置。从性能的角度来看,这是可以理解的。

但是,在动态DNS记录更改的情况下,可能不需要这样做。因此,根据您是否拥有许可证,有两个选项可用。

在这种情况下,使用上游块并指定需要使用特定解析器定期解析的域名。可以使用valid=time参数覆盖记录TTL。server指令的resolve参数将强制定期解析DN。

http {    

    resolver X.X.X.X valid=5s;

    upstream dynamic {
        server foo.dnsalias.net resolve;
    }

    server {

        server_name www.example.com;

        location / {
            proxy_pass http://dynamic;
            ...
        }

    }

}

此功能是在Nginx 1.5.12中添加的。

在这种情况下,您还需要一个自定义的解析器,就像前面的解决方案一样。但要解决不可用的上游解决方案,您需要在proxy\u pass指令中使用一个变量。这样,nginx也将使用解析器,以满足valid参数指定的缓存时间。例如,您可以将域名用作变量:

http {  

    resolver X.X.X.X valid=5s;

    server {

        server_name www.example.com;
        set $dn "foo.dnsalias.net"; 

        location / {
            proxy_pass http://$dn;
            ...
        }

    }

}

然后,您可能需要添加一个proxy_redirect指令来处理重定向。

 类似资料:
  • 使用nginx作为前端的反向代理将请求传递给应用是可行的。然而,只有nginx 1.4版本以上才支持WebSocket协议。下面是nginx代理HTTP和WebSocket请求的一个最基本的配置: server { listen 80; server_name _; location / { include proxy_params; pro

  • Nginx的配置文件如下: server { listen 80; #此处应该配置你的域名: server_name doc.iminho.me; charset utf-8; #此处配置你的访问日志,请手动创建该目录: access_log /var/log/nginx/webhook.iminho.me/access.log

  • 主要内容:1. 代理服务器介绍,2. 将请求传递给代理的服务器,3. 传递请求标头,4. 配置缓冲区,5. 选择传出IP地址本文介绍代理服务器的基本配置。 您将学习如何通过不同协议将NGINX请求传递给代理的服务器,修改发送到代理服务器的客户端请求标头,以及配置来自代理服务器的响应缓冲。 代理服务器的基本配置目录 代理服务器介绍 将请求传递给代理的服务器 传递请求标头 配置缓冲区 选择传出IP地址 1. 代理服务器介绍 代理通常用于在多个服务器之间分配负载,无缝地显示来自不同网站的内容,或者通过

  • Nginx 是一个高性能的 HTTP 和反向代理服务器,代码完全用 C 实现,基于它的高性能以及诸多优点,我们可以把它设置为 hyperf 的前置服务器,实现负载均衡或 HTTPS 前置服务器等。 配置 Http 代理 # 至少需要一个 Hyperf 节点,多个配置多行 upstream hyperf { # Hyperf HTTP Server 的 IP 及 端口 server

  • null 我倾向于认为它是第一个,但在这种情况下,nginx不会是应用程序的入口...(这是个问题吗?)

  • 我正在尝试测试Liferay的最新版本(Liferay 7.0-ga4),并将其安装在反向代理(nginx)后面。我使用docker和docker compose进行测试,并创建一个虚拟域。 如果我直接访问Liferay的url,并且没有配置反向代理,那么Liferay可以正常工作。 此外,如果我使用根位置,我成功地在nginx服务器后面安装Liferay: 其中,proxy_pass部分中的是在