请问 nginx 中几个文件夹和 conf 文件优先级是什么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
zwillhill
V2EX    Linux

请问 nginx 中几个文件夹和 conf 文件优先级是什么?

  •  
  •   zwillhill 2017-06-11 01:19:45 +08:00 10035 次点击
    这是一个创建于 3102 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 文件不明白有何不同。 强迫症……

    12 条回复    2017-09-06 18:27:03 +08:00
    580a388da131
        1
    580a388da131  
       2017-06-11 02:37:23 +08:00
    nginx -t
    检测配置文件语法错误,同时会显示主配置文件路径

    .default
    这是备份文件,不起作用,很多项目都是这样

    新建 .conf 后,可以在主配置文件中用 include 批量包含,目的是做到一个网站一个配置文件
    580a388da131
        2
    580a388da131  
       2017-06-11 02:49:03 +08:00   1
    /etc 习惯上存放配置文件的目录,.d 的意思是目录,里面包含了配置文件,前面的名字你可以自己起,这是 linux 的惯例。
    其实你可以自己随便放,只要 nginx 的启动配置文件中用 include 加载就可以。
    sylecn
        3
    sylecn  
       2017-06-11 08:24:41 +08:00 via Android
    看 nginx.conf 里面 include 是怎么写的就行了。
    目录都是显式 include 的,并不强制目录名称。

    配置项一般后面的会覆盖前面的。部分不允许覆盖的选项,nginx 会报 warning。启动和 reload 的时候可以在日志里面看到。
    zwillhill
        4
    zwillhill  
    OP
       2017-06-11 16:20:00 +08:00
    @580a388da131 @sylecn 感谢回复。

    默认 include conf.d 目录,
    早上测试了下,权限方面大约是 nginx.conf>conf.d 文件夹>default.d 文件夹,
    conf.d 能设置 server,但不能设置 http 但如果其中 server 设置和 nginx.conf 冲突的话,nginx 启动出错。
    而 default.d 文件夹中的配置不能设置 server。

    gzip 应该是属于 http 级别的?
    sylecn
        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
    WhiteLament data-uid=
        6
    WhiteLament  
       2017-06-11 20:48:30 +08:00
    conf.d 目录下文件的优先级是按文件名字母序来的
    同一个文件里的优先级是从上至下的(即有冲突的内容前面的匹配到后会忽略后面的)
    WhiteLament
        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;
    }
    }
    WhiteLament
        8
    WhiteLament  
       2017-06-11 21:04:05 +08:00
    >>网上教程经常改 conf,或者在 conf.d 里新建 conf 文件不明白有何不同。
    因为实际情况一台机器上往往会有多个站点,每个站点一个单独的 conf 文件更方便维护,出错了也容易排查
    ( nginx 经常一个配置出问题就全部罢工)
    zwillhill
        9
    zwillhill  
    OP
       2017-06-11 21:22:46 +08:00
    @WhiteLament 感谢热心回复,谢谢啦
    julyclyde
        10
    julyclyde  
       2017-06-11 23:14:08 +08:00
    启动 nginx 时,命令行写的那个为准。如果没写,以默认配置文件名为准
    其他的都是被 include 进来的
    dylanninin
        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,这里做了一个简单的总结,也有测试的配置。

    若有任何错误、疏漏,请随时批评指正。
    ytlm
        12
    ytlm  
       2017-09-06 18:27:03 +08:00
    一般还是习惯 nginx -p /prefix -c /prefix/conf 这种方式启动 nginx
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5138 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 01:23 PVG 09:23 LAX 17:23 JFK 20:23
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86