Я пытаюсь настроить обратный прокси с помощью nginx. Дело в том, что я хочу перенаправить на страницу входа umami при переходе на localhost. Но я получаю 502 bad gateway. Я не уверен, что правильно настроил nginx. Вот мой docker-compose.yml выглядит так:
version: '2'
services:
nginx-proxy:
image: nginx:latest
container_name: nginx-proxy
ports:
- "80:80"
- "443:443"
volumes:
- ./my_proxy.conf:/etc/nginx/conf.d/default.conf:ro
umami:
image: ghcr.io/mikecao/umami:postgresql-latest
ports:
- "3000:3000"
environment:
DATABASE_URL: postgresql://umami:umami@db:5432/umami
DATABASE_TYPE: postgresql
HASH_SALT: 1234567890
depends_on:
- db
restart: always
networks:
- nginx-net
db:
image: postgres:12-alpine
environment:
POSTGRES_DB: umami
POSTGRES_USER: umami
POSTGRES_PASSWORD: umami
volumes:
- ./sql/schema.postgresql.sql:/docker-entrypoint-initdb.d/schema.postgresql.sql:ro
- umami-db-data:/var/lib/postgresql/data
restart: always
networks:
- nginx-net
volumes:
umami-db-data:
conf:
vhost:
html:
dhparam:
certs:
networks:
nginx-net:
external:
name: nginx-net
Вот my_proxy.conf, который я монтирую поверх default.conf
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
proxy_pass http://localhost:3000/login;
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_set_header X-Forwarded-Proto $scheme;
}
}
Вот ссылка на папку SQL, которую я использовал. https://drive.google.com/file/d/1lvyLUve0SGpT1tXlsVoFwPmbmb75n8ER/view?usp=sharing
Вот скриншот файла журнала.
2022/12/13 17:58:09 [notice] 1#1: using the "epoll" event method
2022/12/13 17:58:09 [notice] 1#1: nginx/1.23.2
2022/12/13 17:58:09 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6)
2022/12/13 17:58:09 [notice] 1#1: OS: Linux 5.15.0-56-generic
2022/12/13 17:58:09 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1024:524288
2022/12/13 17:58:09 [notice] 1#1: start worker processes
2022/12/13 17:58:09 [notice] 1#1: start worker process 21
2022/12/13 17:58:09 [notice] 1#1: start worker process 22
2022/12/13 17:58:09 [notice] 1#1: start worker process 23
2022/12/13 17:58:09 [notice] 1#1: start worker process 24
2022/12/13 17:58:09 [notice] 1#1: start worker process 25
2022/12/13 17:58:09 [notice] 1#1: start worker process 26
2022/12/13 17:58:09 [notice] 1#1: start worker process 27
2022/12/13 17:58:09 [notice] 1#1: start worker process 28
2022/12/13 17:58:10 [error] 21#21: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 172.20.0.1, server: localhost, request: "GET /nginx_status HTTP/1.1", upstream: "http://127.0.0.1:3000/loginnginx_status", host: "172.18.0.1"
2022/12/13 17:58:10 [warn] 21#21: *1 upstream server temporarily disabled while connecting to upstream, client: 172.20.0.1, server: localhost, request: "GET /nginx_status HTTP/1.1", upstream: "http://127.0.0.1:3000/loginnginx_status", host: "172.18.0.1"
2022/12/13 17:58:10 [error] 21#21: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 172.20.0.1, server: localhost, request: "GET /nginx_status HTTP/1.1", upstream: "http://127.0.0.1:3000/loginnginx_status", host: "172.18.0.1"
2022/12/13 17:58:10 [warn] 21#21: *1 upstream server temporarily disabled while connecting to upstream, client: 172.20.0.1, server: localhost, request: "GET /nginx_status HTTP/1.1", upstream: "http://127.0.0.1:3000/loginnginx_status", host: "172.18.0.1"
172.20.0.1 - - [13/Dec/2022:17:58:10 +0000] "GET /nginx_status HTTP/1.1" 502 157 "-" "Go-http-client/1.1" "-"
172.20.0.1 - - [13/Dec/2022:17:58:20 +0000] "GET /nginx_status HTTP/1.1" 502 157 "-" "Go-http-client/1.1" "-"
2022/12/13 17:58:20 [error] 22#22: *4 connect() failed (111: Connection refused) while connecting to upstream, client: 172.20.0.1, server: localhost, request: "GET /nginx_status HTTP/1.1", upstream: "http://127.0.0.1:3000/loginnginx_status", host: "172.18.0.1"
2022/12/13 17:58:20 [warn] 22#22: *4 upstream server temporarily disabled while connecting to upstream, client: 172.20.0.1, server: localhost, request: "GET /nginx_status HTTP/1.1", upstream: "http://127.0.0.1:3000/loginnginx_status", host: "172.18.0.1"
2022/12/13 17:58:20 [error] 22#22: *4 connect() failed (111: Connection refused) while connecting to upstream, client: 172.20.0.1, server: localhost, request: "GET /nginx_status HTTP/1.1", upstream: "http://127.0.0.1:3000/loginnginx_status", host: "172.18.0.1"
2022/12/13 17:58:20 [warn] 22#22: *4 upstream server temporarily disabled while connecting to upstream, client: 172.20.0.1, server: localhost, request: "GET /nginx_status HTTP/1.1", upstream: "http://127.0.0.1:3000/loginnginx_status", host: "172.18.0.1"
Посоветуйте, как это исправить?
решение1
Каждый контейнер имеет свою собственную сеть. Предоставляя localhost
в качестве адреса бэкенда, nginx пытается получить доступ к этому порту внутри своего собственного контейнера. Вместо этого вам нужно предоставить другой контейнер:
proxy_pass http://umami:3000/login;
Имя контейнера доступно как «имя хоста» внутри других контейнеров, так что больше ничего делать не нужно.
Вы можете удалить определение порта 3000, оно необходимо только для доступа к порту извне контейнеров.