技术解析

Nginx 配置的疑惑
0
2021-05-25 19:01:21
idczone

我的目的是 www.google.com 反代内网 http://127.0.0.1:8080/google-e

server{
    listen  80;
    charset utf-8;
    server_name www.google.com;
    location / {
            charset  utf-8;
            #rewrite /(.+)$ /$1 break;
            proxy_pass http://127.0.0.1:8080/google-e;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_set_header X-Forwarded抗投诉服务器-Proto $scheme;
            proxy_buffering off;
            client_max_body_size    10m;
    }

这样写的话会跳转 www.google.com/google-e 然后访问空页面 200 如果把注释解除的话,就是正常地址 www.google.com

问题来了。。这个 rewrite /(.+)$ /$1 break; 什么意思,我没想通,跑了下页面貌似也没有错...


rewrite /(.+)$ /$1 break; 脱裤子放屁多此一举哈

我理解的是 /(.+)$=/$1,执行后,break 了,所以访问 google.com 就是正常的 google.com
如果注释了,就反代到 localhost 去了


我这边测试的结果是,去掉注释的话, 域名走 www.google.com 然后是反代的 http://127.0.0.1:8080/google-e; 而这就是我想要的结果... 我只是不明白为什么这样写就可以....已经丢生产线了...




试过在 google-e 后面加 /么?
rewrite 的 break 只是中断 rewrite 模块的处理,不影响其他。 Nginx 的配置文件是 declarative 的,绝大多数时候书写顺序是没有影响的,只有少数情况在同模块内有影响。比如 if 和上面的 break 都只是 rewrite 模块的指令。至于为啥 if 对其他指令也有效,请参见 if is evil 。

不好意思 @ 错了

正解~
lz 有兴趣可以看看春哥这个教程: https://openresty.org/cn/ebooks.html

这个教程也是我入门时看的,但其实不建议看这个。
夹带私货太多,基本上都在用 rewrite 或 lua 模块,正是他的作品。
而事实上,这两个模块并不是必用,有些功能用 nginx 核心指令完全可以更高效。

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服