自建cdn是个由来已久的话题,很多时候尝试自行搭建它或许只是为了满足让网站访问更快的需求。并且市面上也有许多功能完善的现成软件可供选择,方法也是五花八门。
但对于个人站点而言,更多时候只是为了抗ddos所用,以及不暴露后端真实ip,并不在意缓存及其速度。(于是就不需要用复杂的软件了)那这时候就使用nginx和sniproxy搭建一个就足矣了。(在此之前需要准备一台装有debian10和抗ddos的主机)
(nginx用来接收80端口的请求,并将其跳转到本机的sniproxy,sniproxy用于和后端服务器取得联系,并代理请求)
一、初始化环境
为了以后更好地让这台机器稳定运行,建议做一些环境上的调整。
1.apt更新一下系统,确保系统里的软件是最新的。
apt-get update && apt-get dist-upgrade
2.修改 /etc/sysctl.conf,加入一些参数。
#Enable BBR
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
#DROP inbound ICMP
net.ipv4.icmp_echo_ignore_all = 1
#Adjustment TCP settings
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 0
net.ipv4.tcp_keepalive_time = 120
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 4
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_retries2 = 5
net.ipv4.tcp_fin_timeout = 5
net.ipv4.tcp_max_tw_buckets = 48000
net.ipv4.ip_default_ttl = 256
net.ipv4.ip_forward = 1
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_tw_recycle = 0
#System Mem Adjust
vm.swappiness = 100
vm.dirty_writeback_centisecs = 120
vm.dirty_expire_centisecs = 120
vm.dirty_ratio=10
vm.dirty_background_ratio=10
3.修改 /etc/security/limits.conf 调高进程打开限制,在文件最后添加下列行。
* - nofile 1000000
root - nofile 1000000
文件修改完毕后重启系统。
二、安装sniproxy
1.首先初始化一下apt,用来安装依赖。
apt-get update
apt-get install -y autotools-dev cdbs debhelper dh-autoreconf dpkg-dev gettext libev-dev libpcre3-dev libudns-dev pkg-config fakeroot devscripts build-essential unzip
# 安装依赖会很大,所以一开始的镜像源一定要选近的,否则会很慢。若中途出现需要重启某个系统服务的提示,直接选yes即可
2.安装sniproxy
mkdir sniproxy && cd sniproxy
# 新建一个 SNI Proxy文件夹并进入
wget -N --no-check-certificate https://github.com/dlundquist/sniproxy/archive/master.zip
# 下载 SNI Proxy 最新软件包
unzip master.zip && cd sniproxy-master
# 解压 SNI Proxy 软件包并进入解压后的文件夹
./autogen.sh && dpkg-buildpackage
# 开始构建 deb 包
sniproxy_deb=$(ls ..|grep "sniproxy_.*.deb") && echo ${sniproxy_deb}
# 获取构建后的 deb 包的文件名,正常情况下会返回一个类似于 sniproxy_0.X.X_amd64.deb 这样的文件名
[[ ! -z ${sniproxy_deb} ]] && dpkg -i ../${sniproxy_deb}
# 判断获取的文件名是否为空,如果不为空就 安装 deb 包
安装完成后,可以执行命令sniproxy -V来查看是否安装成功,如果可以正常显示版本号那就说明可以了。
3.修改配置文件
sniproxy安装成功后,需要修改配置文件才可以使用,在本文中,安装它的最后目的只是为了代理自有网站,于是配置文件可以做到非常简化。
使用vim打开/etc/sniproxy.conf,清空里面所有内容,并输入 :set paste 来开启粘贴模式。并写入以下内容。完毕后输入 :wq 退出。
user root
pidfile /var/run/sniproxy.pid
listen 443 {
proto tls
table https_hosts
access_log {
filename /dev/null
priority notice
}
}
table https_hosts {
.* *:443
}
table https_hosts {
(.*.|)myhostname.com$ *
}
#将access_log中的filename设置为/dev/null可以阻止其产生日志
#需要将myhostname.com替换为实际域名
4.如果需要将sniproxy设置为开机自启动的话,不能使用systemctl来设定,唯一可行的办法就是将其添加到rc.local中让其开机启动。(debian10恢复rc.local的方法)
三.安装nginx
1.apt方式安装nginx。
apt install nginx
2.使用vim打开 /etc/nginx/nginx.conf,清空里面所有内容,并加入以下内容。修改完毕后保存退出。
user nginx;
worker_processes auto;
pid /run/nginx.pid;
worker_rlimit_nofile 65535;
error_log /dev/null;
events {
worker_connections 65535;
multi_accept on;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 120s;
keepalive_requests 10240;
types_hash_max_size 2048;
client_max_body_size 102400M;
server_tokens off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_early_data on;
ssl_session_tickets on;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 30m;
ssl_dhparam /etc/nginx/dhparam.pem;
access_log off;
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
ssl_stapling on;
ssl_stapling_verify on;
resolver 1.1.1.1 1.0.0.1 8.8.8.8 8.8.4.4 208.67.222.222 208.67.220.220 valid=60s;
resolver_timeout 2s;
include /etc/nginx/conf.d/*.conf;
}
3.使用vim打开/etc/nginx/conf.d/default.conf(默认的vhost文件),清空里面所有内容,并加入以下内容。修改完毕后保存退出。
server {
listen 80;
listen [::]:80;
server_name myhostname.com;
rewrite ^(.*)$ https://${http_host}$1 permanent;
}
#请将myhostname.com替换为实际域名
四、收尾
使用vim打开/etc/hosts,并在文件末尾添加一行源服务器的ip和对应域名。(例如下面这个例子),修改完成后保存退出。
223.5.5.5 public1.alidns.com
8.8.8.8 mywebsite.com
确保Nginx服务和sniproxy服务可以正常运行且开机自启动后,此时再次重启系统。
这个时候,就可以尝试在本地修改hosts来测试是否能正常访问源站了。如果确认没有任何问题,一般来说就可以正常投入使用了。
可以哦