全球主机交流论坛

标题: 请教下nginx子目录反代+根目录重写到子目录会死循环吗 [打印本页]

作者: 哈哈大侠    时间: 2012-10-26 11:49
标题: 请教下nginx子目录反代+根目录重写到子目录会死循环吗
是这样的,想反Google,但是我觉得顺便反代下快照会比较好(以前ggssl就是这么干的)

在百度找到例子是可以用子目录来反代不同站点(类似于/a/目录反代百度,/b/目录反代谷歌)
在这看到的 http://hi.baidu.com/woailiuxiaomi/item/ef716e6df78b8a12a1cf0fc4

经过测试,如果根目录反代到hostloc的话,子目录的反代规则不会生效,会出现hostloc的404(我用单手的那个教程上代码直接反代hostloc测试,并在这个规则的前面写的子目录反代别的站点)
就是子目录的写在前面

location /baidu/ {}
根目录的规则写后面
location / {}

脑子里只想到2个办法,第一个是单独建立个站点,但是觉得挺不爽的。第二个办法是把反代2个站点都写在子目录,然后把根目录重写到子目录。(担心死循环所以没试,所以想请教下有经验的前辈,这样会死循环么),或者首页跳转到子目录去

/*重写到/b/*

不过想到这个规则就怕是个死循环,因为/b/*也是属于/*的,这样岂不是会无限/b/b/b/b/b/b……或者nginx比较智能,只会重写一次,还有就是重写的时候先判断下是否/b/或者/a/开头可避免,不过本人愚钝 - - 不会写这样的规则,所以希望大神帮忙 来吧 有分加 发现写的好长 = =!
作者: Maser    时间: 2012-10-26 11:51
提示: 作者被禁止或删除 内容自动屏蔽
作者: 哈哈大侠    时间: 2012-10-26 11:54
Maser 发表于 2012-10-26 11:51
没玩过反代

那就玩玩啊,挺好玩的
作者: ccc    时间: 2012-10-26 12:00
我也没玩过啊
作者: lgsr    时间: 2012-10-26 12:32
不会
作者: 单手摘月    时间: 2012-10-26 12:42
提示: 作者被禁止或删除 内容自动屏蔽
作者: lazyzhu    时间: 2012-10-26 12:51
说实话,我没看懂楼主在说什么
作者: 哈哈大侠    时间: 2012-10-26 15:13
单手摘月 发表于 2012-10-26 12:42
可以的,location /lzmjj裏面反代另一個站,完全沒問題

= =。不是这个子目录反代。比如

www.xxx.com反代www.google.com
但是需要
www.xxx.com/b/*反代www.baidu.com

我试过了直接写2个规则,但是后面那个规则会被无视掉,放前面也是一样
作者: 哈哈大侠    时间: 2012-10-26 15:14
lazyzhu 发表于 2012-10-26 12:51
说实话,我没看懂楼主在说什么

写在8楼了你瞧瞧能看懂不……
作者: 单手摘月    时间: 2012-10-26 16:45
提示: 作者被禁止或删除 内容自动屏蔽
作者: Zeraba    时间: 2012-10-26 16:49
好想法 回头给我的山寨360的缓存爷反代下
其实我也不太理解你在说什么 子目录 同域名反代 多个conf 不是就可以么? 就是不知道配置文件能不能合并
作者: 哈哈大侠    时间: 2012-10-26 21:18
单手摘月 发表于 2012-10-26 16:45
完全没问题啊。。。

我之前就是这样写的,没用,我现在复制你的规则测试也是一样的(我在windows下试的)你可以打开看看真的,你这个访问mjj就是google的404页面

我自己解决了,唉,反复弄来弄去采搞定的,悲催,不管咋样谢啦

作者: 哈哈大侠    时间: 2012-10-26 21:20
Zeraba 发表于 2012-10-26 16:49
好想法 回头给我的山寨360的缓存爷反代下
其实我也不太理解你在说什么 子目录 同域名反代 多个conf 不是就 ...

多个站点的解决方法我不喜欢,子目录的意思是,同一个域名下,a目录打开是百度,b目录打开是谷歌,c目录打开是360,我是想让google和快照在一个域名下实现
作者: 单手摘月    时间: 2012-10-26 21:33
提示: 作者被禁止或删除 内容自动屏蔽
作者: 哈哈大侠    时间: 2012-10-26 21:38
单手摘月 发表于 2012-10-26 21:33
不搞了!

不知道xxx.com是x站,本地hosts了xxx.com到我vps ip。。。

嘿嘿,这个只会你这个ip和vps的ip断开一会而已把。虽然你那个不行不过我已经搞定啦。不用再麻烦了嘿嘿
作者: 单手摘月    时间: 2012-10-26 21:43
提示: 作者被禁止或删除 内容自动屏蔽
作者: 哈哈大侠    时间: 2012-10-26 21:51
单手摘月 发表于 2012-10-26 21:43
不只是我ip。。我开了大陆的ssh访问还是reset的。。。


a目录反代谷歌
b目录反代快照页(试过了可以用,但是因为德国那边可能限制了,谷歌出不来快照链接所以只能搁置了)

然后用rewrite ^/(.*) /a/$1;就可以了(放前面单独匹配/),之前不敢试怕vps上死循环害人,就在本机试了一下,确定没问题就更新上去了

不会出现死循环的情况,我的理解是这个在前面,重写网址之后后面的指令就是反代了,所以没有死循环的情况
作者: 单手摘月    时间: 2012-10-26 22:12
提示: 作者被禁止或删除 内容自动屏蔽
作者: 哈哈大侠    时间: 2012-10-26 22:20
单手摘月 发表于 2012-10-26 22:12
- -没看懂的说。。。把你整个conf贴出来吧= =
  1. server{
  2.         listen 80;
  3.         server_name g.com www.g.com;    #绑定的域名
  4.         index index.php;      #默认首页
  5.         access_log off;                #off 关闭日志
  6.        
  7.         location / {
  8.                         rewrite ^/(.*) /g/$1;
  9.         }


  10.         location /g/ {
  11.                         subs_filter www.google.com g.com;  #替换掉域名
  12.                         subs_filter 'webcache.googleusercontent.com/search?q=cache:' 'g.com/p/';
  13.                         proxy_set_header   X-Real-IP  $remote_addr;
  14.                         proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
  15.                         proxy_set_header   Referer http://www.google.com;        #强制定义Referer,程序验证判断会用到
  16.                         proxy_set_header   Host www.google.com;                  #定义主机头,如果目标站点绑定的域名个server_name项的吻合则使用$host
  17.                         proxy_pass http://www.google.com/;                        #指定目标,建议使用IP或者nginx自定义池
  18.                         proxy_set_header Accept-Encoding "";                        #清除编码
  19.         }


  20.         location /p/ {
  21.                         subs_filter webcache.googleusercontent.com g.com/p;  #替换掉域名
  22.                         proxy_set_header   X-Real-IP  $remote_addr;
  23.                         proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
  24.                         proxy_set_header   Referer http://www.google.com;        #强制定义Referer,程序验证判断会用到
  25.                         proxy_set_header   Host webcache.googleusercontent.com;                  #定义主机头,如果目标站点绑定的域名个server_name项的吻合则使用$host
  26.                         proxy_pass http://webcache.googleusercontent.com/search?q=cache:;                        #指定目标,建议使用IP或者nginx自定义池
  27.                         proxy_set_header Accept-Encoding "";                        #清除编码
  28.         }
  29. }
复制代码





欢迎光临 全球主机交流论坛 (https://fd.vvwvv.eu.org/) Powered by Discuz! X3.4