个人小站

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 177|回复: 0

[搬运] Nginx反向代理配置

[复制链接]
  • 打卡等级:热心大叔
  • 打卡总天数:348
  • 打卡月天数:2
  • 打卡总奖励:127963
  • 最近打卡:2024-09-12 09:49:55

69

主题

14

回帖

11万

积分

超级版主

Rank: 8Rank: 8

积分
111727

优秀版主论坛元老

发表于 2024-7-19 16:15:44 | 显示全部楼层 |阅读模式
本帖最后由 荣誉会员 于 2024-7-19 16:18 编辑

所有请求发送至源站,不缓存任何文件

  1. location / {
  2.     proxy_pass http://yuan.moe.ms;
  3.     proxy_set_header Host $host;
  4.     proxy_set_header X-Real-IP $remote_addr;
  5.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  6.     proxy_set_header X-Forwarded-Proto $scheme;
  7.     proxy_set_header X-Forwarded-Host  $host;
  8.     proxy_set_header X-Forwarded-Port  $server_port;

  9.     proxy_no_cache 1;
  10.     proxy_cache_bypass 1;

  11.     proxy_http_version 1.1;
  12.     proxy_set_header Upgrade $http_upgrade;
  13.     proxy_set_header Connection "upgrade";
  14.     }
复制代码


解释

  1. 1.    location / {
  2.     •    这一行指定了 Nginx 的位置块(location block),表示匹配所有 URI 路径。也就是说,这段配置适用于所有访问该 Nginx 服务器的请求。
  3.     2.    proxy_pass http://yuan.moe.ms;
  4.     •    proxy_pass 指令用来指定将请求代理转发到的后端服务器地址。在这里,所有收到的请求将被代理转发到 http://yuan.moe.ms 这个地址。
  5.     3.    proxy_set_header Host $host;
  6.     •    proxy_set_header 指令用于设置 HTTP 请求头。这里设置了一个 Host 头,使用 $host 变量,将客户端请求中的原始主机头信息传递给后端服务器。
  7.     4.    proxy_set_header X-Real-IP $remote_addr;
  8.     •    设置 X-Real-IP 头,将客户端的真实 IP 地址传递给后端服务器。$remote_addr 是 Nginx 内置变量,代表客户端的 IP 地址。
  9.     5.    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  10.     •    X-Forwarded-For 头用于指示原始客户端 IP 地址,如果请求经过多层代理,会追加到已有的 X-Forwarded-For 头中。
  11.     6.    proxy_set_header X-Forwarded-Proto $scheme;
  12.     •    设置 X-Forwarded-Proto 头,传递客户端请求使用的协议(http 或 https),使用 $scheme 变量获取。
  13.     7.    proxy_set_header X-Forwarded-Host  $host;
  14.     •    设置 X-Forwarded-Host 头,传递原始的主机头信息给后端服务器。
  15.     8.    proxy_set_header X-Forwarded-Port  $server_port;
  16.     •    设置 X-Forwarded-Port 头,传递客户端请求的端口号给后端服务器。
  17.     9.    proxy_no_cache 1;
  18.     •    禁止缓存代理的响应。
  19.     10.    proxy_cache_bypass 1;
  20.     •    禁止使用缓存来响应请求。
  21.     11.    proxy_http_version 1.1;
  22.     •    设置使用 HTTP 1.1 版本协议进行代理转发。
  23.     12.    proxy_set_header Upgrade $http_upgrade;
  24.     •    设置 Upgrade 头,用于支持 WebSocket 代理,传递客户端的 Upgrade 请求头。
  25.     13.    proxy_set_header Connection "upgrade";
  26.     •    设置 Connection 头为 “upgrade”,支持 WebSocket 连接升级。
复制代码


缓存所有文件

  1. proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;

  2. server {
  3.     # ...
  4.     location / {
  5.     proxy_pass http://yuan.moe.ms;
  6.     proxy_set_header Host $host;
  7.     proxy_set_header X-Real-IP $remote_addr;
  8.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  9.     proxy_set_header X-Forwarded-Proto $scheme;

  10.     proxy_cache my_cache;
  11.     proxy_cache_valid 200 302 1h;
  12.     proxy_cache_valid 404 1m;

  13.     proxy_cache_revalidate on;
  14.     proxy_cache_min_uses 1;
  15.     proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
  16.     proxy_cache_background_update on;
  17.     proxy_cache_lock on;
  18.     }
复制代码


解释:

  1. 1.    proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
  2. •    这行配置定义了缓存路径和相关参数:
  3. •    /path/to/cache 是缓存文件存放的路径(自己自定义)。
  4. •    levels=1:2 定义了缓存目录层级结构。
  5. •    keys_zone=my_cache:10m 定义了一个名为 my_cache 的共享内存区域,大小为10MB,用于存储缓存键和元数据。
  6. •    max_size=1g 指定了缓存最大容量为1GB。
  7. •    inactive=60m 定义了缓存项在60分钟内未被访问即视为过期。
  8. •    use_temp_path=off 禁用了临时文件目录,即不使用默认的系统临时路径。
复制代码
  1. 2.    location / { ... }
  2. •    这里是nginx的 location 块,location 指令用来匹配 URI,这里匹配所有请求的根路径 /。
  3. •    proxy_pass http://yuan.moe.ms; 将请求代理到 http://yuan.moe.ms。
  4. •    proxy_set_header 设置了一些HTTP请求头,如 Host、X-Real-IP、X-Forwarded-For、X-Forwarded-Proto,将客户端的真实IP和协议传递给后端服务器。
  5. 3.    proxy_cache my_cache;
  6. •    启用了名为 my_cache 的缓存区域,这是之前定义的共享内存区域。
  7. 4.    proxy_cache_valid 200 302 1h;
  8. •    指定了对于响应码为200和302的响应,缓存有效期为1小时。
  9. 5.    proxy_cache_valid 404 1m;
  10. •    指定了对于响应码为404的响应,缓存有效期为1分钟。
  11. 6.    proxy_cache_revalidate on;
  12. •    启用了缓存重新验证机制,当缓存过期时,nginx会向后端服务器发起条件性GET请求来检查资源是否仍然有效。
  13. 7.    proxy_cache_min_uses 1;
  14. •    设置了至少访问1次后才会缓存该响应。
  15. 8.    proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
  16. •    定义了在响应错误、超时或者后端服务器返回特定错误码(500、502、503、504)时,允许使用过期的缓存作为响应。
  17. 9.    proxy_cache_background_update on;
  18. •    启用了后台缓存更新,即在后台异步更新过期的缓存。
  19. 10.    proxy_cache_lock on;
  20. •    启用了缓存锁定,确保同时只有一个请求可以更新缓存。
复制代码


缓存与不缓存如何使用?
举例1:如果你的源站全是静态资源(图片,下载站等),那么就可以选择缓存所有文件的反代方式
举例2:如果你的源站是WordPress博客,那么就要结合使用缓存与不缓存
示例:

  1. proxy_no_cache 1;
  2.     proxy_cache_bypass 1;

  3.     proxy_http_version 1.1;
  4.     proxy_set_header Upgrade $http_upgrade;
  5.     proxy_set_header Connection "upgrade";
  6.     }
  7.    
  8.     location /wp-content/uploads/ {
  9.     proxy_pass http://yuan.moe.ms/wp-content/uploads/;
  10.     proxy_set_header Host $host;
  11.     proxy_set_header X-Real-IP $remote_addr;
  12.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  13.     proxy_set_header X-Forwarded-Proto $scheme;

  14.     proxy_cache my_cache;
  15.     proxy_cache_valid 200 302 1h;
  16.     proxy_cache_valid 404 1m;

  17.     proxy_cache_revalidate on;
  18.     proxy_cache_min_uses 1;
  19.     proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
  20.     proxy_cache_background_update on;
  21.     proxy_cache_lock on;
  22.     }
复制代码

示例中不缓存情况下反代了全站,缓存情况下反代了/wp-content/uploads/目录下的所有文件,因为WordPress中你的图片全都存放在这个文件夹下,而图片又是静态文件
以此类推还可以反代其他路径(实际上AWS的cloudfront原理也类似)
对于宝塔用户,配置文件最底部的一些代码要删除,否则会报错(如下图圈出来的都删了)



只需要删除反代机这里的代码,源站不用
为啥不用宝塔自带的反代?因为宝塔的反代是最基础的,傻瓜式的,几乎没有优化。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|个人小站

GMT+8, 2024-10-15 23:55 , Processed in 0.032237 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表