在使用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设置反向代理,即使软件不支持代理也可以实现代理访问。

当然,从客户端软件的角度来看,访问目标的更改是必要的,但是可以通过某种方法达到。

bannerAds