博客列表 >nginx 正向代理,反向代理以及PHP代理代理不出去

nginx 正向代理,反向代理以及PHP代理代理不出去

Dai的博客
Dai的博客原创
2021年02月25日 16:58:182302浏览

        因与银行合作部署项目,他们都是业务代码放在内网区,外部请求业务代码数据以及 业务代码向互联网请求数据都需要通过一台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 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议