【问题标题】:How is nginx paired with docker treating referenced files?nginx 如何与 docker 配对处理引用的文件?
【发布时间】:2020-05-10 17:30:00
【问题描述】:

我正在运行一个 dockerized django 应用程序。我将它部署在 EC2 上。 Nginx 也在一个 docker 容器中。我的 docker-container 中的 Nginx 已配置为使用 Lets Encrypt 的 ssl 证书。

Lets Encrypt 证书的有效期仅为 90 天,这就是我设置 cronjob 来更新它们的原因。

我现在的问题是:我在 docker 容器中运行的 nginx 会自动使用更新后的文件吗?还是我需要再次启动我的 docker 容器并重新构建它以使更改生效?在后一种情况下,是否可以告诉 nginx 使用更新的文件,这样我就不必重建我的容器?我问这个问题是因为我想尽量减少我的应用程序的停机时间。

为了更清楚,我提供了我的配置。重要的文件是引用的 ssl 证书:

server {

    listen 443 ssl;
    server_name mydomain;
    charset utf-8;
    ssl_stapling off;
    ssl_stapling_verify off;

    ssl_certificate        /etc/letsencrypt/live/mydomain/fullchain.pem;
    ssl_certificate_key   /etc/letsencrypt/live/mydomain/privkey.pem;


    location / {
        proxy_pass http://django:5000;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

}

这是我的撰写文件:

  production-nginx-container:
    container_name: 'production-nginx-container'
    image: nginx:latest
    ports:
      - "80:80"
      - "443:443"
    volumes:
       - /home/ubuntu/nginx-conf/myconf.conf:/etc/nginx/conf.d/default.conf
       - /etc/letsencrypt/live/mydomain/fullchain.pem:/etc/letsencrypt/live/mydomain/fullchain.pem
       - /etc/letsencrypt/live/mydomain/privkey.pem:/etc/letsencrypt/live/mydomain/privkey.pem
    depends_on:
      - django

我只能看到两个选项:要么 nginx 在我的 docker 容器运行时保持这个文件一直打开,要么不保持。

如果它保持打开状态,我假设我需要重新启动我不想要的 docker 容器:)。

如果有任何意见,我将不胜感激!提前致谢!

【问题讨论】:

    标签: django docker nginx docker-compose


    【解决方案1】:

    Nginx 读取一开始提供的证书/配置。要重新阅读它们,您可以重新启动 nginx(容器)或发送 reload signal 到 nginx:

    nginx -s reload - 容器中的命令。还预先与nginx -t 配对以检查配置文件的语法是否正常。

    【讨论】:

    • 抱歉回复晚了,我不在电脑旁,感谢 Oleg 的帮助。我不太明白 reload 指令。你的意思是我应该在docker容器中传递nginx -s reload?或者你的意思是我应该从哪里发送?还是就在航站楼?
    • 是的,就在容器中,即docker exec -it my-running-container nginx -s reload。您可以将此命令绑定到您的 https 证书获取/更新实用程序,即acme.sh,作为在证书更新后调用的后挂钩。容器重启也可以,但会增加一些小的停机时间并断开连接。
    • 太棒了!如果可行,我会尝试并在此处发布。再次非常感谢!
    • 最后一个问题:当我手动运行此命令时,我得到 2020/01/28 10:08:59 [notice] 7#7: signal process started 。我可以解释这条消息它正在工作吗?我的意思是,nginx 重启了吗?
    • 通常可以,但like in this question 可能需要一些权限。在这种情况下,日志行表示正在接收信号,而不是实际变化。
    猜你喜欢
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 2022-11-04
    相关资源
    最近更新 更多