Nginx 配置的疑惑

2016-06-20 21:32:59 +08:00
 chinajik

我的目的是 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; 什么意思,我没想通,跑了下页面貌似也没有错...

3268 次点击
所在节点    NGINX
7 条回复
detailyang
2016-06-20 21:49:00 +08:00
rewrite /(.+)$ /$1 break; 脱裤子放屁多此一举哈
coolloves
2016-06-20 22:15:27 +08:00
我理解的是 /(.+)$=/$1,执行后,break 了,所以访问 google.com 就是正常的 google.com
如果注释了,就反代到 localhost 去了
chinajik
2016-06-20 22:53:22 +08:00
@detailyang @coolloves
我这边测试的结果是,去掉注释的话, 域名走 www.google.com 然后是反代的 http://127.0.0.1:8080/google-e; 而这就是我想要的结果... 我只是不明白为什么这样写就可以....已经丢生产线了...
ryd994
2016-06-20 23:31:59 +08:00
@detailyang
@chinajik
@chinajik
试过在 google-e 后面加 /么?

rewrite 的 break 只是中断 rewrite 模块的处理,不影响其他。 Nginx 的配置文件是 declarative 的,绝大多数时候书写顺序是没有影响的,只有少数情况在同模块内有影响。比如 if 和上面的 break 都只是 rewrite 模块的指令。至于为啥 if 对其他指令也有效,请参见 if is evil 。
ryd994
2016-06-20 23:32:37 +08:00
@coolloves 不好意思 @ 错了
fangpeishi
2016-06-21 07:43:45 +08:00
@ryd994 正解~
@chinajik lz 有兴趣可以看看春哥这个教程: https://openresty.org/cn/ebooks.html
ryd994
2016-06-22 04:18:01 +08:00
@fangpeishi 这个教程也是我入门时看的,但其实不建议看这个。
夹带私货太多,基本上都在用 rewrite 或 lua 模块,正是他的作品。
而事实上,这两个模块并不是必用,有些功能用 nginx 核心指令完全可以更高效。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/287134

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX