NGINX 代理动态域名

NGINX 代理动态域名

做一个测试时,需要NG将访问代理到一个动态域名上去,这个动态域名,可能每个20几个小时,就会自动更换一下!

1、我们初始的配置,如:

server {
        listen       443 ssl;
        server_name  www.XXXXXX.com; #修改为您证书绑定的域名。
        ssl_certificate      cert/server.crt; #替换成您的证书文件的路径。
        ssl_certificate_key  cert/server.key; #替换成您的私钥文件的路径。
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_ciphers  HIGH:!aNULL:!MD5; #加密套件。
        ssl_prefer_server_ciphers  on;
        location / {
            proxy_pass https://XXXXXX.ddns.cn:9002/;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                   }  
}

刚才说到,动态域名天天换IP,而proxy_pass第一次解析后,就缓存结果了。所以。。。定期无法访问。

咋办?nginx -s reload 可以临时解决下,总不能天天手工重启吧?也太挫了。

解决方法,新的配置,使用resolver+proxy_pass变量解析的方式,当proxy_pass中包含变量时,会走resolver解析。

2、新配置如下:

server {
        listen       443 ssl;
        server_name  www.XXXXXX.com; #修改为您证书绑定的域名。
        ssl_certificate      cert/server.crt; #替换成您的证书文件的路径。
        ssl_certificate_key  cert/server.key; #替换成您的私钥文件的路径。
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_ciphers  HIGH:!aNULL:!MD5; #加密套件。
        ssl_prefer_server_ciphers  on;

        resolver 100.125.1.250 valid=60s;
        resolver_timeout 3s;

        location / {
                set $proxy_url "XXXXXX.ddns.cn";
                proxy_pass https://$proxy_url:9002;
                proxy_set_header Host $http_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                   }  
}

测试下,报错,报错,而且还是resolver经典的错误:

XXXXXX.ddns.cn could not be resolved (2: Server failure)

咋办。折腾一番之后,发现是ipv6配置问题。新配置如下:

注意resolver 最后的 ipv6=off;

server {
        listen       443 ssl;
        server_name  www.XXXXXX.com; #修改为您证书绑定的域名。
        ssl_certificate      cert/server.crt; #替换成您的证书文件的路径。
        ssl_certificate_key  cert/server.key; #替换成您的私钥文件的路径。
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_ciphers  HIGH:!aNULL:!MD5; #加密套件。
        ssl_prefer_server_ciphers  on;

        resolver 100.125.1.250 valid=60s ipv6=off;
        resolver_timeout 3s;

        location / {
                set $proxy_url "XXXXXX.ddns.cn";
                proxy_pass https://$proxy_url:9002;
                proxy_set_header Host $http_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                   }  
}

网友相关分析:
NGINX resolver 配置中的 “坑”
https://ms2008.github.io/2018/01/09/nginx-resolver/

Nginx缓存了DNS解析造成后端不通–代理
https://www.cnblogs.com/sanduzxcvbnm/p/12937809.html

注意事项:
proxy_pass配置改为包含变量后,最后面的/要去掉,否则转发会出问题。相对路径解析错误。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注