我有几个 django 应用程序,想尝试使用 NGINX 进行缓存。我遵循了本指南。https://www.nginx.com/blog/nginx-caching-guide/
我使用include
指令在块中包含一个包含此行的文件http
......
proxy_cache_path /usr/share/nginx/cache levels=1:2 keys_zone=my cache:10m max_size=2g inactive=60m use_temp_path=off;
然后我进入sites-enabled
文件夹并将其添加到我的服务器块中,这些是 ssl 块......
server {
listen 443 ssl;
server_name example.com;
ssl_certificate my/path/to/ssl;
ssl_certificate_key my/path/to/ssl;
client_max_body_size 4G;
keepalive_timeout 5;
# Your Django project's media files - amend as required
location /media {
proxy_cache my_cache;
alias /home/example/media;
}
# your Django project's static files - amend as required
location /static {
proxy_cache my_cache;
alias /home/example/example/static_dump;
}
location / {
#Next two lines added while developing includes only ip's in the file
include /etc/nginx/ip-allow.conf;
deny all;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_cache my_cache;
proxy_pass http://app_server_example;
}
当我检查缓存文件的路径时,我看到它已经创建了一个./tmp
文件夹,所以我猜测权限是正确的,并且当我重新启动 nginxnginx -s reload
然后再重新启动时service nginx restart
,我再也没有收到任何错误。
为什么在我的网站收到请求后,这些缓存目录中没有出现任何文件?
答案1
最有可能的是,您的 Django 应用程序返回不允许缓存页面的 HTTP 缓存标头。
如果您想忽略 Django 缓存标头,那么您可以使用以下命令:
proxy_ignore_headers X-Accel-Expires Expires Cache-Control;