У меня есть выделенный сервер, на котором я хочу разместить разные сайты, каждый из которых работает в отдельном док-контейнере. У меня нет домена, поэтому я хочу получить доступ к серверу по IP-адресу или URL-адресу dynDNS. Каждый сайт должен быть доступен в подпапке моего IP-адреса / dyndns, например:
http://10.10.10.10/site-a --> redirects to e.g. nginx running in container A
http://10.10.10.10/site-b --> redirects to e.g. appache running in container B
и т.п.
Я думаю, что я должен использовать обратный прокси для этого. Я нашел этот https://github.com/jwilder/nginx-proxy, который кажется быть довольно простым с точки зрения расширяемости, если я планирую добавить дополнительный контейнер в будущем. Однако я всегда получаю сообщение HTTP 503 «Временно недоступно», если пытаюсь получить доступ к http://10.10.10.10/site-a или http://10.10.10.10/site-a или http://10.10.10.10 напрямую.
Я попробовал пример whoami, как описано на https://github.com/jwilder/nginx-proxy#docker-compose Это отлично работает, если я попробую curl -H "Host: whoami.local" localhost
Я изменил этот пример docker-compose.yml, чтобы он соответствовал моему варианту использования:
version: '2'
services:
nginx-proxy:
image: jwilder/nginx-proxy
ports:
- "80:80"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
site-a:
image: nginx
volumes:
- /home/chris/docker/site-a:/usr/share/nginx/html
environment:
- VIRTUAL_HOST=site-a.local
site-b:
image: nginx
volumes:
- /home/chris/docker/site-b:/usr/share/nginx/html
environment:
- VIRTUAL_HOST=site-b.local
Site-a и site-b — это просто контейнеры nginx, в которых размещен статический html-файл для целей тестирования.
выполнение
curl -H "Host: site-a.local" http://10.10.10.10
возвращает статический html с сайта site-a
curl -H "Host: site-b.local" http://my-dyn-dns.com
возвращает статический html с site-b
Но если я попытаюсь получить доступ к любому из этих URL-адресов с помощью браузера, я снова получу HTTP 503 :-(
nginx.conf остался нетронутым из образа dockerhub:
/etc/nginx# cat nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
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;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
daemon off;