2011-08-14 62 views
4

我在Windows上安装了nginx,并在我的http根目录中放入了一个nginx.conf,但似乎没有包含此路径,我可以通过包含c:/http_default/nginx.conf来包含它,但我希望nginx自动将当前工作目录的nginx.conf包括在内。例如:对于http://mydomain.com/test/index.php,我想要包含c:/http_default/test/nginx.conf如何配置nginx读取当前工作目录中的nginx.conf?

+0

每延迟重装我不明白你为什么会需要这样做。为什么不只是为了测试而设置一个位置块,其行为有所不同?另一个解决方案是有一个不同的子域(然后nginx可以使用不同的虚拟服务器来处理测试请求) – matzahboy

+0

我正在ab大项目中工作,它与Apache一起工作。它的文件夹中有许多.htaccess文件,因此它是一个CMS并有插件,每个插件可能有它自己的.htaccess,我可以将.htaccess翻译成nginx.conf,但我需要将每个nginx放到它的文件夹中。 – IVIR3zaM

+1

.htaccess不会转换为新的nginx.conf。它转换为一个nginx位置块。Nginx允许你根据特定位置(基本上插入文件的内容)包含其他配置,但它不允许你有多于1个主配置。 – matzahboy

回答

2

你最好的选择是首先有标准的目录结构(例如c:\ www \ example.com)。然后在每个站点目录中有一个用于根目录和conf文件的目录。然后你可以在你的主要nginx.conf中使用这个文件http {}部分。

include c:/www/*/conf/nginx.conf; 

然后,当您启动或向nginx发出重新加载时,每个站点的nginx.conf都会加载。所以如果你有一个网站的这两条路径,你就设置好了。

c:\www\example.com\conf\ 
c:\www\example.com\htdocs\ 

Web文件进去的htdocsnginx.conf进去的conf。就那么简单。

我从来没有在Windows上使用nginx,所以我假设它的conf使用正斜杠,如* nix。

+0

这在Windows上不适用于我。我仍然在试图弄清楚如何做一个包含。 – Ryan

+0

想通了:http://stackoverflow.com/a/23413380/470749 – Ryan

2

有一个叫做incron的程序,是一个“inotify cron”系统。它以非常低的成本检测文件更改:inotify

  • 安装incron,例如, apt-get install -y incron

  • 编辑incrontab incrontab -e

  • 添加/var/www/site1/nginx.conf IN_MODIFY,IN_NO_LOOP /usr/local/sbin/nginx-reload.sh调整自己的根目录,它是更安全设置Web根目录到网站名称/服务器,并把这个nginx.conf中的用户名DIR

  • shell脚本使用flock等待前面的重装

    flock -x "/var/lock/nginx-reload" -c nginx-reload-worker.sh logger -t "nginx-reload[$$]" "Reloading OK"

  • 工人脚本由5秒

    sleep 5 service nginx reload || error 2 "nginx reload error"


看到这一切在NGINX auto reload gist