使用 Apache httpd 搭建 HTTP/HTTPS/FTP (正向)代理服务器

来源:互联网 发布:淘宝付款失败钱扣了 编辑:程序博客网 时间:2024/06/01 20:15

为什么选择 Apache httpd

事实上代理服务器用的最多的还是 squid, 因为对它不熟,还是想在 Nginx 和 Apache httpd 之间选,但是 nginx 生来是用作反向代理(Reverse Proxy)的,它对正向代理(Forward Proxy)的支持并不好,因此选择 Apache httpd.
Apache httpd 不仅支持正向代理和反向代理,而且还支持 HTTPS, FTP 的代理。

正向代理和方向代理

正向代理:代理客户端,由客户端搭建,访问任意网站(Nginx 在此处的配置并不灵活,因为 Nginx 天生是为反向代理准备的)。
反向代理:代理服务端,由服务端搭建,访问的网站就是指定的服务端网站,通常被用作服务端的防火墙和负载均衡器。
Forward Proxies and Reverse Proxies/Gateways

安装版本

httpd-2.4.6-40.el7.centos.x86_64

配置 mod_proxy

在 /etc/httpd/conf.modules.d/00-proxy.conf 中增加如下两行:

ProxyRequests OnProxyVia On

增加完之后的完整内容:

# This file configures all the proxy modules:LoadModule proxy_module modules/mod_proxy.soLoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.soLoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.soLoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.soLoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.soLoadModule proxy_ajp_module modules/mod_proxy_ajp.soLoadModule proxy_balancer_module modules/mod_proxy_balancer.soLoadModule proxy_connect_module modules/mod_proxy_connect.soLoadModule proxy_express_module modules/mod_proxy_express.soLoadModule proxy_fcgi_module modules/mod_proxy_fcgi.soLoadModule proxy_fdpass_module modules/mod_proxy_fdpass.soLoadModule proxy_ftp_module modules/mod_proxy_ftp.soLoadModule proxy_http_module modules/mod_proxy_http.soLoadModule proxy_scgi_module modules/mod_proxy_scgi.soLoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.soProxyRequests OnProxyVia On

配置参考至 mod_proxy 官方文档

代理服务器访问控制

ProxyRequests Directive

In order to get the functionality of proxying HTTP or FTP sites, you need also mod_proxy_http or mod_proxy_ftp (or both) present in the server.
In order to get the functionality of (forward) proxying HTTPS sites, you need mod_proxy_connect enabled in the server.

  • 开启 HTTP 代理 - enable mod_proxy_http
  • 开启 FTP 代理 - enable mod_proxy_ftp
  • 开启 HTTPS 代理 - enable mod_proxy_connect

测试

测试 HTTP 和 HTTPS 代理

curl -x "127.0.0.1:8998" http://httpbin.org/getcurl -x "127.0.0.1:8998" https://httpbin.org/get
0 0