Blogger Information
Blog 39
fans 1
comment 0
visits 62269
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
nginx 正向代理,反向代理以及PHP代理代理不出去
Dai的博客
Original
2314 people have browsed it

        因与银行合作部署项目,他们都是业务代码放在内网区,外部请求业务代码数据以及 业务代码向互联网请求数据都需要通过一台Web区的代理转发;这就需要部署一台即可以进行反射代理,又可以正向代理的服务器了;

        先把注意点以及踩过的坑先说一下

            不建议正向代理与反向代理都通过一个接口,否则配置到你怀疑人生

           一、 A服务器正向代理配置几个端口看你的业务需求:  1、如果你只需要代理https,那么A服务器开通一个端口专门代理https服务器;2、如果你需要代理的即有http又有https,那么就开通两个端口,一个用于代理http;一个用于代理https;

            A服务器反向代理:也单独开通一个端口用于反射代理吧

        二、我配置完成这些后,在cmd命令行输入 curl  https://www.baidu.com, 正向请求到数据,但我执行PHP代码后,却连不能请求到数据,百度了一大圈也没啥用,后来就通过代码来进行代理 ;

        1、curl方法

            

实例

               $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_PROXY, '32.9.39.51:9447'); //这里进行代理到A服务器的IP以及端口
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        // POST数据
        curl_setopt($ch, CURLOPT_POST, 1);
        // 把post的变量加上
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        $output = curl_exec($ch);
        curl_close($ch);
        return $output;

        2、Guzzle HTTP Client

        

实例

// 创建Guzzle HTTP Client时,将HandlerStack传入
        $this->client = new Client(array('handler' => $stack,'allow_redirects' => true,'proxy' => '32.9.39.51:9447'));


        定位 :

            A服务器----------- 在外网Web区,可以访问互联网,也可以通过指定端口访问内网区,即我们所说的代理转发服务器

            B服务器------------在内网区,访问不了互联网

            一、、A服务器安装Nginx,

                   这里分两种情况讨论

                    第一种是已经安装完成了Nginx, 但你的正向代理却需要https

                    1、下载https代理模块,git地址:https://github.com/chobits/ngx_http_proxy_connect_module,如果不能下载就百度ngx_http_proxy_connect_module这个模块

                            下载完成后,看一下里面的readme文档,里面有介绍相应模块所对应的nginx版本           

                       2、查询当前 nginx 安装的配置信息,默认安装如下

                    # ./sbin/nginx -V

                    configure arguments: --prefix=/usr/local/nginx   --。。。。。。。。。。。。。。。。

        

                        # patch -p1 < /opt/tool/ngx_http_proxy_connect_module-master/patch/proxy_connect.patch

                        # ./configure --prefix=/usr/local/nginx --add-module=/opt/tool/ngx_http_proxy_connect_module-master

                        # make

                        # cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak

                        # cp ./objs/nginx /usr/local/nginx/sbin/

                        3、在A服务器配置正向代理

                    

实例

server {
    resolver 114.114.114.114; #指定DNS服务器IP地址
    listen 9447;
    proxy_connect;
    proxy_connect_allow all;
    location / {
        proxy_pass https://$host$request_uri; #设定代理服务器的协议和地址
        proxy_set_header Host $host;
#       proxy_ssl_server_name on;
        # 配置缓存大小
        proxy_buffers 256 4k;
        # 关闭磁盘缓存读写减少I/O
        proxy_max_temp_file_size 0;
         # 代理连接超时时间
        proxy_connect_timeout 30;

        # 配置代理服务器HTTP状态缓存时间
        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 301 1h;
        proxy_cache_valid any 1m;
        }
   }

            4、设置系统全局变量

                    # vi /etc/profile    将下面的添加到最后

                    http_proxy=http://172.25.114.72:8080/    这个填写A服务器的内网IP 以及端口

                    https_proxy=https://172.25.114.72:8084/  这个填写A服务器的内网IP 以及端口

                    export http_proxy https_prox no_proxy

                5、重新加载   

                    # source /etc/profile

                    # curl -k https://www.baidu.com


    2、第二种情况完成正向代理https 只需要http

        直接设置nginx配置文件即可

实例

server {
    resolver 114.114.114; #可以使用 8.8.8.8
    listen 8080; #指定代理的端口
    location / {
        proxy_pass http://$http_host$request_uri; #设定代理服务器的协议和地址
    }
}
    1、、设置系统全局变量

                    # vi /etc/profile    将下面的添加到最后

                    http_proxy=http://172.25.114.72:8080/

                    export http_proxy 

                2、重新加载   

                    # source /etc/profile

                    # curl -k https://www.baidu.com

        



          二、A服务器配置反向代理;使用9446端口进行反射代理到B服务器的

            

实例

location  /End/public/
        {
            proxy_pass   这边修改为B服务器的内网IP以及端口 
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header REMOTE-HOST $remote_addr;
                add_header X-Cache $upstream_cache_status;
                add_header Cache-Control no-cache;
                expires 12h;
        }


        

Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post