nginx 正向代理,反向代理以及PHP代理代理不出去
因与银行合作部署项目,他们都是业务代码放在内网区,外部请求业务代码数据以及 业务代码向互联网请求数据都需要通过一台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
实例
//创建GuzzleHTTPClient时,将HandlerStack传入$this->client=newClient(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{resolver114.114.114.114;#指定DNS服务器IP地址listen9447;proxy_connect;proxy_connect_allowall;location/{proxy_passhttps://$host$request_uri;#设定代理服务器的协议和地址proxy_set_headerHost$host;#proxy_ssl_server_nameon;#配置缓存大小proxy_buffers2564k;#关闭磁盘缓存读写减少I/Oproxy_max_temp_file_size0;#代理连接超时时间proxy_connect_timeout30;#配置代理服务器HTTP状态缓存时间proxy_cache_valid20030210m;proxy_cache_valid3011h;proxy_cache_validany1m;}}
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{resolver114.114.114;#可以使用8.8.8.8listen8080;#指定代理的端口location/{proxy_passhttp://$http_host$request_uri;#设定代理服务器的协议和地址}}1、、设置系统全局变量
# vi /etc/profile 将下面的添加到最后
http_proxy=http://172.25.114.72:8080/
export http_proxy
2、重新加载
# source /etc/profile
# curl -khttps://www.baidu.com
二、A服务器配置反向代理;使用9446端口进行反射代理到B服务器的
实例
location/End/public/{proxy_pass这边修改为B服务器的内网IP以及端口proxy_set_headerHost$host;proxy_set_headerX-Real-IP$remote_addr;proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;proxy_set_headerREMOTE-HOST$remote_addr;add_headerX-Cache$upstream_cache_status;add_headerCache-Controlno-cache;expires12h;}
更多相关文章
- tp6 全局异常处理
- 内网dns服务部署以及主从dns配置
- (视频) 基于HTML5的服务器远程访问工具
- rsync+inotify实现服务器的实时同步
- Android TCP Socket通信客户端/服务器端Demo(附APP源码)
- mongoDB入门系列之配置解释及错误汇总
- Playbook分发Nginx配置文件
- 实战--Playbook批量部署zabbix-agent
- 实战--Playbook批量更改服务器主机名