本帖最后由 荣誉会员 于 2024-7-19 16:18 编辑
所有请求发送至源站,不缓存任何文件
- location / {
- proxy_pass http://yuan.moe.ms;
- 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_set_header X-Forwarded-Host $host;
- proxy_set_header X-Forwarded-Port $server_port;
- proxy_no_cache 1;
- proxy_cache_bypass 1;
- proxy_http_version 1.1;
- proxy_set_header Upgrade $http_upgrade;
- proxy_set_header Connection "upgrade";
- }
复制代码
解释
- 1. location / {
- • 这一行指定了 Nginx 的位置块(location block),表示匹配所有 URI 路径。也就是说,这段配置适用于所有访问该 Nginx 服务器的请求。
- 2. proxy_pass http://yuan.moe.ms;
- • proxy_pass 指令用来指定将请求代理转发到的后端服务器地址。在这里,所有收到的请求将被代理转发到 http://yuan.moe.ms 这个地址。
- 3. proxy_set_header Host $host;
- • proxy_set_header 指令用于设置 HTTP 请求头。这里设置了一个 Host 头,使用 $host 变量,将客户端请求中的原始主机头信息传递给后端服务器。
- 4. proxy_set_header X-Real-IP $remote_addr;
- • 设置 X-Real-IP 头,将客户端的真实 IP 地址传递给后端服务器。$remote_addr 是 Nginx 内置变量,代表客户端的 IP 地址。
- 5. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- • X-Forwarded-For 头用于指示原始客户端 IP 地址,如果请求经过多层代理,会追加到已有的 X-Forwarded-For 头中。
- 6. proxy_set_header X-Forwarded-Proto $scheme;
- • 设置 X-Forwarded-Proto 头,传递客户端请求使用的协议(http 或 https),使用 $scheme 变量获取。
- 7. proxy_set_header X-Forwarded-Host $host;
- • 设置 X-Forwarded-Host 头,传递原始的主机头信息给后端服务器。
- 8. proxy_set_header X-Forwarded-Port $server_port;
- • 设置 X-Forwarded-Port 头,传递客户端请求的端口号给后端服务器。
- 9. proxy_no_cache 1;
- • 禁止缓存代理的响应。
- 10. proxy_cache_bypass 1;
- • 禁止使用缓存来响应请求。
- 11. proxy_http_version 1.1;
- • 设置使用 HTTP 1.1 版本协议进行代理转发。
- 12. proxy_set_header Upgrade $http_upgrade;
- • 设置 Upgrade 头,用于支持 WebSocket 代理,传递客户端的 Upgrade 请求头。
- 13. proxy_set_header Connection "upgrade";
- • 设置 Connection 头为 “upgrade”,支持 WebSocket 连接升级。
复制代码
缓存所有文件
- proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
- server {
- # ...
- location / {
- proxy_pass http://yuan.moe.ms;
- 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_cache my_cache;
- proxy_cache_valid 200 302 1h;
- proxy_cache_valid 404 1m;
- proxy_cache_revalidate on;
- proxy_cache_min_uses 1;
- proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
- proxy_cache_background_update on;
- proxy_cache_lock on;
- }
复制代码
解释:
- 1. proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
- • 这行配置定义了缓存路径和相关参数:
- • /path/to/cache 是缓存文件存放的路径(自己自定义)。
- • levels=1:2 定义了缓存目录层级结构。
- • keys_zone=my_cache:10m 定义了一个名为 my_cache 的共享内存区域,大小为10MB,用于存储缓存键和元数据。
- • max_size=1g 指定了缓存最大容量为1GB。
- • inactive=60m 定义了缓存项在60分钟内未被访问即视为过期。
- • use_temp_path=off 禁用了临时文件目录,即不使用默认的系统临时路径。
复制代码- 2. location / { ... }
- • 这里是nginx的 location 块,location 指令用来匹配 URI,这里匹配所有请求的根路径 /。
- • proxy_pass http://yuan.moe.ms; 将请求代理到 http://yuan.moe.ms。
- • proxy_set_header 设置了一些HTTP请求头,如 Host、X-Real-IP、X-Forwarded-For、X-Forwarded-Proto,将客户端的真实IP和协议传递给后端服务器。
- 3. proxy_cache my_cache;
- • 启用了名为 my_cache 的缓存区域,这是之前定义的共享内存区域。
- 4. proxy_cache_valid 200 302 1h;
- • 指定了对于响应码为200和302的响应,缓存有效期为1小时。
- 5. proxy_cache_valid 404 1m;
- • 指定了对于响应码为404的响应,缓存有效期为1分钟。
- 6. proxy_cache_revalidate on;
- • 启用了缓存重新验证机制,当缓存过期时,nginx会向后端服务器发起条件性GET请求来检查资源是否仍然有效。
- 7. proxy_cache_min_uses 1;
- • 设置了至少访问1次后才会缓存该响应。
- 8. proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
- • 定义了在响应错误、超时或者后端服务器返回特定错误码(500、502、503、504)时,允许使用过期的缓存作为响应。
- 9. proxy_cache_background_update on;
- • 启用了后台缓存更新,即在后台异步更新过期的缓存。
- 10. proxy_cache_lock on;
- • 启用了缓存锁定,确保同时只有一个请求可以更新缓存。
复制代码
缓存与不缓存如何使用?举例1:如果你的源站全是静态资源(图片,下载站等),那么就可以选择缓存所有文件的反代方式 举例2:如果你的源站是WordPress博客,那么就要结合使用缓存与不缓存 示例:
- proxy_no_cache 1;
- proxy_cache_bypass 1;
- proxy_http_version 1.1;
- proxy_set_header Upgrade $http_upgrade;
- proxy_set_header Connection "upgrade";
- }
-
- location /wp-content/uploads/ {
- proxy_pass http://yuan.moe.ms/wp-content/uploads/;
- 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_cache my_cache;
- proxy_cache_valid 200 302 1h;
- proxy_cache_valid 404 1m;
- proxy_cache_revalidate on;
- proxy_cache_min_uses 1;
- proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
- proxy_cache_background_update on;
- proxy_cache_lock on;
- }
复制代码
示例中不缓存情况下反代了全站,缓存情况下反代了/wp-content/uploads/目录下的所有文件,因为WordPress中你的图片全都存放在这个文件夹下,而图片又是静态文件 以此类推还可以反代其他路径(实际上AWS的cloudfront原理也类似) 对于宝塔用户,配置文件最底部的一些代码要删除,否则会报错(如下图圈出来的都删了)
只需要删除反代机这里的代码,源站不用 为啥不用宝塔自带的反代?因为宝塔的反代是最基础的,傻瓜式的,几乎没有优化。
|