发现 Nginx 的注释也是会影响执行,死坑一上午... - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
imdong
V2EX    程序员

发现 Nginx 的注释也是会影响执行,死坑一上午...

  •  
  •   imdong
    imdong 2019-05-24 11:35:47 +08:00 7301 次点击
    这是一个创建于 2337 天前的主题,其中的信息可能已经有所发展或是发生改变。
    server { listen 80; server_name _; root /path/web; index index.php index.html index.htm; # pass the PHP 7.3 scripts to FastCGI server listening on 127.0.0.1:9073 location / { include fastcgi_params; fastcgi_pass 127.0.0.1:9073; fastcgi_param SCRIPT_FILENAME $document_root/index.php; } location ~* \.(html|htm|txt)$ { # something you want } } server { listen 81; server_name _; root /path/web; index index.php index.html index.htm; # pass the PHP 7.3 scripts to FastCGI server listening on 127.0.0.1:9073 location / { include fastcgi_params; fastcgi_pass 127.0.0.1:9073; fastcgi_param SCRIPT_FILENAME $document_root/index.php; } location ~* \.(html|htm|txt)$ { } } 

    这两段代码居然是不等效的,神特么坑...

    第 1 条附言    2019-05-24 13:06:29 +08:00

    感谢 @suriv520 的提示,果然是个乌龙,帮同事解决完就发到v2上然后去吃饭了。 回来在自己电脑上重新做了对比试验,确实没有复现。 刚刚去同事的电脑上再次试验,也没能复现问题,仔细查找后,找到了乌龙所在...

    这里描述下整个乌龙事件大致过程: 同事新配置一个项目(macOS Mojave + Yii2 + PHP 7.3 + Nginx 1.15.12) tips: 其实和(以上)环境无关

    所有的静态文件都被指向了 PHP 执行,导致访问静态文件 404 。

    很简单嘛,调整 Nginx 配置即可,她原来是用的 try_files 重写到 PHP 执行, 没写静态文件的 locationm,懒得测试修改,直接把我的配置文件发给她了。 她自己搞了半天,没搞定,我就过去帮忙弄了。

    # filename: admin.conf (我的配置文件) server { listen 80; server_name admin.***.top; root /Users/***/htdocs/manager/web; index index.php index.html index.htm; # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9073 location / { include fastcgi_params; fastcgi_pass 127.0.0.1:9073; fastcgi_param SCRIPT_FILENAME $document_root/index.php; } location ~* \.(ico|css|js|gif|jpg|jpeg|png|woff|ttf)(\?.*)?$ { # something you want } location ~* \.(html|htm|txt)$ { # something you want } } 

    由于她有自己的一些重写规则,就没直接覆盖,而是修改。

    把 try_files 的 location 和 PHP 相关的,干掉; 改成了 fastcgi_pass 的那一段。 测试重写,正常后。

    location ~* \.(ico|css|js|gif|jpg|jpeg|png|woff|ttf)(\?.*)?$ { 

    复制过去,加入 } 结束后,测试 robots.txt 结果文件依然 PHP 的 404 ,并确认文件确实的存在。

    反复对比配置文件,注释其他所有不相关的段,均未解决。 最后,加上唯一没写的 # something you want 切换浏览器(切错另一个浏览器),默认打开的首页,刷新,显示正常了...

    然后删除注释,切换浏览器(原来 robots.txt 页面的) 刷新,依然 404。

    嗯,问题到这里,好像没有这行注释,Nginx 似乎会忽略这一段。 于是,问题就告一段落了,就准备去吃饭了。

    刚刚,回来后,又仔细检查以后,发现问题了... 这个静态相关的 loction 里面没有 txt ...

    txt 相关的在最后一个 html 的 loction 没复制过去...

    同志们啊,这个故事告诉我们什么呢?

    ...

    就是不要在妹子的电脑上帮妹子调东西... 装了多个不同版本的Nginx,自己都不知道用的哪个... 开了 N 多(不同的)浏览器窗口...

    当然,我也一直主张的: 有问题,一定不要找(成熟的)环境的锅,一定是自己哪里搞错了。 难以解决的问题都是简单的问题导致的。

    但是,没想到最后自己还是栽这上面了...

    铭记:在没有反复试验之前,请不要妄下结论。

    38 条回复    2019-05-24 19:32:10 +08:00
    xyqhkr
        1
    xyqhkr  
       2019-05-24 11:41:27 +08:00
    。。。神奇
    xzc19970719
        2
    xzc19970719  
       2019-05-24 11:42:48 +08:00 via Android
    为啥???
    pmispig
        3
    pmispig  
       2019-05-24 11:42:51 +08:00
    有啥区别?
    zzf2019
        4
    zzf2019  
       2019-05-24 11:43:44 +08:00
    有这种事吗?我也写过注释啊,没有啥问题啊
    Removable
        5
    Removable  
       2019-05-24 11:49:02 +08:00   1
    是不是端口不同导致的问题?毕竟变量不唯一。。。
    lonelygo
        6
    lonelygo  
       2019-05-24 11:51:12 +08:00
    真是注释的锅?
    xiri
        7
    xiri  
       2019-05-24 12:00:12 +08:00
    ???
    这两段代码不是只有端口不同吗,唯一的一句注释也是一模一样的啊
    xiri
        8
    xiri  
       2019-05-24 12:01:46 +08:00
    @xiri 完全看不懂楼主标题里的“注释”不同在哪
    FFLY
        9
    FFLY  
       2019-05-24 12:02:33 +08:00
    @pmispig @xiri

    貌似是“# something you want ”……
    zhihaofans
        10
    zhihaofans  
       2019-05-24 12:03:23 +08:00 via Android
    @xiri 兄啊,一共 3 句注释呢
    xiri
        11
    xiri  
       2019-05-24 12:07:40 +08:00
    @zhihaofans 额,,,刚刚眼瞎了,没看见。
    关键楼主也不说这个“不等效”具体体现在哪里,单按“等效”的字面意思理解的话,这两段配置的端口都不一样,本来就不是等效的啊
    suriv520
        12
    suriv520  
       2019-05-24 12:15:10 +08:00   1
    LZ 可以把事情与现象描述具体一点的。
    也请做交叉对照实验,比如把下面的 block 移到上面去,把 80/81 端口做个交换,把注释做个交换……再把结论发出来。
    先别急着下结论,研究深入一点,最终应该是会对 nginx 的配置、默认值、优先级有一个更深刻的认识。

    另附 nginx 关于注释的处理逻辑与函数:
    https://github.com/nginx/nginx/blob/34a8b4506a/src/core/ngx_conf_file.c#L692
    https://github.com/nginx/nginx/blob/34a8b4506a/src/core/ngx_conf_file.c#L158

    配置文件中的以#开头的注释被彻底跳过了,跳过的逻辑:
    https://github.com/nginx/nginx/blob/34a8b4506a/src/core/ngx_conf_file.c#L615-L625
    1daydayde
        13
    1daydayde  
       2019-05-24 12:20:34 +08:00   1
    @suriv520 #12 +10086,楼主直接说了结论,都没说发生了什么。
    VDimos
        14
    VDimos  
       2019-05-24 12:21:09 +08:00 via Android
    我不信这么重要的 bug 会出现在 nginx 这种级别的软件上
    ho121
        15
    ho121  
       2019-05-24 12:21:32 +08:00 via Android
    是不是注释那行有什么奇奇怪怪的不可见字符?
    suriv520
        16
    suriv520  
       2019-05-24 12:26:21 +08:00   4
    @0312birdzhang 我个人会尽量避免自带假设或者预设立场的提问,这对于获得知识并不好。且因为这篇帖子已经预设立场了,所以我只是就事论事讨论这个注释的问题。至于发生这个现象的具体原因,我应该是清楚的(源码级的那种清楚),但 who cares,毕竟这不是这篇帖子提出的问题。
    brust
        17
    brust  
       2019-05-24 12:39:16 +08:00
    好奇有什么区别,一直以为注释是无影响的,楼主 nginx 版本多少
    liangzi
        18
    liangzi  
       2019-05-24 12:42:53 +08:00
    docker 的注释也坑...
    dyxLike
        19
    dyxLike  
       2019-05-24 12:47:23 +08:00
    楼主倒是说清楚啊....哪句注释?产生了什么影响?
    aaa5838769
        20
    aaa5838769  
       2019-05-24 13:06:49 +08:00
    一直以为注释没有任何问题=
    watzds
        21
    watzds  
       2019-05-24 13:20:29 +08:00 via Android   1
    少说点“一定”吧
    stzz
        22
    stzz  
       2019-05-24 13:23:37 +08:00
    这个"她"是重点
    lusi1990
        23
    lusi1990  
       2019-05-24 13:28:32 +08:00 via Android
    重点难道不是 她
    brust
        24
    brust  
       2019-05-24 13:36:10 +08:00
    @liangzi #18
    吃了个 nginx 的瓜
    要不你给讲讲 docker 有啥坑
    redbuck
        25
    redbuck  
       2019-05-24 13:37:32 +08:00
    哈,有个笑话.

    程序员是最好的丈夫.
    他们相信有问题一定是自己的错
    woffee
        26
    woffee  
       2019-05-24 14:06:57 +08:00
    端口不一致,哈哈哈哈,我也遇到这么乌龙的事情。

    我和同事一起搞个新项目,他环境搭建好之后,我在我本地改了下,配置文件的端口号,代码里死活读不出来 PORT 的值。其他配置均可以读的出来。调试半天,差点就和楼主一样怀疑框架了:难道配置名不能取“ PORT ”?

    TMD 仔细一看,同事写的是 POST !艹
    xyqhkr
        27
    xyqhkr  
       2019-05-24 14:17:55 +08:00
    @liangzi docker-compose.yml 文件的注释和列对齐确实是个坑。
    liangzi
        28
    liangzi  
       2019-05-24 14:21:23 +08:00 via Android
    @brust 洗耳恭听
    fengyj
        29
    fengyj  
       2019-05-24 14:25:36 +08:00 via Android
    注释?ngnix 注释莫名其妙背锅
    cnzjl
        30
    cnzjl  
       2019-05-24 14:37:37 +08:00
    注释这个东西...之前写 mybatis 的 mapper,注释掉了一个占位符,也被执行了.
    cominghome
        31
    cominghome  
       2019-05-24 14:42:22 +08:00
    总结还算到位,一般遇到神奇的、令人抓狂的故障时,不要瞎质疑软件 /代码,冷静下来思考是不是自己配错了,大部分时候都是这样
    brust
        32
    brust  
       2019-05-24 14:43:35 +08:00
    @liangzi #28
    我说的是你给 讲讲 有什么坑
    你是不是误解我讲有什么坑,目前我没发现什么坑
    liangzi
        33
    liangzi  
       2019-05-24 14:49:17 +08:00
    @brust 那确实是我误解了 .....
    zw1one
        34
    zw1one  
       2019-05-24 14:53:02 +08:00 via Android
    散了吧,up 主在秀妹子
    demo
        35
    demo  
       2019-05-24 16:25:55 +08:00
    帮了妹子没下文了?
    lynndon720
        36
    lynndon720  
       2019-05-24 17:45:36 +08:00
    看下文本格式,unix 回车还是 windows 回车?
    xiaotianhu
        37
    xiaotianhu  
       2019-05-24 17:54:17 +08:00   1
    我的经验是
    如果是诡异的问题,一定是(大概率是)低级错误.首先怀疑自己
    真碰到成熟软件的 bug 也是不容易的.至少我还没有.
    xcoderan
        38
    xcoderan  
       2019-05-24 19:32:10 +08:00
    @demo 帮完妹子不就是该要去 KFC?当然不会再来回覆了,至少今天是这样
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     897 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 20:15 PVG 04:15 LAX 13:15 JFK 16:15
    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