在使用Apache作为反向代理转发请求时,可以通过设置转发代理来实现
简而言之。
-
- 外部サイトにアクセスする際に、プロキシを踏まなければならない
-
- でも、使うソフトウェアがプロキシに対応していない
-
- Apacheでリバースプロキシを立てて、対象のソフトウェアの代わりにApacheにプロキシを踏んでもらおう
- 透過型プロキシとか言わない
那个想要设法从代理环境中逃离出去的故事。
环境
我们将在Ubuntu Linux 18.04 LTS版本上进行。
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.4 LTS
Release: 18.04
Codename: bionic
将此服务器的IP地址设为192.168.33.10。
安装和版本的Apache。
$ sudo apt install apache2
$ /usr/sbin/apache2 -v
Server version: Apache/2.4.29 (Ubuntu)
Server built: 2019-09-16T12:58:48
我们将安装mod_ssl和mod_proxy。考虑到使用HTTPS时需要使用转发代理,我们还将安装mod_proxy_connect。
$ sudo a2enmod ssl proxy_http proxy_connect
启用默认的HTTP网站。
$ sudo a2ensite default-ssl
暫時重啟 Apache。
$ sudo systemctl restart apache2
我将在这个环境下开始。
设置
让我们将代理主机的目标网站设定为以下内容。
-
- HTTP … http://wttr.in/tokyo
HTTPS … https://www.google.com
模式会由以下三个方面构建。
-
- HTTP(8080) → フォワードプロキシ → HTTP(ターゲット)
-
- HTTP(18080) → フォワードプロキシ → HTTPS(ターゲット)
- HTTPS(8443) → フォワードプロキシ → HTTPS(ターゲット)
最后两个可能不完全像中间人,但作为变化的选择我们可以记住。
参考文件在这里。
-
- mod_proxy
-
- ProxyRemote
- SSLProxyEngine
以最小的设置方式进行设置。
HTTP(8080端口)→ 前向代理 → HTTP(目标站点)
设定
Listen 8080
<VirtualHost *:8080>
ProxyPass / http://wttr.in/tokyo
ProxyPassReverse / http://wttr.in/tokyo
ProxyRemote * http://[your-proxy-host]:[your-proxy-port]
</VirtualHost>
如果要使用正向代理,关键是使用ProxyRemote指令。
确认。
$ curl -I 192.168.33.10:8080?lang=ja
HTTP(18080端口) → 转发代理 → HTTPS(目标)
设置。
Listen 18080
<VirtualHost *:18080>
SSLProxyEngine on
ProxyPass / https://www.google.com
ProxyPassReverse / https://www.google.com
ProxyRemote * http://[your-proxy-host]:[your-proxy-port]
</VirtualHost>
如果代理服务器是HTTPS的话,就需要使用SSLProxyEngine指令。
确定。
$ curl -I 192.168.33.10:18080
注意:本次配置假定Apache能够理解目标的SSL证书。
HTTPS(8443) → 转发代理 → HTTPS(目标)
设置。
Listen 8443
<VirtualHost *:8443>
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
SSLProxyEngine on
ProxyPass / https://www.google.com
ProxyPassReverse / https://www.google.com
ProxyRemote * http://[your-proxy-host]:[your-proxy-port]
</VirtualHost>
由于Apache自身和代理目标都需要使用HTTPS,因此需要同时启用SSLEngine和SSLProxyEngine。
确认。
$ curl -I -k https://192.168.33.10:8443
由于Apache证书是自签名证书,因此在curl选项中需要使用-k。
总结
这样做,不是直接访问原始网站,而是通过Apache,并通过Apache设置反向代理,即使软件不支持代理也可以实现代理访问。
当然,从客户端软件的角度来看,访问目标的更改是必要的,但是可以通过某种方法达到。