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 2
首先, 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
coolloves 2022-09-28 13:51:40 +08:00
|
15
lambdaq 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
0312birdzhang 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 解析” |