登录  /  注册
博主信息
博文 39
粉丝 1
评论 0
访问量 69992
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
nginx 正向代理,反向代理以及PHP代理代理不出去
Dai的博客
原创
2643人浏览过

        因与银行合作部署项目,他们都是业务代码放在内网区,外部请求业务代码数据以及 业务代码向互联网请求数据都需要通过一台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;
        }


        

本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学