Как проксировать сайт, расположенный на docker-контейнере, nginx-ом (тоже docker-контейнер, но другой)?

Имеется docker контейнер c nginx, установил его в Portainer-е через app templates, назвал mynginx, порты: 81:80 и 4443:443.

Также есть docker-контейнер с простым сайтом mysite ("hello мир" в нем и все). Создал его так: sudo docker run -d -p 8080:80 -v /home/alexx/site:/usr/share/nginx/html nginx, рабочий, открывается по запросу localhost:8080. Я хочу сделать так, чтобы при обращении к nginx он перенаправлял (а точнее проксировал) на сайт mysite. Для этого добавил в файл конфигурации nginx.conf, который находится в контейнере по пути etc/nginx/nginx.conf, строки

server {                
                listen 81;
                 server_name _;
                location / {
                        proxy_set_header Host $host;
                        proxy_set_header X-Real-IP $remote_addr;
                        proxy_pass http://localhost:8080;
                      
                }
        }

и файл стал выглядеть так:

worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
server {
                
                listen 81;
                 server_name _;
                location / {
                        proxy_set_header Host $host;
                        proxy_set_header X-Real-IP $remote_addr;
                        proxy_pass http://localhost:8080;
                      
                }
        }


    include /etc/nginx/conf.d/*.conf;
   # include /etc/nginx/sites-enabled/*;
}

Но когда я перехожу по адресу localhost:81, то получаю приветствующую страничку nginx, но не мою. Подскажите, пожалуйста, как решить эту проблему?


Ответы (1 шт):

Автор решения: Александр

Мужики, вопрос решился. Дело в том, что nginx контейнер слушает 81-ый порт (на него можно зайти так: http://localhost:81), а перенаправляет то он на 80-ый. То есть внутри контейнера вся работа происходит с 80-ым портом. И соответственно в конфигурационном файле nginx нужно прописать, что мы хотим слушать 80-ый порт (там, где server, написать listen:80). И ещё одна важная деталь. Для проксирования сайта (который в контейнере лежит на сервере nginx) использовать ip-адрес контейнера сайта, а не мистический localhost (хотя по нему можно на сайт спокойно зайти). Это в строчке proxy, а в строке server_name написать доменное имя сайта, например "my_site_1", но до этого (если сайт локальный) нужно это доменное имя прописать в файле хоста системы (открыть его можно, например, так: sudo nano /etc/hosts ), привязать этот домен к ip-адресу локалхоста (это может выглядеть так: 127.0.0.1 my_site_1). Заходить на сайт можно так: my_site_1:81 Ответ на вопрос дан. Дальше пойдут некоторые пояснения.

Сайты, на которые проксируем или перенаправляем (вроде как это две разные операции), не обязательно должны содержаться в конфигурационном nginx файле. Они могут подключаться туда, а сами значиться в файлах sites-available, sites-enabled.

→ Ссылка