我正在构建一个多租户应用程序,其中必须由同一个nginx服务器处理对多个域的请求。
为了实现这一点,脚本在注册过程之后为每个域创建nginx配置,并将它们添加到文件夹中。基本的nginx配置已设置为从此文件夹中读取配置。
如果我使用sudo service nginx restart
手动重新启动nginx,则该应用程序可以正常运行。但是,我希望这种情况无需人工干预即可发生。即,我希望我的脚本刷新nginx配置,并且我不想再次输入sudo密码就可以这样做。
有人可以帮助我实现这一目标吗?
答案 0 :(得分:1)
我强烈不建议使用service ngnix restart
重新加载配置,尤其是在多租户环境中。您可能会中断正在进行的请求,会话等。这可能很好,但是每个租户都必须做出决定,并且必须在适当的时候这样做。 Nginx支持命令service ngnix reload
来解决此问题。重新加载允许重新加载配置而无需停机。
您至少可以通过3种方式触发命令:
例如,如果您有一些允许租户修改配置的Web界面,并且知道手动触发命令或将消息发送到其他触发它的服务,则选项2会很好。您可以通过授予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
代替本教程中的示例命令。