乌萨奇の奇妙世界

[乌萨奇整活]Nginx反代Cloudflare的网站

# [乌萨奇整活]Nginx反代Cloudflare的网站
## 大家好,我是乌萨奇
本文源URL https://blog.537233.xyz/index.php/archives/7/

众所周知Cloudflare现在禁止了优选IP,那么自己拿个小鸡反代Cloudflare倒还是在合法线上的。
假设我们有一个backend.537233.xyz是开了 Cloudflare的CDN,那我们用fast.537233.xyz来进行加速(也就是你的小鸡反代Cloudflare),但如果直接通过Nginx来进行一个反向代理Cloudflare的Https的话通常会出现dns points to prohibited ip的这个问题,归根结底是因为Cloudflare现在已经开启了sni的识别回源。所以我们的解决思路是通过Nginx的SNI覆写和Host覆写来让小鸡改掉这两个CloudflareCDN回源的参数,从而可以达到CloudflareCDN的效果。
那么开始吧。
~~~
apt install nginx -y
~~~
然后改你的nginx.conf里关于server模块
~~~
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _; # 监听所有域名

# 重定向到 HTTPS
return 301 https://$host$request_uri;
}

server {
listen 443 ssl; # 使用 SSL 监听
listen [::]:443 ssl;# 使用 SSL 监听
server_name fast.537233.xyz; # 替换为你的域名

# SSL 配置(根据需要替换为你的证书和密钥路径)
ssl_certificate 你的证书公钥路径;
ssl_certificate_key 你的证书私钥路径;

# 配置反向代理规则
location ^~ / {
proxy_pass https://backend.537233.xyz; # 替换为你的CDN后端域名
# 设置回源主机名
proxy_set_header Host backend.537233.xyz; # 替换为你的CDN后端域名

# 设置头部传递真实 IP
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

# 添加自定义响应头
add_header MyCacheStatus $upstream_cache_status;
add_header MyServerNode Node-01;

# 禁用缓存相关头部
add_header Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0";
add_header Pragma "no-cache";
add_header Expires "0";

# 禁用 Nginx 的缓存功能
proxy_buffering off;
proxy_cache off;

# 启用 SNI 支持
proxy_ssl_server_name on;
proxy_ssl_name backend.537233.xyz; # 替换为你的CDN后端域名

# 禁用 Gzip 压缩以确保数据一致性
gzip off;
proxy_set_header Accept-Encoding '*';

# 文本替换配置
sub_filter_once off;
sub_filter 'backend.537233.xyz' 'fast.537233.xyz'; # 前面的替换为你的CDN后端域名,后面的是你这个加速的域名

# WebSocket 配置
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

}
}
~~~

接着重载nginx的conf配置文件

~~~
nginx -s reload
~~~

没报错就应该没问题了,然后你自己打开一下看看有没有什么奇奇怪怪的问题。

至于如果是强绑定host的站点,例如alist这种,可以添加多一个Header,然后在后端nginx上进行一个 Host覆写就可以了。
大家要是需要这个整活的话,我可以再~~水多一贴的~~写一篇整活。

 


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注