我想https://example.com
用 nginx 缓存来自(SSL/TLS!)的响应,因此基本上是一个缓存 10 分钟响应的正向代理。
我正在使用docker这图像,因为它已经ngx_http_proxy_connect_module
实现了。
目前我已经这样设置:
user www-data;
worker_processes auto;
events { }
http {
server_names_hash_bucket_size 128;
log_format cache_log '$remote_addr - $upstream_cache_status [$time_local] '
'"$request" $status $body_bytes_sent '
'URI: $request_uri - duration: "$request_time';
access_log /var/log/nginx_access.log cache_log;
error_log /var/log/nginx_errors.log;
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=inventory_cache:10m max_size=10g;
server {
listen 8888;
server_name xyz.com;
proxy_connect;
proxy_max_temp_file_size 0;
resolver 8.8.8.8;
location / {
proxy_cache inventory_cache;
add_header X-Cache-Status $upstream_cache_status;
proxy_pass https://$http_host;
proxy_set_header Host $http_host;
}
}
# Everything else is denied
server {
listen 8888;
server_name ~.+;
return 404;
}
}
我希望 $upstream_cache_status 显示缓存状态,但是它总是这样,-
所以我猜测缓存没有发生。
这可能是由于 SSL/TLS 造成的吗?我尝试提供ssl_certificate
,ssl_certificate_key
但随后出现了错误:未知指令ssl_certificate
。
我更喜欢使用普通的 nginx docker-image 的解决方案,但我无法传递 https 请求。对于我现在使用的图像,https 代理可以工作,但缓存不起作用。
因此,任何缓存 HTTPS 服务器响应的解决方案都是受欢迎的。我想知道这是否不可能?
或者换句话说:如果我无法控制的 HTTPS 服务器没有启用缓存,我该如何为自己启用它?
答案1
是的,你可以在 中执行此操作nginx
,但你的问题是由你使用的特定配置引起的,你必须更改配置方式SSL/TLS
user www-data;
worker_processes auto;
events { }
http {
server_names_hash_bucket_size 128;
log_format cache_log '$remote_addr - $upstream_cache_status [$time_local] '
'"$request" $status $body_bytes_sent '
'URI: $request_uri - duration: "$request_time';
access_log /var/log/nginx_access.log cache_log;
error_log /var/log/nginx_errors.log;
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=inventory_cache:10m max_size=10g;
server {
listen 8888 ssl;
server_name xyz.com;
ssl_certificate /path/to/your/certificate.crt;
ssl_certificate_key /path/to/your/private.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384';
ssl_prefer_server_ciphers on;
location / {
proxy_cache inventory_cache;
add_header X-Cache-Status $upstream_cache_status;
proxy_pass https://$http_host;
proxy_set_header Host $http_host;
}
}
# Everything else is denied
server {
listen 8888;
server_name ~.+;
return 404;
}
}
一定要更换/path/to/your/certificate.crt
和/path/to/your/private.key
如果仍然不起作用,您可以在location
块中添加以下内容
proxy_ignore_headers Cache-Control;
proxy_ignore_headers Set-Cookie;