我们有一个内部运行的服务,需要将文件上传到 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/;
}
}