查看: 3967|回复: 0

(Apache+Nginx)二级目录反向代理设置方法,二级目录做排名教程

[复制链接]

2万

主题

141

回帖

7万

积分

管理员

高级管理员

积分
70477
发表于 6-4 00:55 | 显示全部楼层 |阅读模式
(Apache+Nginx)二级目录反向代理设置方法,二级目录做排名

1:Apache设置反向代理泛目录(二级目录)的方法:

1.设置httpd.conf
打开Apache24/conf文件夹下的httpd.conf设置文件,找到一下几行把前面的注释‘#’删除
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_modulemodules/mod_proxy_connect.so
LoadModule proxy_ftp_modulemodules/mod_proxy_ftp.so
LoadModuleproxy_http_modulemodules/mod_proxy_http.so


(Ps:很多人都会注释LoadModuleproxy_balancer_modulemodules/mod_proxy_balancer.so,然而这个是做负载均衡用的一个功能,单纯做反向代理的话,不需要用这个,而且取消了这里的注释不进行相应的设置的话,会导致apache服务无法开启)
然后找到
Include conf/extra/httpd-vhosts.conf
这一行前面的注释‘#’也删除,引入这个文件
apache反向代理二级目录
<VirtualHost *:80>
ServerName 7428.com.cn
#ServerAlias 7428.com.cn
ProxyPassMatch ^/zk(.*)$ https://www.heimaoxuexi.net:80/$1
ProxyPassMatch ^/zk(.*)/$ https://www.heimaoxuexi.net:80/$1
ProxyPass /zk https://www.heimaoxuexi.net:80/
ProxyPassReverse /zk https://www.heimaoxuexi.net:80/
</VirtualHost>


以上代码的意思是把www.heimaoxuexi.net的zk开头的目录泛解析到https://www.heimaoxuexi.net:80/zk上面。

2:Nginx配置二级目录反向代理本机不同端口

安装Nginx

如果想要安装最新版本,建议从官网下载源码,然后编译安装。不过我这里偷懒直接使用仓库源安装的,这样一个比较快,二个安装目录和systemd脚本都弄得好好的,堪称开箱即用啊。
Ubuntu/Debian
$ sudo apt-get update
$ sudo apt-get install nginx


反向代理配置

直接编辑nginx配置文件即可,文件所在位置/etc/nginx/config.d/default.conf

$ sudo vim /etc/nginx/config.d/default.conf

upstream gitlab {
    # 这里我们需要先手动修改Gitlab的默认访问端口,默认为80
    server 192.168.1.2:8098;
}
upstream apache {
    server 192.168.1.2:8090;
}
upstream rabbit {
    server 192.168.1.2:15672;
}
server {
        listen    80;
        server_name    localhost;
        charset    utf-8;
        # http://192.168.1.2/file 即可访问apache文件服务器
        location /file {
            proxy_pass http://apache/;
        }
        location /rabbit {
          proxy_pass http://rabbit/;
           port_in_redirect   on;
           proxy_redirect     off;
           proxy_set_header   Host             $host;
           proxy_set_header   X-Real-IP        $remote_addr;
           proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
      }

        location /jenkins {
            proxy_pass http://192.168.1.2:8088/jenkins/;

        # Fix the "It appears that your reverse proxy set up is broken" error.
        # 修复点击系统管理,出现的反向代理设置有误提示
        port_in_redirect   on;
        proxy_redirect     off;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
        }

    # 直接IP访问就是Gitlab
    location / {
        proxy_pass http://gitlab/;
    }
}

     Nginx是一个非常强大的工具,这里只是使用到了其实很小的一部分功能。当然也有其他的途径可以做到,但是很少有Nginx这样简单方便的。

     配置的过程中,需要注意的是Jenkins的配置,只配置一个proxy_pass的话,它会提示代理配置有误,所以需要多加一些配置。还有就是通过反向代理配置的Jenkins好像不能登录,会出现跳转到j_acegi_security_check报404错误,因为是自己家里用,所以我就直接去掉登录功能了,在Configure Global Security选项中,将启用安全钩去掉就好了。
如果有懂这个反向代理怎么登录的,还望不惜赐教。

3:Nginx通过二级目录(路径)映射不同的反向代理,规避IP+端口访问

先说一下开发那边提来的2个case:

①、同一个域名需要反向代理到前台和后台(不同机器和端口);

②、需要采用IP+端口的模式,嵌入到APP作为DNS污染后的备选方案。

对于第①个问题,很好解决:通过区分二级目录来反代不同的节点即可,所以代码类似如下:
server {
        listen 80;
        server_name demo.domain.com;
        #通过访问service二级目录来访问后台
        location /service/ {
            #DemoBackend1后面的斜杠是一个关键,没有斜杠的话就会传递service到后端节点导致404
            proxy_pass      http://DemoBackend1/;
            proxy_redirect  off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
        #其他路径默认访问前台网站
        location / {
            proxy_pass http://DemoBackend2;
            proxy_redirect  off;
            proxy_set_header  Host  $host;
            proxy_set_header  X-Real-IP  $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
#简单的负载均衡节点配置
upstream DemoBackend1 {
     server 192.168.1.1;
     server 192.168.1.2;
     ip_hash;
}
upstream DemoBackend2 {
     server 192.168.2.1;
     server 192.168.2.2;
     ip_hash;
}

如上配置即可实现通过一个域名来反代不同的后端节点,用到的思路就是匹配二级目录来反代。
对于第②个问题,可能粗略一看,还没理解是个啥意思吧!

其实就是现在业界流行的一种防DNS污染的解决方案之一:手机APP里面除了通过域名来获取数据,还会额外嵌入一些备用的IP。APP在获取数据时,会先通过域名向服务器发起一个简单的校验请求,如果得到的不是预期数据,说明该网络环境下的DNS已被污染,比如被运营商劫持,请求A内容却给你展示B内容!这时候,APP将会启动备用预案,通过IP的方式来请求数据!很明显,这个做法可以有效避免恶心的DNS劫持了(看完这段是不是有所收获呢?)。

做法很简单,就是在APP中集成多个IP和端口作为备用的访问途径。

当开发GG找到我,提出的需求是:

需要实现公网IP+端口来访问,比如邮件API使用 http://192.168.1.10:125

Ps:公网服务器是多线的,那么就有多个IP,本文假设电信是192.168.1.10,联通是192.168.2.10,移动是192.168.3.10等
说白了就是要用端口来区分不同的API,此时如果我不深究,顺手可能会写出如下配置:
#API1
server {
        listen 125;
        server_name 192.168.1.10 192.168.2.10 192.168.3.10;
        location / {
            proxy_pass      http://DemoBackend;
            proxy_redirect  off;
            proxy_set_header   Host  api1.domain.com;
            proxy_set_header   X-Real-IP   $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}
#API2
server {
        listen 126;
        server_name 192.168.1.1 192.168.2.1 192.168.3.1;
        location / {
            proxy_pass      http://DemoBackend;
            proxy_redirect  off;
            proxy_set_header   Host  api2.domain.com;
            proxy_set_header   X-Real-IP   $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}

##API n等等....

粗略一看,确实是可以实现开发GG的要求啊!再仔细一想,你会发现如此做法会开放越来越多的端口!运维成本以及辨识度低还只是其次,咱说好的安全第一呢?

经过思考和测试,我写出的最终配置如下:

#新增的IP映射配置
server {
        listen 80;
        server_name 192.168.1.10 192.168.2.10 192.168.3.10;
        location /mail_api/ {
            proxy_pass      http://DemoBackend/; #后面的斜杠不能少,作用是不往后端传递/mail-api 这个路径
            proxy_redirect  off;
            proxy_set_header  Host  mailapi.domain.com; #传递不同的host给后方节点,实现IP和域名均可以访问
            proxy_set_header  X-Real-IP  $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        }
        location /other_api1/ {
            proxy_pass      http://DemoBackend/;
            proxy_redirect  off;
            proxy_set_header  Host  otherapi1.domain.com;
            proxy_set_header  X-Real-IP  $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        }
        #还可以添加更多映射,通过不同的路径来映射不同的API,最后对于直接访问IP则返回403,防网络上的扫码探测
        location / {
            return 403;
        }
}
#原有的域名映射
server {
     listen 80;
     server_name mailapi.domain.com;
     location / {
            proxy_pass      http://DemoBackend;
            proxy_redirect  off;
            proxy_set_header  Host  $host;
            proxy_set_header  X-Real-IP  $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}
server {
     listen 80;
     server_name otherapi1.domain.com;
     location / {
            proxy_pass      http://DemoBackend;
            proxy_redirect  off;
            proxy_set_header  Host  $host;
            proxy_set_header  X-Real-IP  $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}

#简单的节点配置(当这些API都用到同一个Backend时,上述代码中的proxy_set_header传递的host就起到了关键性作用!)
upstream DemoBackend {
     server 192.168.10.1;
     server 192.168.10.2;
     ip_hash;
}

最终实现的效果就是:你要通过IP请求邮件API,只要请求 http://192.168.1.1/mail_api/ 即可,而不需要开放多余端口。而且,后续要新增更多API,只需要定义不同的二级路径即可,这些二级路径的辨识度可比端口要好得多!

Ps:正如代码中的注释,示例代码只用了一个 DemoBackend 节点配置,为的是分享另一个小技巧:当后端节点承载了多个站点而且都是监听80端口时(比如某些小公司同一个IIS服务器部署了N个站点),反向代理中的proxy_set_header参数,可以自定义传递一个host域名给后端节点,从而正确响应预期内容!

这段解释有点无力,还是拿实际例子举例吧!

我之前供职的公司节点用的是IIS服务器,前端用Nginx反向代理,IIS服务器上有多个站点,站点之间部分会通过 rewrite 规则联系起来。

打个比方:比如A网站有个专题内容(www.a.com/zt/)是通过IIS伪静态映射到了B网站(content.b.com)。也就是访问到http://www.a.com/zt/,其实最后是通过A网站映射到了B网站上面。

后来发现IIS有个伪静态BUG,会经常奔溃,就要我用前端的Nginx来实现直接映射,而不再走IIS的A网站中转。

那么这个需求就正好用到了 proxy_set_header 技巧,一看就懂:
server {
     listen 80;
     server_name www.a.com;
     location /zt/ {
            proxy_pass      http://ABackend; #都是相同的节点,此示例代码我就不写upstream了
            proxy_redirect  off;
            proxy_set_header  Host www.b.com; #这里就是关键性作用,传递b域名给后端IIS
            proxy_set_header  X-Real-IP  $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}

#upstream略..
很明显,通过传递自定义域名,就可以实现通过A网站访问Nginx,返回B网站内容,和反向代理谷歌的原理是一致的。

当然,上文为了实现 IP 和域名都可以访问,这个proxy_set_header 设置也是必须的。说白了就是在反代过程中,对后端服务器伪装(传递)了一个自定域名,让后端响应该域名预期内容。

4:二级泛目录霸屏源码:实现秒收录秒排名核心技术

     二级泛目录详细介绍先说下这个二级泛目录,二级泛目录是利用高质量高权重网站的权重借力输出到内页。也就是说做二级泛目录你需要有一个高质量高权重的网站二级目录使用权,这个二级目录你可以去租,也可以去买,当然,如果你自己有合适也可以,总而言之你要做二级泛目录就必须要有一个高权重高质量的网站二级目录使用权才行。

     有了二级目录,你还需要一台服务器放泛目录程序,这个服务器不管是windows还是linux的,如果泛目录程序支持就可以。这个泛目录程序也是非常重要的,可以说直接关系到关键词页面的收录和排名,所以大家在选择泛目录程序的时候一定要注意了,毕竟网上骗子很多,有很多都是在互联网上随便下载一些垃圾程序,然后就忽悠你卖给你,通常这种骗子有2个特征,第一是没有官方网站,第二是没有程序演示站,还希望各位擦亮自己的眼睛。二级泛目录程序搭建好以后,首先需要先测试下程序源码是不是跑的正常,没出问题,以及生成的页面内容是不是你想要的,这些都需要自己先调试好,确定这些都没有问题的时候在去把二级目录对接上(也就是二级目录反向代理)。

      二级目录做反向代理其实也很简单,也就是几行代码和几个设置步骤就搞定了,Linux主机的设置就很简单,几行代码就搞定了,如果你不懂怎么写的话,百度一下有很多规则代码,复制下来把网址修改下就行了。Windows主机的话也可以用代码实现,也可以直接在iis上直接界面化设置规则,也很简单,如果你不会的话,百度一下也会有很多详细操作步骤的,因为这篇文章只是讲解二级泛目录大概的来龙去脉以及实现秒收录秒排名,具体详细细节需要另写了,不然完全写不下的,还请各位见谅哈。

       快速实现秒收录核心技术你对接的网站内容质量首先要过关,网站平时发布的文章也可以很快被搜索引擎收录,泛目录程序生成的内容页面原创度一定要达标才行(这点很重要),也就是要符合搜索引擎胃口,否者搜索引擎可能会不收录的。快速实现秒排名核心技术秒排名的前提是内容质量(原创度)需要过关,现如今百度搜索引擎也一直在打击这块,很多网站内容出现抄袭的情况被降权都导致内页没有排名了,所以,想要好的排名,关键词页面的内容原创度也是非常重要的哦!








回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条