我们有带有自签名 SSL 证书的 HTTPS 测试服务器。是否有任何反向代理可以让我们以 HTTP 访问页面,以便我们的程序可以发送 HTTP 请求而不是 HTTPS 请求?
答案1
您可以使用 apache 来完成此操作。
首先,您需要加载 ssl、proxy、proxy_http 和 proxy_html 模块。
然后,您需要如下代理设置:
<VirtualHost 0.0.0.0:80>
ServerName give_it_a_name
SSLProxyEngine on
ProxyPass / https://your-test-server/
ProxyPassReverse / https://your-test-server/
ErrorLog /the/error.log
</VirtualHost>
当然,您不需要 VirtualHost,您可以将 ProxyPass* 和 SSLProxy* 指令嵌入到任何其他主机定义中。
请注意,证书必须由受信任的机构签名。如果您使用自签名证书,则必须使用
SSLProxyCACertificateFile /the/pem/file
或者
SSLProxyCACertificatePath /the/dir/where/the/cert/files/are
指令。
此外,Apache 还会检查远程主机的名称是否与颁发证书的名称相同。您可以通过添加
SSLProxyCheckPeerCN off
行到您的配置中。有关进一步的设置,您可能需要检查Apache 文档。
答案2
如果您的测试服务器启用了 HTTP,您可以简单地代理到该协议(假设 apache 和 mod_rewrite):
RewriteEngine On
RewriteRule ^/foo(.*)$ http://testserver.example.org/$1 [P]
如果未加密的 HTTP 端口上没有任何内容监听,那么您就不能直接剥离 SSL。
答案3
RewriteEngine On
RewriteRule ^/foo(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R]