Я пытаюсь настроить сервер, на котором будут размещаться мои веб-приложения. Для каждого приложения точкой входа является сервер nginx, упакованный в контейнер докеров, с его портом 80, перенаправленным куда-то на хост. Порт 80 сервера прослушивается прокси-сервером nginx, который выбирает приложение, соответствующее Host
заголовок запроса.
Вот конфигурация nginx моего простого, полностью статического приложения:
server {
listen 80;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
Порт 80 приложения привязан к порту хоста 8000.
А вот конфиг прокси:
server {
listen 80;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
server {
listen 80;
# not real DNS, just an example
server_name static.myserver.net;
location / {
proxy_pass http://127.0.0.1:8000;
}
}
Записи DNS myserver.net
и static.myserver.net
привязаны к IP-адресу сервера.
Но когда я пытаюсь подключиться к static.myserver.net
, Я получаю ошибку 502 и запись в журнале прокси:
2016/06/04 13:26:58 [error] 5#5: *2 connect() failed (111: Connection refused) while connecting to upstream, client: 100.100.100.100, server: static.myserver.net, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8000/", host: "static.myserver.net"
Журналы приложения nginx пусты.
Но оба myserver.net:8000
из Интернета и 127.0.0.1:8000
от хоста полностью доступны. Что не так?
Нашли проблему. Конфигурации кажутся правильными, но прокси-сервер тоже был настроен как контейнер Docker. Таким образом, адрес 127.0.0.1
указывал на контейнер Docker, а не на хост. proxy_pass http://real_host_ip:8000;
работает правильно.