use*_*172 15 nginx reverse-proxy
我有一个 nginx 反向代理,它将请求从外部亚马逊 ELB 代理到内部 ELB。
我有 6 个处理请求的后端实例。启用站点的配置看起来像这样,但有不同的端口号和 proxy_pass。其他一切都相同:
server {
listen 3000;
location / {
proxy_pass http://internal-prod732r8-PrivateE-1GJ070M0745TT-348518554.eu-west-1.elb.amazonaws.com:3000;
include /etc/nginx/proxy.conf;
}
Run Code Online (Sandbox Code Playgroud)
}
大约每 24 小时一个配置停止工作。所有其他代理工作正常。如果我重新启动 nginx,所有配置都会再次运行。error.log 中没有任何内容,访问日志、系统日志或 dmesg 中没有任何奇怪的内容。
这是已知的吗?我的代理配置有问题吗?我可以查看其他任何日志吗?
use*_*172 26
这个问题的答案是 ELB 有时会更改 ip 地址,而 nginx 在启动期间会进行名称解析。
要解决此问题,您的 VPC 中始终有一个 0.2 的 DNS 服务器。因此,如果本地 ip CIDR 为 10.0.0.0/16,则 DNS 服务器位于 10.0.0.2。
将此添加到 nginx 配置中。
resolver 10.0.0.2 valid=10s;
Run Code Online (Sandbox Code Playgroud)
proxy_pass 也需要定义为一个变量,否则 nginx 只会解析一次。所以基于上面的配置,这是正确的配置:
server {
listen 3000;
location / {
resolver 10.0.0.2 valid=10s;
set $backend "http://internal-prod732r8-PrivateE-1GJ070M0745TT-348518554.eu-west-1.elb.amazonaws.com:3000"
proxy_pass $backend;
include /etc/nginx/proxy.conf;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9699 次 |
| 最近记录: |