所有请求发送至源站,不缓存任何文件
location / { proxy_pass http://y.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://y.moe.ms; • proxy_pass 指令用来指定将请求代理转发到的后端服务器地址。在这里,所有收到的请求将被代理转发到 http://y.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_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off; server { listen 80; listen 443 ssl http2; listen [::]:443 ssl http2; listen [::]:80; server_name moe.ms *.moe.ms; index index.php index.html index.htm default.php default.htm default.html; root /www/wwwroot/moe; location / { proxy_pass http://y.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"; } 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原理也类似)
对于宝塔用户,配置文件最底部的一些代码要删除,否则会报错(如下图圈出来的都删了)
只需要删除反代机这里的代码,源站不用
为啥不用宝塔自带的反代?因为宝塔的反代是最基础的,傻瓜式的,几乎没有优化。
如何使用 Amazon CloudFront 加速您的 WordPress 站点 | AWS 初创公司博客
上面的简化架构描述了 WordPress 的通用架构,其中静态内容存储在 AWS S3 中,WordPress 运行在 EC2、Lightsail 或其他托管设施上。WordPress 默认将所有内容存储在 Web 服务器本地。但是,有几个插件可以很容易地将静态内容移动到 S3,一个示例就是 W3 Total Cache。这里的建议与您的网站是否在 S3 中存储静态内容相关,无论如何,您的网站都能得到加速。
分发点、源站和行为
首先,我将简要回顾一些术语,确保我们对内容的理解一致。具有 DNS 终端节点的 CloudFront 配置称为分发点。一个网站的所有配置设置均可配置为使用一个分发点,但有些内容可能具有不同的可缓存属性,例如图片等,以及为查看器定制且动态生成的内容(这类内容不应缓存)。 WordPress 将内容拆分成下表所述的文件夹结构。 我们可以使用适当的设置来配置 CloudFront,以通过缓存行为提供每类内容,允许请求 URL(通常按文件扩展名或路径前缀分组)应用适当的缓存配置。
即使是相对简单的网站也可以从不同的位置提供内容。CloudFront 将这些单独的位置称为源站。源站可以是 Amazon S3 存储桶,也可以是 HTTP 终端节点。您的 HTTP 服务器可以托管在 AWS 或任何面向互联网的 HTTP 系统上。在上图中,S3 和 WordPress 服务器将在您的分发点设置中配置为单独的源站。
loc论坛反代案例
一个小学的网站,练习反代发现始终无法成功。
网站地址如下fna.northerneducationtrust.org
需要UK IP访问。如果是UK IP,访问十分正常,没有验证等。
https://hostloc.com/thread-1329431-1-3.html
我的VPS选用的UK IP,用这个IP代理可以访问该网站。
location / { proxy_pass https://fna.northerneducationtrust.org; proxy_redirect off; proxy_set_header Host fna.northerneducationtrust.org; proxy_set_header Accept-Encoding ''; client_max_body_size 10m; client_body_buffer_size 512k; proxy_connect_timeout 5; proxy_read_timeout 60; proxy_send_timeout 5; proxy_buffer_size 16k; proxy_buffers 4 64k; proxy_busy_buffers_size 128k; proxy_hide_header Alt-Svc; proxy_hide_header Cf-Cache-Status; proxy_hide_header Report-To; proxy_hide_header Nel; proxy_hide_header Cf-Ray; proxy_hide_header Vary; proxy_hide_header X-protocol; proxy_hide_header Strict-Transport-Security; proxy_hide_header X-Frame-Options; proxy_hide_header X-Content-Type-Options; proxy_hide_header X-XSS-Protection; proxy_ssl_server_name on; sub_filter 'fna.northerneducationtrust.org' '你的域名'; sub_filter_once off; sub_filter_types text/javascript application/json application/ld+json application/xml; }
评论前必须登录!
注册