通过 Apache 和 Squid 将 HTTP 请求转换为 HTTPS

通过 Apache 和 Squid 将 HTTP 请求转换为 HTTPS

我们有一个内部运行的服务,需要将文件上传到 S3,所有传出流量目前都通过我管理的 Squid 服务器路由。发送文件的服务仅支持 HTTP,但我们希望在从代理到 S3 时对它们进行加密。看来 Squid 无法本机执行此操作,因此我尝试在同一台 Ubuntu 服务器上的端口 80 上设置 Apache 2.2,以透明地将 URL 从 http 重写为 https,然后通过 3128 上的 Squid 进行代理。我只是无法找出正确的 Apache 配置。我认为它应该是这样的(假设本地 IP 是 10.1.2.3):

<VirtualHost 10.1.2.3>
    ServerName 10.1.2.3
    RewriteEngine on
    RewriteCond %{HTTPS} !=on
    RewriteCond %{SERVER_NAME} /\.s3-.*amazonaws\.com/
    RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
    ProxyRequests on
    <Proxy *>
        Order deny,allow
        Deny from all
        Allow from 10.0.0.0/8 # for example
    </Proxy>
    # now need to send rewritten https request through squid at 10.1.2.3:3128
</VirtualHost>

我一直没能理解最后一条评论。有什么建议吗?

答案1

不要使用 Rewrite 来实现这一点,使用一个简单的代理。似乎你需要一些描述这里

答案2

即使您确实需要 squid 来实现某些高级代理功能,我也会使用 nginx 来简化重定向和 http 标头处理。Nginx 还可以处理缓存。

在 /etc/nginx/conf.d/mysite.conf 中尝试这样的操作

根据需要替换缓存路径和服务名称。

proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m 
max_size=10g inactive=60m use_temp_path=off;

server {
    listen 80;
    server_name localhost 10.1.2.3;
    location / {
        proxy_cache my_cache;
        proxy_pass https://servicename.s3.amazonaws.com/;
    }
}

相关内容