У меня есть два контейнера внутри стека 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/default. 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-адрес, который, очевидно, изменяется во время обновления контейнера. Как заставить эту работу работать всегда?
Я мог бы создать проверки работоспособности, чтобы контейнер nginx создавался заново, однако мои журналы ошибок переполняются сообщениями.
Как оказалось, только версия plus имеет функции для разрешения IP-адреса восходящего потока через DNS-сервер .
Я закончил создание пустого файла php с именем healthcheck .php
, который используется Rancher для регулярных проверок работоспособности. Если контейнер php
отвечает HTTP-кодом, отличным от 200/300, контейнер nginx создается заново. Я также могу исключить этот файл из журнала доступа в конфигурации nginx.
Думаю, это должно быть сделано.