我有一台服务器已经在端口 80(和 443)上运行 docker 容器。事后看来,我无法预见到我可能必须在同一台服务器上部署两个子域。我读到 Nginx 是在同一台服务器上托管多个子域的完美解决方案。理想情况下是这样的:
https://<service0>.<mydomain>.<com>/
https://<service1>.<mydomain>.<com>/
所以现在我将service1
在一些未占用的端口上运行,但我的问题是两个子域都必须可以在端口 80(和 443)上访问,但我的service0
docker 容器已经在运行并在端口 80 上监听。是否可以将 Nginx 放在它上面,就像监听子域的所有流量service0
并将其转发到“实际”端口 80 和其他端口一样service1
。我问这个是因为我不允许更改service0
在端口 80 上运行的当前端口。我可以暂时停止容器,但没什么用。
答案1
首先看这里:如何将端口映射到 Docker 或设置新的端口?
将 docker 端口更改为 8080 和 8081 后,安装 nginx 以在本地机器上运行。之后,将 Nginx 设置为反向代理,如下所示:
主机一:(进入/etc/nginx/sites-enabled/service0.mydomain.com)
server {
listen 80;
server_name <service0>.<mydomain>.<com>
location / {
proxy_pass http://10.11.12.13:8080
proxy_set_header Host $host;
proxy_buffers 16 4k;
proxy_buffer_size 2k;
gzip on;
#gzip_proxied no-cache no-store private expired auth;
gzip_vary on;
gzip_comp_level 8;
gzip_proxied any;
}
主机二::(进入/etc/nginx/sites-enabled/service1.mydomain.com)
server {
listen 80;
server_name <service1>.<mydomain>.<com>
location / {
proxy_pass http://10.11.12.13:8080
proxy_set_header Host $host;
proxy_buffers 16 4k;
proxy_buffer_size 2k;
gzip on;
#gzip_proxied no-cache no-store private expired auth;
gzip_vary on;
gzip_comp_level 8;
gzip_proxied any;
}
其中 10.11.12.13 是机器的 IP,
- 如果 docker 在同一主机上运行,请将其替换为 127.0.0.1
- 将 proxy_pass 后面的端口改为上面的
好处:
- nginx 已启用缓存,无需重定向到 SSL
不好吗?
- 没有自动重定向 - 但这里有方法
自动重定向(仅一个示例)
server {
server_name subdomain.domain.de;
listen 80;
return 301 https://$host$request_uri;
}
server {
proxy_read_timeout 3600;
listen 443 ssl http2;
server_name subdomain.domain.de;
location / {
proxy_set_header X-Cache-Status $upstream_cache_status;
proxy_cache_valid 200 1w;
proxy_pass https://10.11.12.13:8080;
proxy_set_header Host $http_host;
proxy_buffers 16 8m;
proxy_buffer_size 2m;
gzip on;
gzip_vary on;
gzip_comp_level 9;
gzip_proxied any;
}
ssl_certificate /etc/letsencrypt/live/0001/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/0001/privkey.pem; # managed by Certbot
}
好处?
- 自动重定向 nginx 样式到 SSL
- 提醒一下,SSL-Part 必须由 certbot 设置
- 已启用缓存
不好吗?
- 无法进行 http 连接 - 但这正是我们想要的
希望我能帮助你解决你的问题