做一个测试时,需要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配置改为包含变量后,最后面的/要去掉,否则转发会出问题。相对路径解析错误。