自动摘要
正在生成中……
nginx反向代理配置文件如下:
server {
listen 443 ssl;
server_name foo.com;
ssl_certificate /path/to/your/cert.pem;
ssl_certificate_key /path/to/your/cert.key;
location /hk/ {
proxy_pass https://192.168.0.14/hk/;
proxy_ssl_verify off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
}
}
我需要给这个反向代理加上缓存,并且移动设备访问和pc访问分别建立不同的缓存,而且因为源站是wordpress的,检测到用户登录时要跳过缓存。请问应该如何修改配置?
在 Nginx 配置中添加缓存,并为移动设备和 PC 分别建立不同的缓存,还要在检测到用户登录时跳过缓存,这是一个复杂的任务。以下是一个详细的配置示例:
-
启用缓存:在 Nginx 配置文件中添加缓存路径和缓存配置。
-
为移动设备和 PC 分别建立不同的缓存:使用
map
指令区分移动设备和 PC。
-
跳过已登录用户的缓存:通过检测
Cookie
中的登录状态来实现。
配置示例
编辑你的 Nginx 配置文件,添加缓存配置并更新反向代理设置。
步骤 1: 配置缓存路径
在 http
块中添加缓存路径和缓存键:
http {
# 缓存路径配置
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=cache_zone:10m inactive=60m use_temp_path=off;
# 缓存键配置
map $http_user_agent $device_type {
default desktop;
"~*android|bb\d+|meego|iphone|ipad|ipod|opera mini|operamobi|iemobile|mobile|tablet|kindle|silk|fennec" mobile;
}
map $cookie_wp_logged_in $cache_bypass {
default 0;
"~*wordpress_logged_in" 1;
}
# 其他http块中的配置...
}
步骤 2: 配置反向代理和缓存设置
在 server
块中添加缓存配置,并更新 location
块:
server {
listen 443 ssl;
server_name foo.com;
ssl_certificate /path/to/your/cert.pem;
ssl_certificate_key /path/to/your/cert.key;
location /hk/ {
proxy_pass https://192.168.0.14/hk/;
proxy_ssl_verify off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
# 缓存设置
proxy_cache cache_zone;
proxy_cache_key $scheme$proxy_host$uri$is_args$args$device_type;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_bypass $cache_bypass;
proxy_no_cache $cache_bypass;
add_header X-Proxy-Cache $upstream_cache_status;
}
# 其他server块中的配置...
}
解释
-
缓存路径配置:
-
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=cache_zone:10m inactive=60m use_temp_path=off;
:定义缓存路径、缓存区和缓存的参数。
-
levels=1:2
:定义缓存文件的层次结构。
-
keys_zone=cache_zone:10m
:定义缓存区的名称和大小。
-
inactive=60m
:设置缓存的非活动超时时间。
-
use_temp_path=off
:禁用临时路径,以提高性能。
-
缓存键配置:
-
map $http_user_agent $device_type {}
:根据 User-Agent
头区分移动设备和 PC。
-
map $cookie_wp_logged_in $cache_bypass {}
:根据 Cookie
中的 wordpress_logged_in
字段决定是否绕过缓存。
-
反向代理缓存设置:
-
proxy_cache cache_zone;
:启用缓存,并指定缓存区。
-
proxy_cache_key $scheme$proxy_host$uri$is_args$args$device_type;
:根据请求的 URL 和设备类型生成缓存键。
-
proxy_cache_valid
:定义缓存的有效时间。
-
proxy_cache_bypass $cache_bypass;
和 proxy_no_cache $cache_bypass;
:当检测到用户登录时跳过缓存。
-
add_header X-Proxy-Cache $upstream_cache_status;
:在响应头中添加缓存状态标志,用于调试和监控。
其他注意事项
-
缓存目录权限:确保 Nginx 进程对
/var/cache/nginx
目录具有读写权限。
-
测试配置:在生产环境中使用前,请务必在测试环境中验证配置的正确性。
-
缓存策略调整:根据实际应用需求调整缓存策略和时间。
通过这些配置,可以实现移动设备和 PC 分别建立不同的缓存,并在检测到用户登录时跳过缓存。