我有一个专用服务器,我想在其上托管不同的站点,每个站点都在一个单独的 docker 容器中运行。我没有域,所以我想通过 IP 地址或 dynDNS URL 访问服务器。每个站点都应该在我的 IPaddress / 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://10.10.10.10/site-a或 http://10.10.10.10/site-a或http://10.10.10.10 ,我总是会得到一个 HTTP 503 服务暂时不可用。
我尝试了https://github.com/jwilder/nginx-proxy#docker-compose上描述的 whoami 示例, 如果我尝试 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
站点 a 和站点 b 只是托管静态 html 文件用于测试目的的 nginx 容器。
执行
curl -H "Host: site-a.local" http://10.10.10.10
从 site-a 返回静态 html
curl -H "Host: site-b.local" http://my-dyn-dns.com
从 site-b 返回静态 html
但是,如果我尝试使用浏览器访问这些 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;