Nginx 反向代理在升级后失去与 PHP 容器的连接

Nginx 反向代理在升级后失去与 PHP 容器的连接

我有两个容器Rancher堆栈。一个是php-fpm为应用程序提供服务的容器。第二个是充当反向代理的 Nginx。

nginx 已安装以下配置:

/etc/nginx/nginx.conf

user nginx;
worker_processes 4;
pid /var/run/nginx.pid;

events {
  worker_connections  2048;
}

http {
  server_tokens off;
  sendfile on;
  tcp_nopush on;
  tcp_nodelay on;
  keepalive_timeout 15;
  types_hash_max_size 2048;
  include /etc/nginx/mime.types;
  default_type application/octet-stream;
  include /etc/nginx/conf.d/*.conf;
  open_file_cache max=100;
}

/etc/nginx/conf.d/默认.conf

server {
    ...
    location ~ ^/(app|app_dev|config)\.php(/|$) {
        fastcgi_param HTTP_PROXY "";
        fastcgi_pass php:9000;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param HTTPS off;
    }
}

一切运行正常,直到php容器升级。从那一刻起,反向代理返回502 Bad Gateway。错误日志中记录了以下消息:

*5 connect() failed (113: Host is unreachable) while connecting to upstream,
client: 10.42.154.177, server: [hidden url],
request: "GET / HTTP/1.1", upstream: "fastcgi://10.42.241.63:9000",
host: "[hidden-url]"

因此,nginx 不使用主机名,而是直接使用 IP,而 IP 在容器升级期间显然会发生变化。如何才能让它一直有效呢?

我可以创建健康检查,以便重新创建 nginx 容器,但是我的错误日志中会充斥着消息。

答案1

事实证明,只有 plus 版本才具有以下功能:通过 DNS 服务器解析上游的 IP

我最终创建了一个名为的空白 php 文件,healthcheck.phpRancher 会使用它来执行常规健康检查。如果容器php响应非 200/300 http 代码,则 nginx 容器会重新创建。我还可以从 nginx 配置中的访问日志中排除该文件。

我想一定是这样。

相关内容