Apache httpd 代理服务搭建
简介:使用Apache httpd来搭建代理服务是因为其免费,开源,可控性较高,文档较全。本文是以windows系统来代理服务器,linux客户端使用此代理服务。若是想windows使用其服务,比如浏览器使用直接配置浏览器的网络配置为代理即可。
一. 下载安装
下载地址:https://www.apachehaus.com/cgi-bin/download.plx
下载最新的适合自己的windows系统版本即可,我目前安装的版本为
httpd-2.4.29
下载后解压
二. 配置代理信息
打开配置文件Apache24/conf/httpd.conf:
38-39行修改根目录为自己放置Apache24的目录,这里不修改启动会报错
Define SRVROOT"C:/Users/lijianguo/Downloads/httpd-2.4.29-o102n-x64-vc14-r2/Apache24"
ServerRoot"${SRVROOT}"
Listen端口修改(修改成自己要监听的端口和ip)
Listen172.16.56.45:9001
加载所需的模块
LoadModuleaccess_compat_module modules/mod_access_compat.so
LoadModulelbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
LoadModulelbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModulelbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
LoadModulelbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so
LoadModuleproxy_module modules/mod_proxy.so
LoadModuleproxy_connect_module modules/mod_proxy_connect.so
LoadModuleproxy_ftp_module modules/mod_proxy_ftp.so
LoadModuleproxy_html_module modules/mod_proxy_html.so
LoadModuleproxy_http_module modules/mod_proxy_http.so
LoadModulexml2enc_module modules/mod_xml2enc.so
注释掉ssl模块,不然启动的时候需要443端口会报错
#LoadModulessl_module modules/mod_ssl.so
在最后添加Proxy配置, 开启Apache正向代理并允许所有的请求可以访问代理
ProxyRequestsOn
<Proxy *>
Requireall granted
</Proxy>
三. 启动运行
有两种方式可以启动:
1.双击httpd.exe
2.以管理员身份进入命令行到bin目录,使用命令httpd-k install 把Apache安装成系统服务,在服务列表里面可以查看是否安装成功
然后使用命令httpd -kstart 启动服务
httpd的命令参数详情可以使用httpd -h 查看
httpd -krestart //重启
httpd -k stop//停止
记得关闭本代理服务器电脑的防火墙,局域网内使用代理只需关闭域网络防火墙
四. 客户端配置验证
在需要用到linux机器上配置如下
vi /etc/profile //编辑此文件,在最下方添加如下代理配置
http_proxy=172.16.56.45:9901
https_proxy=$http_proxy
no_proxy=localhost,127.0.0.1
export http_proxyhttps_proxy no_proxy
其中
http_proxy:http协议使用代理服务器地址;
https_proxy:https协议使用安全代理地址;
172.16.56.45::代理地址,可以是IP,也可以是域名;
9901:使用的端口;
no_proxy:不使用代理的主机或IP。
保存退出,注销重新登陆系统即可生效。
验证之前不能连接外网的linux机器上验证是否可以通过代理成功上网
同时可打开Apache/logs/access.log日志查看访问路径
连接成功!
关闭代理服务
再次验证linux机器是否还能上外网
发现连接失败,至此代理服务安装成功,启动httpd服务可正常使用。
如果只是代码里面需要用到代理则不用在环境变量里面配置,如下java用httpClient使用代理调用接口的例子
public class ClientExecuteProxy { public static void main(String[] args)throws Exception { CloseableHttpClient httpclient = HttpClients.createDefault(); try { HttpHost target = new HttpHost("httpbin.org", 443, "https"); HttpHost proxy = new HttpHost("127.0.0.1", 8080, "http"); RequestConfig config = RequestConfig.custom() .setProxy(proxy) .build(); HttpGet request = new HttpGet("/"); request.setConfig(config); System.out.println("Executing request " + request.getRequestLine() + " to " + target + " via " + proxy); CloseableHttpResponse response = httpclient.execute(target, request); try { System.out.println("----------------------------------------"); System.out.println(response.getStatusLine()); System.out.println(EntityUtils.toString(response.getEntity())); } finally { response.close(); } } finally { httpclient.close(); } } }