
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 这么低级?
1 vopsoft 2022-09-28 10:14:46 +08:00 不用 upstream 直接 proxy_pass http://www.abc.com;就行哈 |
3 eason1874 2022-09-28 10:36:28 +08:00 nginx 解析有缓存的,可能是你启动 nginx 后才改的 hosts 缓存没更新?重启 nginx 试试 在日志里加 $upstream_addr 这个变量可以记录具体的反代 IP 地址 |
4 julyclyde 2022-09-28 11:14:25 +08:00 需要设置 resolver |
5 quanjw 2022-09-28 11:20:28 +08:00 支持的,但是我家宽的 IP 经常变,会失效,需要重启 nginx 才行。个人经验 |
6 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; |
7 anyinuo0413 2022-09-28 11:31:15 +08:00 @chengjiezhou1024 问一下 您这里使用变量的方式解决 相当于 会自动更新域名 DDNS IP 嘛 |
8 PMR 2022-09-28 11:35:55 +08:00 via Android |
9 chengjiezhou1024 2022-09-28 11:49:36 +08:00 |
10 chengjiezhou1024 2022-09-28 11:53:19 +08:00 @anyinuo0413 对的, 你可以测试下, 抓 dns 解析请求看下. |
11 anyinuo0413 2022-09-28 12:09:35 +08:00 @chengjiezhou1024 好的,感谢 晚上回家试一下 我现在写了个脚本每分钟检测一次 ddns 是否更新 如果更新了就 reload 一下 ng |
12 julyclyde 2022-09-28 12:57:14 +08:00 @anyinuo0413 其实你现在这个做法可能更好 毕竟家庭接入 IP 变化率比集群里边 pod 变化率低太多了 |
13 starrys 2022-09-28 13:10:24 +08:00 via Android |
14 sparkssssssss 2022-09-28 13:51:40 +08:00 |
15 tf2 2022-09-28 14:03:29 +08:00 @chengjiezhou1024 相当准确。 |
16 kisshere OP @chengjiezhou1024 "nginx 不会读取 /etc/hosts 进行 dns 解析",你没做过试验就确定这句话???我在前端服务器 /etc/hosts 文件里乱打了一个网址 1.2.3.4 www.asdfasdffasdf.com 。 然后在 upstream 服务器( 1.2.3.4 )的一个网站新增绑定了这个域名 www.asdfasdffasdf.com ,反代成功了! |
17 1daydayde 2022-09-28 18:11:06 +08:00 nginx 的 http 部分有个 resolver ip; 的参数 |
19 kisshere OP @julyclyde 我是直接 proxy_pass http://www.asdfasdffasdf.com; 不是像帖子中那样把 upstream 单独放在一边 |
20 julyclyde 2022-09-29 10:30:49 +08:00 @kisshere 直接 proxy_pass 到域名,和到 upstream 、upstream 里包含域名,是两种不同的情况 |
21 ntuwang 2022-09-29 13:43:28 +08:00 用 jdomain 啊,可以支持域名 |
22 chengjiezhou1024 2022-09-29 14:16:38 +08:00 @kisshere 你可以尝试一下, nginx 启动后修改 hosts 文件更改域名对应的地址, 改动是否会生效. 你可以测试下如果一个域名对应多个 IP 地址, 能不能将流量转发到每个 IP 地址上. set $backend www.abc.com; proxy_pass http://$backend; 这种方式能解决上面两个问题. |
23 kisshere OP @chengjiezhou1024 但至少"nginx 不会读取 /etc/hosts 进行 dns 解析"这句话错误了吧 |
24 chengjiezhou1024 2022-09-30 14:57:30 +08:00 @kisshere 应该修改为“运行阶段不会读取 /etc/hosts 进行 dns 解析” |