jsDelivr是一个流行的开源CDN服务,主要用于加速JavaScript库、CSS框架等前端资源的加载。以下是搭建jsDelivr镜像站的详细步骤:
# Ubuntu/Debian
sudo apt update
sudo apt install nginx
# CentOS/RHEL
sudo yum install epel-release
sudo yum install nginx
sudo mkdir -p /var/www/jsdelivr
sudo chown -R www-data:www-data /var/www/jsdelivr
编辑Nginx配置文件(通常在/etc/nginx/sites-available/
或/etc/nginx/conf.d/
):
server {
listen 80;
server_name your-mirror-domain.com; # 替换为你的域名
root /var/www/jsdelivr;
index index.html;
# 启用gzip压缩
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
# 缓存设置
location ~* \.(js|css|png|jpg|jpeg|gif|ico|woff|ttf|svg|eot)$ {
expires 365d;
add_header Cache-Control "public, no-transform";
}
# 代理设置(可选,可以直接同步资源而不使用代理)
location / {
proxy_pass https://cdn.jsdelivr.net;
proxy_set_header Host cdn.jsdelivr.net;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache_valid 200 302 24h;
proxy_cache_valid 404 1m;
}
}
sudo ln -s /etc/nginx/sites-available/jsdelivr /etc/nginx/sites-enabled/
sudo nginx -t # 测试配置
sudo systemctl restart nginx
# 创建同步脚本
sudo nano /usr/local/bin/sync_jsdelivr.sh
脚本内容:
#!/bin/bash
rsync -az --delete --exclude='.git' rsync://rsync.jsdelivr.net/ /var/www/jsdelivr/
设置定时任务(每天同步):
sudo chmod +x /usr/local/bin/sync_jsdelivr.sh
(crontab -l ; echo "0 3 * * * /usr/local/bin/sync_jsdelivr.sh") | crontab -
wget -mkEpnp https://cdn.jsdelivr.net/
使用Let's Encrypt免费证书:
# 安装Certbot
sudo apt install certbot python3-certbot-nginx
# 获取证书
sudo certbot --nginx -d your-mirror-domain.com
如果有多个镜像节点,可以配置负载均衡:
upstream jsdelivr_mirrors {
server mirror1.example.com;
server mirror2.example.com;
server mirror3.example.com;
}
server {
listen 80;
server_name cdn.yourdomain.com;
location / {
proxy_pass http://jsdelivr_mirrors;
}
}
访问你的镜像站URL,测试几个常用资源,例如:
- http://your-mirror-domain.com/npm/jquery@3.6.0/dist/jquery.min.js
- http://your-mirror-domain.com/gh/twbs/bootstrap@5.1.3/dist/css/bootstrap.min.css
通过以上步骤,你可以成功搭建一个jsDelivr镜像站,为你的用户提供更快的资源加载速度。