我有一些使用Linux的经验,但没有使用nginx。 我负责研究应用程序服务器的负载平衡选项。
我用apt-get来安装nginx,一切似乎都很好。
我有几个问题。
站点可用文件夹和conf.d文件夹之间有什么区别? 这两个文件夹都包含在nginx的默认configuration设置中。 教程同时使用。 他们是什么,最好的做法是什么?
什么是用于启用网站的文件夹? 我如何使用它?
默认configuration引用了www-data用户? 我是否必须创build该用户? 如何给这个用户运行nginx的最佳权限?
nginx_ensite
*文件夹由nginx_ensite
和nginx_dissite
pipe理。 对于通过search查find的Apache httpd用户,等价物是a2ensite
/ a2dissite
。
sites-available
文件夹用于存储所有的虚拟主机configuration,不pipe它们是否当前启用。
已sites-enabled
文件夹包含站点可用文件夹中的文件的符号链接。 这使您可以通过删除符号链接select性地禁用虚拟主机。
conf.d
完成了这项工作,但是当你需要禁用某些东西的时候,你必须将某些东西移出文件夹,删除它,或者修改它。 sites- *文件夹抽象使事情更有条理,并允许您使用单独的支持脚本来pipe理它们。
(除非你像我一样,许多debianpipe理员直接pipe理符号链接,不知道脚本…)
我想补充以前的答案,最重要的不是你如何调用目录(虽然这是一个非常有用的约定),但你实际上放在nginx.conf
。 configuration示例:
http { include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*.conf; include /etc/nginx/sites-enabled/my_own_conf; ... }
这里使用的唯一指令是include ,所以在conf.d/
和sites-enabled/
之间没有内部的区别。
从上面的文档:
Syntax: include file | mask; Default: — Context: any Includes another file, or files matching the specified mask, into configuration. Included files should consist of syntactically correct directives and blocks.
所以,要回答原来的问题:没有内在的差异,你可以用最好的方式使用它们,记住其他答案的build议。 而且,请不要忘记select“正确”的答案。
通常, sites-enabled
文件夹用于虚拟主机定义,而conf.d
用于全局服务器configuration。 如果您支持多个网站(即虚拟主机),则每个网站都有自己的文件,因此您可以通过将文件移入或移出sites-enabled
(或创build和删除符号链接,这可能是一个更好的主意)。
将conf.d
用于诸如模块加载,日志文件以及其他非特定于单个虚拟主机的事情。
默认configuration引用了www-data用户? 我是否必须创build该用户?
你应该让nginx以非root用户的身份运行。 这在某些情况下被命名为www-data
,但是您可以将其命名为任何您想要的名称。
如何给这个用户运行nginx的最佳权限?
我不太确定这个问题的答案(我目前没有运行nginx),但是如果它是类似Apache的答案,那么www-data
用户只需要读取任何静态文件的权限(并且读取+在目录上执行),或者读取/执行像CGI脚本这样的权限,而在其他任何地方都没有权限。
您必须使用Debian或Ubuntu,因为来自http://nginx.org/packages/ 的nginx的上游封装没有使用邪恶 sites-available
/ sites-enabled
逻辑。
无论哪种情况,都可以通过/etc/nginx/nginx.conf
中的标准include
指令作为configuration约定来实现。
下面是一个来自/etc/nginx/nginx.conf
的官方上游nginx包的/etc/nginx/nginx.conf
的代码片段:
http { … include /etc/nginx/conf.d/*.conf; }
这里是Debian / Ubuntu中的/etc/nginx/nginx.conf
的一段代码:
http { … include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }
所以,从NGINX的angular度来看,唯一的区别就是conf.d
文件得到了更快的处理,因此,如果你的configuration默默地相互冲突,那么来自conf.d
优先于那些在sites-enabled
。
conf.d
你应该使用/etc/nginx/conf.d
,因为这是一个标准的约定,应该在任何地方工作。
如果您需要禁用某个站点,只需将文件名重新命名为不再具有.conf
后缀,这非常简单,直接且防错:
sudo mv -i /etc/nginx/conf.d/default.conf{,.off}
或者相反, 启用一个网站:
sudo mv -i /etc/nginx/conf.d/example.com.conf{.disabled,}
sites-available
和sites-enabled
。 我看到绝对没有理由使用sites-available
/ sites-enabled
:
有些人提到了nginx_ensite
和nginx_dissite
脚本 – 这些脚本的名字甚至比这个崩溃的其他部分还要糟糕 – 但是这些脚本也没有find – 即使在Debian中它们也不在nginx
包中(可能在Ubuntu中),而不是在他们自己的包中,另外,你真的需要一个完整的非标准的第三方脚本来简单地移动和/或链接两个目录之间的文件?!
如果你不使用这些脚本(事实上,这是一个明智的select),那么你将如何pipe理站点:
sites-available
创build符号链接sites-available
用于sites-enabled
? sites-enabled
位置编辑文件? 上述看起来像是一些小问题需要解决,直到几个人开始pipe理系统,或者直到你做出一个快速的决定,只是忘记了几个月或几年的时间…
这使我们能够:
从sites-enabled
的文件中删除文件是否安全? 它是软链接吗? 一个硬链接? 还是唯一的configuration副本? configuration地狱的一个主要例子。
哪些网站已被禁用? (使用conf.d
,只需要反向search不以.conf
结尾的文件 – find /etc/nginx/conf.d -not -name "*.conf"
,或者使用grep -v
。)
不仅如此,还要注意Debian / Ubuntu使用的具体include
指令 – /etc/nginx/sites-enabled/*
– 与conf.d
不同,没有为sites-enabled
指定文件名后缀。
/etc/nginx/sites-enabled
快速编辑一个或两个文件,并且你的emacs
创build了一个类似于emacs
的备份文件,那么你突然间就会同时拥有default
和default~
作为主动configuration,根据使用的指令,可能甚至不会给你任何警告,并导致长时间的debugging会话发生。 (是的,它确实发生在我身上,那是在一次黑客马拉松比赛中,我完全不明白为什么我的conf没有工作。) 因此,我确信sites-enabled
是纯粹的邪恶!