【问题标题】:Add nginx config on the fly即时添加 nginx 配置
【发布时间】:2018-06-27 16:56:18
【问题描述】:

我正在构建一个多租户应用程序,其中对多个域的请求必须由同一个 nginx 服务器提供服务。

为了实现这一点,脚本会在注册过程后为每个域创建 nginx 配置,并将它们添加到文件夹中。基本 nginx 配置已设置为从此文件夹中读取配置。

如果我使用sudo service nginx restart 手动重新启动 nginx,则应用程序可以正常工作。但是,我希望在没有人工干预的情况下发生这种情况。即我希望我的脚本刷新 nginx 配置,并且我想在不再次输入 sudo 密码的情况下执行此操作。

有人可以帮助我实现这一目标吗?

【问题讨论】:

    标签: nginx


    【解决方案1】:

    我强烈反对使用service ngnix restart重新加载配置,尤其是在多租户环境中。您可能会中断正在进行的请求、会话等。这可能很好,但每个租户都必须做出决定,并且必须在适当的时候这样做。 Nginx 支持命令service ngnix reload 来解决这个问题。重新加载允许重新加载配置而无需任何停机。

    您至少可以通过 3 种方式触发该命令:

    1. 定期 cron 作业(最容易设置,效率最低)
    2. 手动触发命令
    3. 通过文件系统监控触发​​li>

    选项 2 会很好,例如,如果您有一些 Web 界面允许租户修改配置,并且您知道手动触发命令或向触发它的其他服务发送消息。您可以通过授予 Web 应用程序以 root 身份运行单个命令的能力来安全地避免使用 sudo,例如vi sudo 并添加www-data ALL=(ALL) NOPASSWD: /usr/sbin/service nginx reload 行,其中www-data 应该是您的应用程序在其下运行的任何用户。然后你可以根据你使用的语言的任何api来执行shell命令。

    选项 3 将是最可靠的。有多种监控文件系统的选项,但我建议使用 incron。这是guide to install and configure incron。您可以监视对存储配置的任何目录的更改,并使用service nginx reload 代替教程中的示例命令。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-17
      • 2016-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-31
      • 2019-01-01
      相关资源
      最近更新 更多