Я действительно теряю из-за этого свои шарики. Я изучил почти все вопросы 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? на виртуальной машине или внутри контейнера приложения.