centos 安装 nginx 后的目录和 Ubuntu 的有所不同,网上相关资料也很少 所以上来问下
/etc/nginx 下有两个目录和两个文件:
conf.d 目录 default.d 目录
——如果 conf.d 目录中的设置和下面 nginx.conf 冲突,哪个会起作用? default.d 目录呢?
nginx.conf 文件 nginx.conf.default 文件 ——下面这个.default 大部分参数被注释掉了,但是也有没注释掉的,是否起作用? 和 conf 文件的优先级是?
网上教程经常改 conf,或者在 conf.d 里新建 conf 文件——不明白有何不同。 强迫症……
1
580a388da131 2017-06-11 02:37:23 +08:00
nginx -t
检测配置文件语法错误,同时会显示主配置文件路径 .default 这是备份文件,不起作用,很多项目都是这样 新建 .conf 后,可以在主配置文件中用 include 批量包含,目的是做到一个网站一个配置文件 |
2
580a388da131 2017-06-11 02:49:03 +08:00 1
/etc 习惯上存放配置文件的目录,.d 的意思是目录,里面包含了配置文件,前面的名字你可以自己起,这是 linux 的惯例。
其实你可以自己随便放,只要 nginx 的启动配置文件中用 include 加载就可以。 |
3
sylecn 2017-06-11 08:24:41 +08:00 via Android
看 nginx.conf 里面 include 是怎么写的就行了。
目录都是显式 include 的,并不强制目录名称。 配置项一般后面的会覆盖前面的。部分不允许覆盖的选项,nginx 会报 warning。启动和 reload 的时候可以在日志里面看到。 |
4
zwillhill OP @580a388da131 @sylecn 感谢回复。
默认 include conf.d 目录, 早上测试了下,权限方面大约是 nginx.conf>conf.d 文件夹>default.d 文件夹, conf.d 能设置 server,但不能设置 http ——但如果其中 server 设置和 nginx.conf 冲突的话,nginx 启动出错。 而 default.d 文件夹中的配置不能设置 server。 gzip 应该是属于 http 级别的? |
5
sylecn 2017-06-11 17:09:07 +08:00 via Android
gzip 可以配置的作用域见
http://nginx.org/en/docs/http/ngx_http_gzip_module.html#gzip Syntax: gzip on | off; Default: gzip off; Context: http, server, location, if in location |
6
WhiteLament 2017-06-11 20:48:30 +08:00
conf.d 目录下文件的优先级是按文件名字母序来的
同一个文件里的优先级是从上至下的(即有冲突的内容前面的匹配到后会忽略后面的) |
7
WhiteLament 2017-06-11 21:01:06 +08:00
为楼上“同一个文件里的优先级”补充一下
例如用 abc.com 反代了一个程序,访问 abc.com 时需要浏览器自动跳转到 abc.com/subpath 那么下面这样写可以达到目的( location =/ 表示仅仅匹配 / ,location /匹配以 / 开头的任意。) server { server_name abc.com; location =/ { return 301 /subpath; } location / { proxy_pass xxx; } } 而下面这样交换顺序后就失效了,Nginx 匹配到 location /就忽略了 location =/ server { server_name abc.com; location / { proxy_pass xxx; } location =/ { return 301 /subpath; } } |
8
WhiteLament 2017-06-11 21:04:05 +08:00
>>网上教程经常改 conf,或者在 conf.d 里新建 conf 文件——不明白有何不同。
因为实际情况一台机器上往往会有多个站点,每个站点一个单独的 conf 文件更方便维护,出错了也容易排查 ( nginx 经常一个配置出问题就全部罢工) |
9
zwillhill OP @WhiteLament 感谢热心回复,谢谢啦
|
10
julyclyde 2017-06-11 23:14:08 +08:00
启动 nginx 时,命令行写的那个为准。如果没写,以默认配置文件名为准
其他的都是被 include 进来的 |
11
dylanninin 2017-06-18 10:28:03 +08:00
@WhiteLament 大概看了下『为楼上“同一个文件里的优先级”补充一下 』,发现你对 Nginx localtion 规则有很大的误解;很多人可能也一样,最开始我也是这么理解的,但没有亲自去验证。(这里并无任何冒犯的意思~
看到这里,觉得有必要补充下,在 Nginx 你编写指令的先后顺序一般情况下并没有那么重要,要取决于 Nginx 内部的解析阶段、机制。摘录 《 Nginx 开发从入门到精通》的部分 http://tengine.taobao.org/book/chapter_11.html#id9 1. Nginx 路径的分类 - 普通前端匹配的路径,例如 location / {} - 抢占式前缀匹配的路径,例如 location ^~ / {} - 精确匹配的路径,例如 location = / {} - 命名路径,比如 location @a {} - 无名路径,比如 if {}或者 limit_except {}生成的路径 2. Nginx location 的大致匹配顺序 - 精确匹配的路径和两类前缀匹配的路径(字母序,如果某个精确匹配的路径的名字和前缀匹配的路径相同,精确匹配的路径排在前面) - 正则路径(出现序) - 命名路径(字母序) - 无名路径(出现序) 看原文链接更加详细,还有代码示例。以上是原理,推荐系统性的学习、实践下。 其实还有一个很朴素的办法:实践,通过实践去验证自己的猜想;而非让它们停留在猜想甚至是臆想的阶段。 推荐大家可以看看我总结的分享《 Nginx Essential 》 https://www.slideshare.net/DylannininGogh/nginx-essential-68703694,这里做了一个简单的总结,也有测试的配置。 若有任何错误、疏漏,请随时批评指正。 |
12
ytlm 2017-09-06 18:27:03 +08:00
一般还是习惯 nginx -p /prefix -c /prefix/conf 这种方式启动 nginx
|