Set*_*man 157 linux ubuntu configuration nginx web-server
我有一些使用 linux 的经验,但没有使用 nginx 的经验。我的任务是研究应用服务器的负载平衡选项。
我已经使用 apt-get 安装了 nginx,一切看起来都很好。
我有一些问题。
sites-available 文件夹和 conf.d 文件夹有什么区别。这两个文件夹都包含在 nginx 的默认配置设置中。教程使用两者。它们的用途是什么,最佳实践是什么?
启用站点的文件夹有什么用?我如何使用它?
默认配置引用一个 www-data 用户?我必须创建那个用户吗?如何为该用户提供运行 nginx 的最佳权限?
And*_*w B 128
站点-* 文件夹由nginx_ensite和管理nginx_dissite。对于通过搜索找到它的 Apache httpd 用户,等效项是a2ensite/ a2dissite。
该sites-available文件夹用于存储您的所有虚拟主机配置,无论它们当前是否已启用。
该sites-enabled文件夹包含指向sites-available 文件夹中文件的符号链接。这允许您通过删除符号链接有选择地禁用虚拟主机。
conf.d可以完成这项工作,但是当您需要禁用某些内容时,您必须将某些内容移出文件夹,将其删除或对其进行更改。站点-* 文件夹抽象使事情更有条理,并允许您使用单独的支持脚本管理它们。
(除非你像我一样,并且是许多直接管理符号链接的 debian 管理员之一,不知道脚本......)
Yar*_*nko 50
我想补充之前的答案,最重要的不是您如何调用目录(尽管这是一个非常有用的约定),而是您实际放入nginx.conf. 示例配置:
http {
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*.conf;
include /etc/nginx/sites-enabled/my_own_conf;
...
}
Run Code Online (Sandbox Code Playgroud)
这里使用的唯一指令是include,因此 egconf.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.
Run Code Online (Sandbox Code Playgroud)
所以,回答最初的问题:没有内部差异,你可以以最好的方式使用它们,记住其他答案中的建议。请不要忘记选择“正确”的答案。
cns*_*nst 47
您必须使用 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;
}
Run Code Online (Sandbox Code Playgroud)
这是/etc/nginx/nginx.conf来自 Debian/Ubuntu的片段:
http {
…
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Run Code Online (Sandbox Code Playgroud)
因此,从NGINX的点,唯一的区别是从该文件中conf.d获取到更快地处理,并且,正因为如此,如果你有配置,彼此默默的冲突,那么这些来自conf.d可优先于那些sites-enabled。
conf.d。您应该使用/etc/nginx/conf.d,因为这是标准约定,并且应该可以在任何地方使用。
如果您需要禁用站点,只需将文件名重命名为不再有.conf后缀,非常简单、直接且防错:
sudo mv -i /etc/nginx/conf.d/default.conf{,.disabled}
或者相反以启用站点:
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。)
不仅是上述所有内容,还要注意includeDebian/Ubuntu 使用的特定指令——与 for 不同,/etc/nginx/sites-enabled/*没有为 指定文件名后缀。sites-enabledconf.d
/etc/nginx/sites-enabled,你的emacs创造欲备份的文件default~,然后,突然间,你已经都default和default~包括作为主动配置,其中,根据所使用的指令,不得甚至放弃你有任何警告,并导致长时间的调试会话发生。(是的,它确实发生在我身上;那是在一次黑客马拉松期间,我完全不明白为什么我的 conf 不起作用。)因此,我确信那sites-enabled是纯粹的邪恶!
lar*_*sks 36
通常,该sites-enabled文件夹用于虚拟主机定义,而conf.d用于全局服务器配置。如果您支持多个网站——即虚拟主机——那么每个网站都有自己的文件,因此您可以通过移入和移出文件sites-enabled(或创建和删除符号链接,这可能是一个更好的主意)。
使用conf.d的东西像模块加载,日志文件,以及其他的东西都是不特定于某个虚拟主机。
默认配置引用一个 www-data 用户?我必须创建那个用户吗?
您应该让 nginx 以非 root 用户身份运行。在某些情况下www-data,它被命名为,但您可以将其命名为您想要的任何名称。
如何为该用户提供运行 nginx 的最佳权限?
我不太确定这个问题的答案(我目前没有运行 nginx),但如果它是 Apache 之类的东西,答案是www-data用户只需要对任何静态文件的读取权限(以及对目录的读取+执行) ),或者对 CGI 脚本等内容的读取/执行权限,而在其他任何地方都没有权限。