我有两个容器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.php
Rancher 会使用它来执行常规健康检查。如果容器php
响应非 200/300 http 代码,则 nginx 容器会重新创建。我还可以从 nginx 配置中的访问日志中排除该文件。
我想一定是这样。