Эй, я в настоящее время немного глуп, чтобы настроить nginx.
Моя цель — получить proxy_pass в соответствии с конфигурацией nginx для двух моих конечных точек REST:
означает, что если я позвоню http://localhost/app-one/ping
из своего браузера, он должен быть перенаправлен на http://app-one:1111/ping
в моей среде докеров
вот сильно упрощенное представление моих файлов docker и docker compose:
FROM nginx:alpine
COPY ./nginx.conf /etc/nginx/nginx.conf
version: '3.7'
services:
proxy:
image: "proxy"
build: ./nginx-data
ports:
- "80:80"
environment:
- NGINX_PORT=80
app-one:
image: "app-one"
container_name: app-one
app-two:
image: "app-two"
container_name: app-two
и вот моя попытка конфигурации nginx, которая не удалась:
worker_processes 1;
events { worker_connections 1024; }
http {
sendfile on;
upstream app-one {
server app-one:1111;
}
upstream app-two {
server app-two:2222;
}
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-Host $server_name;
server {
listen 80;
location /app-one {
proxy_pass http://app-one:1111;
proxy_redirect off;
}
}
server {
listen 80;
location /app-two {
proxy_pass http://app-two:2222;
proxy_redirect off;
}
}
}
Кто-нибудь знает, как настроить конфигурацию nginx :) В любом случае, есть ли какие-либо другие проблемы, описанные выше, заранее спасибо за вашу помощь.
это сработало, спасибо :) проблема, похоже, была в том, что прокси запустился раньше приложения. когда я запускаю его потом, все работает, как вы описали
Контейнеры приложений уже должны быть запущены, когда будет запущен прокси-сервер nginx. В противном случае конфигурация nginx не работает, поэтому он не запускается.
Чтобы решить эту проблему, мы можем изменить файл docker-compose с помощью раздела depend_on, чтобы он работал должным образом:
version: '3.7'
services:
proxy:
image: "proxy"
build: ./nginx-data
ports:
- "80:80"
environment:
- NGINX_PORT=80
depends_on:
app-one:
condition: service_started
app-two:
condition: service_started
app-one:
image: "app-one"
container_name: app-one
app-two:
image: "app-two"
container_name: app-two
Процесс выполнения:
Команда docker-compose up
запускает службы в порядке зависимости. В нашем примере приложение-1 и приложение-2 запускаются до запуска прокси-сервиса.
Команда docker-compose stop
останавливает службы в порядке зависимости. В нашем примере прокси останавливается перед приложением-1 и приложением-2.
есть ли 3 контейнера в одной и той же среде выполнения докеров? если да: 1) должен быть выставлен только обратный прокси; 2) приложение-один и приложение-два могут прослушивать один и тот же порт (это необязательно, но может помочь вам понять, что происходит на самом деле). 3) контейнер nginx может обращаться к двум серверным приложениям, используя их служебные имена, не выходя из сети докеров; 4) в заключение, обычный proxy_pass должен работать:
location /app-one { proxy_pass: app-one:1111 }