nginx 反代 upstream 不支持域名只能支持 ip?

2022-09-28 10:11:31 +08:00
 kisshere
upstream backend {
    server 127.0.0.1;
    keepalive 8;
}

server {
    listen 80;

    location / {
        proxy_pass http://backend;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
    }
}

如果把 www.abc.com 在 hosts 文件中解析为 127.0.0.1 ,然后

upstream backend {
    server www.abc.com;
    keepalive 8;
}

nginx 反代就失败了,nginx 这么低级?

2902 次点击
所在节点    程序员
24 条回复
vopsoft
2022-09-28 10:14:46 +08:00
不用 upstream 直接 proxy_pass http://www.abc.com;就行哈
kisshere
2022-09-28 10:28:48 +08:00
@vopsoft 我想过这样,但这样就不支持 keepalive 了
eason1874
2022-09-28 10:36:28 +08:00
nginx 解析有缓存的,可能是你启动 nginx 后才改的 hosts 缓存没更新?重启 nginx 试试

在日志里加 $upstream_addr 这个变量可以记录具体的反代 IP 地址
julyclyde
2022-09-28 11:14:25 +08:00
需要设置 resolver
quanjw
2022-09-28 11:20:28 +08:00
支持的,但是我家宽的 IP 经常变,会失效,需要重启 nginx 才行。个人经验
chengjiezhou1024
2022-09-28 11:29:15 +08:00
首先, nginx 不会读取 /etc/hosts 进行 dns 解析, 仅会使用 resolver 指定的 dns server 进行域名解析.
第二, 对于直接使用域名的方式: ‘proxy_pass http://www.abc.com;’ 只会在启动时执行一次 dns 解析, 后面不再进行解析.

对于第二个问题, 可以使用变量的方式解决:
set $backend www.abc.com;
proxy_pass http://$backend;
anyinuo0413
2022-09-28 11:31:15 +08:00
@chengjiezhou1024 问一下 您这里使用变量的方式解决 相当于 会自动更新域名 DDNS   IP 嘛
PMR
2022-09-28 11:35:55 +08:00
@quanjw
@anyinuo0413
nginx.org 都是启动时做 dns 解析 后续不会在重新解析

nginx plus 就有定时解析功能
chengjiezhou1024
2022-09-28 11:49:36 +08:00
chengjiezhou1024
2022-09-28 11:53:19 +08:00
@anyinuo0413
对的, 你可以测试下, 抓 dns 解析请求看下.
anyinuo0413
2022-09-28 12:09:35 +08:00
@chengjiezhou1024 好的,感谢 晚上回家试一下 我现在写了个脚本每分钟检测一次 ddns 是否更新 如果更新了就 reload 一下 ng
julyclyde
2022-09-28 12:57:14 +08:00
@anyinuo0413 其实你现在这个做法可能更好
毕竟家庭接入 IP 变化率比集群里边 pod 变化率低太多了
starrys
2022-09-28 13:10:24 +08:00
@quanjw
@anyinuo0413
个人或家庭使用可以考虑换成 caddy ,就没这问题。
coolloves
2022-09-28 13:51:40 +08:00
@kisshere
upstream www.abc.com {
server 127.0.0.1;
keepalive 8;
}
lambdaq
2022-09-28 14:03:29 +08:00
@chengjiezhou1024 相当准确。
kisshere
2022-09-28 15:48:16 +08:00
@chengjiezhou1024

"nginx 不会读取 /etc/hosts 进行 dns 解析",你没做过试验就确定这句话???我在前端服务器 /etc/hosts 文件里乱打了一个网址 1.2.3.4 www.asdfasdffasdf.com 。 然后在 upstream 服务器( 1.2.3.4 )的一个网站新增绑定了这个域名 www.asdfasdffasdf.com ,反代成功了!
0312birdzhang
2022-09-28 18:11:06 +08:00
nginx 的 http 部分有个 resolver ip; 的参数
julyclyde
2022-09-29 08:44:21 +08:00
@kisshere 你刚开始提问的时候说这种设置会失败啊?
kisshere
2022-09-29 09:49:53 +08:00
@julyclyde 我是直接 proxy_pass http://www.asdfasdffasdf.com; 不是像帖子中那样把 upstream 单独放在一边
julyclyde
2022-09-29 10:30:49 +08:00
@kisshere 直接 proxy_pass 到域名,和到 upstream 、upstream 里包含域名,是两种不同的情况

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/883466

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX