У меня есть эта конфигурация docker-compose (это часть моего сервиса nginx)
nginx-service:
image: nginx:latest
container_name: nginx-service
command: /bin/bash -c "exec nginx -g 'daemon off;'"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/sites-enabled:/etc/nginx/sites-enabled
restart: always
networks:
system-network:
aliases:
- nginx-service.docker
extra_hosts:
- serverIp:${CURRENT_SERVER_IP}
ports:
- 80:80
- 443:443
- 8081:8081
На этом сервере есть докер-контейнер, который находится вне сети компоновки и создается автоматически при необходимости.
Я хочу, чтобы текущий ip сервера был в файле .env, и для этого я использую extra_hosts и этот конфиг nginx для прокси:
server {
listen 0.0.0.0:80;
server_name first.example.com;
location / {
proxy_pass http://serverIp:8082/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
И это действительно работает! Потому что этот контейнер всегда работает и имеет порт 8082.
Но этот конфиг не работает, и я не могу это исправить. Можете ли вы сказать мне, как я могу это исправить.
server {
listen 0.0.0.0:80;
server_name second.example.com;
client_max_body_size 1024m;
location / {
set $status_proxy 0;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_http_version 1.1;
# proxy_set_header Connection "";
proxy_connect_timeout 960s;
proxy_send_timeout 960s;
proxy_read_timeout 960s;
send_timeout 960s;
if ($cookie_testingPort ~* "(60[\d]{3})") {
proxy_pass http://serverIp:$cookie_testingPort;
set $status_proxy 1;
}
if ($status_proxy = 0) {
return 400;
}
}
}
Когда я перенаправлен с second.example.com - nginx возвращает мне «502 Bad Gateway», хотя я вижу в cookie-тестировании порта с правильным портом для контейнера Docker, и контейнер действительно находится на сервере с CURRENT_SERVER_IP, который указан в файле hosts внутри контейнер с NGINX