主机一:(进入/etc/nginx/sites-enabled/service0.mydomain.com)

主机一:(进入/etc/nginx/sites-enabled/service0.mydomain.com)

我有一台服务器已经在端口 80(和 443)上运行 docker 容器。事后看来,我无法预见到我可能必须在同一台服务器上部署两个子域。我读到 Nginx 是在同一台服务器上托管多个子域的完美解决方案。理想情况下是这样的:

  • https://<service0>.<mydomain>.<com>/

  • https://<service1>.<mydomain>.<com>/

所以现在我将service1在一些未占用的端口上运行,但我的问题是两个子域都必须可以在端口 80(和 443)上访问,但我的service0docker 容器已经在运行并在端口 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 连接 - 但这正是我们想要的

希望我能帮助你解决你的问题

相关内容