Answers:
sites- *文件夹由nginx_ensite
和管理nginx_dissite
。对于通过搜索找到此内容的Apache httpd用户,等效值为a2ensite
/ a2dissite
。
该sites-available
文件夹用于存储您的所有虚拟主机配置,无论当前是否已启用它们。
该sites-enabled
文件夹包含指向站点可用文件夹中文件的符号链接。这使您可以通过删除符号链接来有选择地禁用虚拟主机。
conf.d
可以完成这项工作,但是当您需要禁用某些内容时,您必须将其移出文件夹,删除它或对其进行更改。sites- *文件夹的抽象使事情更井井有条,并允许您使用单独的支持脚本进行管理。
(除非您像我一样,并且是许多直接管理符号链接而又不了解脚本的Debian管理员之一)
sites-available|sites-enabled
是一种Debian主义,而不是nginx或Apache所做的事情。过去它可能非常有用,但是在配置管理和容器时代,它的实用性受到了一定的限制。
nginx.conf
而不会降低可读性。这与几年前服务器通常存储数十个网站的方法相反。
我想在前面的答案中补充一点,最重要的不是您如何调用目录(尽管这是非常有用的约定),而是您实际输入的内容nginx.conf
。配置示例:
http {
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*.conf;
include /etc/nginx/sites-enabled/my_own_conf;
...
}
这里使用的唯一指令是include,因此eg 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.
因此,要回答最初的问题:没有内部差异,您可以记住其他答案的建议,以最佳方式使用它们。而且,请不要忘记选择“正确”的答案。
通常,该sites-enabled
文件夹用于虚拟主机定义,而conf.d
用于全局服务器配置。如果您支持多个网站(即虚拟主机),则每个网站都有自己的文件,因此您可以通过将文件移入sites-enabled
或移出(或创建和删除符号链接)来轻松启用和禁用它们。一个更好的主意)。
使用conf.d
的东西像模块加载,日志文件,以及其他的东西都是不特定于某个虚拟主机。
默认配置引用www数据用户?我必须创建该用户吗?
您应该让nginx以非root用户身份运行。在某些情况下www-data
,该名称为,但您可以随意命名。
如何为该用户授予运行Nginx的最佳权限?
我不太确定这个问题的答案(目前我不在运行nginx),但是如果它像Apache,则答案是www-data
用户只需要读取任何静态文件的权限(并在目录上执行read + execute) )表示您正在提供服务,或者对CGI脚本之类的内容具有读取/执行权限,而在其他任何地方均没有权限。
root
并且存在某种形式的远程威胁,则攻击者将立即拥有对系统的完全访问权限。当以非特权用户身份运行时,管理访问权限只能与某种本地漏洞利用结合使用。
您必须使用Debian或Ubuntu,因为来自http://nginx.org/packages/ 的nginx上游包装没有使用邪恶的 sites-available
/ sites-enabled
逻辑。
无论哪种情况,都可以通过中的标准include
指令将两者都实现为配置约定/etc/nginx/nginx.conf
。
这是/etc/nginx/nginx.conf
来自nginx.org的nginx官方上游软件包的摘录:
http {
…
include /etc/nginx/conf.d/*.conf;
}
这是/etc/nginx/nginx.conf
Debian / Ubuntu的摘录:
http {
…
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
因此,从NGINX的角度来看,唯一的区别是from的文件将conf.d
得到更快的处理,因此,如果您的配置相互之间无声冲突,则from的文件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
脚本-这些脚本的名称是比这个崩溃的其余部分更糟糕-但这些脚本也无处可寻-他们从没有nginx
包装,即使在Debian的(也可能是在Ubuntu,太) ,而且也不存在于它们自己的软件包中,再加上,您真的需要一个完整的非标准第三方脚本来简单地在两个目录之间移动和/或链接文件吗?
而且,如果您不使用脚本(实际上,这是上面所述的明智选择),那么就会出现如何管理站点的问题:
sites-available
到的符号链接sites-enabled
?sites-enabled
?在一些人开始管理该系统或直到您做出快速决定之前,以上似乎似乎是要解决的一些小问题。
这使我们能够:
从中删除文件是否安全sites-enabled
?它是软链接吗?硬链接?还是配置的唯一副本?配置地狱的一个典型例子。
哪些站点已被禁用?(使用conf.d
,只需对不以.conf
- 结尾的文件进行反向搜索find /etc/nginx/conf.d -not -name "*.conf"
,或使用即可grep -v
。)
不仅所有的上述情况,还要注意具体include
由于Debian / Ubuntu使用的指令- /etc/nginx/sites-enabled/*
-对于没有指定文件名后缀sites-enabled
,不像conf.d
。
/etc/nginx/sites-enabled
,并emacs
创建了一个备份文件(如)default~
,则突然之间,您同时拥有这两个文件default
并将default~
其作为活动配置包含在内,根据所使用的指令,该配置甚至可能不会您会收到任何警告,并导致调试会话时间延长。(是的,这确实发生在我身上;那是在一次黑客马拉松期间,我完全不知道为什么我的conf无法正常工作。)因此,我坚信那sites-enabled
是纯粹的邪恶!
sites-enabled
不够邪恶!
sites-enabled
,然后又有人决定通过删除它来禁用它,可能是认为这只是一个符号链接,需要随后的nginx堆内存转储来恢复conf文件:stackoverflow.com/q/45852224/1122270
sites-available
和的主张sites-enabled
。重要的是要能够在“实时”拾取目录之外准备配置文件,这样,如果重新加载或重新启动了nginx,它将不会拾取部分配置文件。保留不再处于活动状态的配置文件也很有用。如果您首先有足够的经验来管理nginx(即IMO),则创建符号链接并不是特别困难的任务。
USR1
,它重新打开日志,不会重新加载conf。)我发现您的符号链接“体验”注释被误导了-问题是一致性的问题,与经验无关。
www-data
是一个单独的主题。大多数操作系统都以较低的权限定义了一个单独的用户,该用户以root身份绑定到端口80后可以运行该进程。它在配置文件中定义。从那里开始应用基本安全实践;不要让用户写入Web服务器不需要写入的任何内容,除非有意为之,否则不要让其他用户写入文件。