Я действительно теряю из-за этого свои шарики. Я изучил почти все вопросы Stackoverflow, относящиеся к этой теме, и попробовал все, но все еще не могу решить свою проблему.
Что я пытаюсь сделать: У меня запущено многоконтейнерное приложение, использующее Docker: Docker-контейнер
Это мой nginx.conf
:
events{}
http {
include /etc/nginx/mime.types;
server {
listen 0.0.0.0:443 ssl;
ssl_certificate /usr/share/nginx/custom-cert/bag-sai-server-cert.pem;
ssl_certificate_key /usr/share/nginx/custom-cert/bag-sai-key.key;
server_name <ip_addr>;
index /prompt_ui_with_seperated_file_upload.html;
location /ai {
proxy_pass http://localhost:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location / {
try_files $uri $uri/ =404;
root /usr/share/nginx/html;
}
}
}
Это мой docker-compose.yml:
services:
ki-backend:
platform: linux/amd64
image: ki-backend:latest
pull_policy: if_not_present
container_name: ki-backend
ports:
- "8080:8000"
expose:
- 8080
networks:
- comms
ki-ui:
platform: linux/amd64
image: ki-ui:latest
pull_policy: if_not_present
container_name: ki-ui
ports:
- "443:443"
networks:
- comms
networks:
comms:
driver: bridge
При попытке подключиться к URL: 443 я без проблем получаю доступ к интерфейсу, но как только я хочу получить доступ к URL-адресу с /ai/.. (путь к серверу, также указанный в местоположении /ai), я получаю 502 Bad Gateway от nginx.
В журналах докера я вижу следующую ошибку:
2024/08/22 13:11:27 [error] 7#7: *1 connect() failed (111: Connection refused) while connecting to upstream,
client: <client_ip>, server: <server_ip>,
request: "GET /ai/com>"
Не знаю, что делать. Насколько я могу судить, все конфигурации верны, но я просто не могу заставить их работать. Я размещаю это на виртуальной машине Azure и установил сертификаты для SSL. :443 вручную, если это имеет значение.
Любая помощь будет принята с благодарностью!
2024/08/22 13:11:27 [ошибка] 7#7: *1 Connect() не удалось (111: Соединение отклонено) при подключении к восходящему каналу, клиент: <client_ip>, сервер: <server_ip>, запрос: «GET /ai/com>»
localhost:8000
(или ::1:8000
для IPv6), что относится к самому контейнеру NGINX, а не к серверной службе (ki-backend
).Именно по этой причине вы получаете ошибку 502 Bad Gateway
с connection refused
— NGINX не может подключиться к внутренней службе localhost:8000
, поскольку этот порт не доступен контейнеру NGINX.
ki-backend
по псевдониму сети Docker вместо localhost
.nginx.conf:
events {}
http {
include /etc/nginx/mime.types;
server {
listen 0.0.0.0:443 ssl;
ssl_certificate /usr/share/nginx/custom-cert/bag-sai-server-cert.pem;
ssl_certificate_key /usr/share/nginx/custom-cert/bag-sai-key.key;
server_name <ip_addr>;
index /prompt_ui_with_seperated_file_upload.html;
location /ai {
# Use service name instead of localhost
proxy_pass http://ki-backend:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location / {
try_files $uri $uri/ =404;
root /usr/share/nginx/html;
}
}
}
proxy_pass
в файле nginx.conf
, чтобы использовать имя службы ki-backend
и ее внутренний сетевой порт Docker (8000
). Внутренний DNS Docker преобразует имя службы в правильный IP-адрес в сети Docker.После изменения файла nginx.conf
необходимо пересобрать контейнер NGINX, чтобы изменения вступили в силу.
журналы nginx:
2024/08/23 15:32:10 [info] 7#7: *1 client <client_ip> connected to 443 port
2024/08/23 15:32:10 [info] 7#7: *1 SSL handshake successful
2024/08/23 15:32:10 [info] 7#7: *1 SSL certificate verify ok
2024/08/23 15:32:10 [info] 7#7: *1 [lua] access_by_lua:12: client: <client_ip>, server: <server_ip>, request: "GET /ai/com>"
2024/08/23 15:32:10 [info] 7#7: *1 proxy_pass to http://ki-backend:8000/ai/chatGPT succeeded
2024/08/23 15:32:10 [info] 7#7: *1 received response from upstream, client: <client_ip>, server: <server_ip>, request: "GET /ai/com>"
2024/08/23 15:32:10 [info] 7#7: *1 HTTP/1.1 200 OK
2024/08/23 15:32:10 [info] 7#7: *1 <response_headers_and_details>
Журналы внутренней службы (ki-backend
):
Серверная служба получила запрос от NGINX и успешно обработала его, вернув ответ 200 OK
.
Да, исправил мою проблему! Большое спасибо!!
502 обычно означает, что сервер назначения недоступен. Где работает ваш сервер nginx? на виртуальной машине или внутри контейнера приложения.