我有一个 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 中没有任何奇怪的内容。
这是已知的吗?我的代理配置有问题吗?我可以查看其他任何日志吗?
我们今天在 AWS 环境中遇到了 nginx 解析器的问题。根据 nginx 日志文件,在 DNS 记录更改后,nginx 没有解析到正确的服务器。
DNS最初解析:
webservers.ourservers.local A 10.0.0.5
webservers.ourservers.local A 10.0.1.8
Run Code Online (Sandbox Code Playgroud)
...但是一旦这些 IP 地址之一发生更改,nginx 就没有得到更改 - 并不断尝试访问过时的 IP 地址 - 远长于 60 秒 ttl。
根据 nginx.org/en/docs/http/ngx_http_core_module.html#resolver,nginx 解析器仅缓存 ttl 的答案 - 或者,在我们的例子中,为配置的时间。
我的同事将resolver
线路从位置块移动到服务器块,但它没有帮助。我们需要重新启动 nginx 以强制它解析到新的 ip。
nginx配置:
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$scheme - $http_x_client_ip - $remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log;
server {
listen 8080 default;
set $OUR_ROOT …
Run Code Online (Sandbox Code Playgroud) domain-name-system nginx reverse-proxy load-balancing amazon-web-services