在日常学习和工作中我们经常需要查阅一些文档,但大部分文档都部署在国外的服务器或 CDN 上,导致访问速度较慢甚至偶尔无法访问。为了解决这个问题,我们可以使用 Nginx 在自己的服务器上搭建一个镜像网站,本文以 Kubernetes 官网 为例,演示如何使用 Nginx 镜像网站实现「文档自由」。
首先我们需要准备一台云服务器并安装好 Nginx,本文使用的是 1.27 版本。另外需要一个域名作为镜像网站入口,这里以 mirror.lin2ur.cn 为例,目标是通过 kubernetes.mirror.lin2ur.cn 域名访问 Kubernetes 官网。为了提供 HTTPS 访问我们还需要为域名申请一个 SSL 证书。
0. 反向代理
镜像网站本质上就是反向代理目标网站,Nginx 反向代理的配置相信大家都很熟悉了,下面我们来编写配置文件:
# /etc/nginx/conf.d/mirror.conf
map $host $mirror_host {
kubernetes.mirror.lin2ur.cn kubernetes.io;
default "";
}
server {
listen 80;
listen 443 ssl;
server_name *.mirror.lin2ur.cn;
ssl_certificate conf.d/tls.crt;
ssl_certificate_key conf.d/tls.key;
resolver 223.5.5.5 ipv6=off;
proxy_ssl_server_name on;
proxy_set_header Host "$proxy_host";
location / {
if ( "$mirror_host" = "" ) {
return 404;
}
proxy_redirect https://$proxy_host https://$host;
proxy_pass "${scheme}://${mirror_host}";
}
}
map $host $mirror_host 指令根据客户端请求域名匹配目标域名,方便后续添加新的镜像网站。
resolver 223.5.5.5 指定域名解析服务,在反向代理场景中这个配置是必须的。
proxy_ssl_server_name on 开启与上游服务器建立 SSL/TLS 连接时发送 SNI (Server Name Indication) 扩展字段,部分 CDN 厂商(如 Cloudflare) 强制要求发送 SNI。
proxy_set_header Host "$proxy_host" 设置反向代理时 Host 请求头为目标域名,默认情况下 Nginx 会将客户端请求的 Host 头发送给上游的服务。
proxy_redirect 上游服务返回 30x 跳转响应时重写 Location 响应头使客户端跳转到镜像网站域名,以 Kubernetes 官网为例,使用


409

被折叠的 条评论
为什么被折叠?



