Как проксировать сайт, расположенный на 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.