前言

家宽的端口不可能给你80和443,当然其他端口也够自己用了,但是没有ssl是不是不够高级安全,这里就简单搞一下。

安装Certbot

Ubuntu下安装certbot很简单,使用snap安装即可:

sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

申请SSL证书

接下来进入主题,开始SSL证书的申请。

运行Certbot命令
首先是运行certbot的证书申请命令,需要注意的点是验证模式要用DNS-TXT的方式,-d后面跟要申请的域名,我这里申请的是泛域名。
命令如下:

sudo certbot certonly --preferred-challenges dns -d "*.你的域名.com" --manual

这时certbot会提醒你在域名DNS解析记录中添加记录,登录阿里云DNS解析,点击添加记录,记录类型选择TXT,将域名和值填进去。添加记录条目后,点击终端中提供的Dig网址,如果解析结果和certbot提供的值相同,则表示添加记录成功。

返回到终端,回车继续验证,没问题的话,certbot会提示这个证书不会自动更新(因为是手动申请的)。此时证书已经申请成功了,存放在/etc/letsencrypt/live/你的域名.com中。

配置Nginx

找到Nginx中https server的配置代码块,添加如下字段:


# SSL
ssl_certificate         /etc/letsencrypt/live/你的域名.com/fullchain.pem;
ssl_certificate_key     /etc/letsencrypt/live/你的域名.com/privkey.pem;

# SSL config
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;

重新加载Nginx配置:

sudo service nginx reload

刷新一下随便那个网站,就能看到已经是安全的HTTPS连接了。

方便加域名的脚本

这里nginx路径可以自定义

touch add_nginx_conf.sh

chmod +x add_nginx_conf.sh

vim add_nginx_conf.sh

输入:set paste进入粘贴模式,粘贴以下内容。

#!/usr/bin/env bash

nginx_conf_dir="/etc/nginx/conf/conf.d"
GreenBG="\033[42;37m"
Font="\033[0m"
# 提示用户输入域名变量
read -p "请输入域名: " domain

# 检查是否输入为空
if [ -z "$domain" ]; then
    echo "域名不能为空,请重新运行脚本并输入有效的域名。"
    exit 1
fi
read -p "请输入证书路径: " ssl_dir

if [ -z "$ssl_dir" ]; then
    echo "请输入证书路径,请重新运行脚本并输入有效的证书路径。"
    exit 1
fi

# 提示用户输入域名变量
read -p "请输入反代端口(你本地项目服务端口): " proxy_port

# 检查是否输入为空
if [ -z "$proxy_port" ]; then
    echo "请输入端口(你本地项目服务端口),请重新运行脚本并输入有效的端口。"
    exit 1
fi

read -p "请输入反代ip(你本地项目服务ip): " proxy_ip

if [ -z "$proxy_ip" ]; then
    echo "请输入反代ip(你本地项目服务ip),请重新运行脚本并输入有效的ip。"
    exit 1
fi
judge() {
    echo -e "${OK} ${GreenBG} $1 完成 ${Font}"
            sleep 1
}

nginx_conf_add() {
    touch ${nginx_conf_dir}/${domain}.conf
    cat >${nginx_conf_dir}/${domain}.conf <<EOF
    server {
    	      listen 9999 ssl http2;
    	      listen [::]:9999 http2;
            ssl_certificate       ${ssl_dir}/fullchain.pem;
            ssl_certificate_key   ${ssl_dir}/privkey.pem;
            ssl_protocols         TLSv1.1 TLSv1.2 TLSv1.3;
            ssl_ciphers           TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5;
    	      server_name ${domain};
            index index.html index.htm;
            # 无brotli可以删掉下面brotli相关
            brotli on;              #启用
            brotli_comp_level 6;    #压缩等级,默认6,最高11,太高的压缩水平可能需要更多的CPU
            brotli_buffers 16 8k;   #请求缓冲区的数量和大小
            brotli_min_length 20;   #指定压缩数据的最小长度,只有大于或等于最小长度才会对其压缩。这里指定20字节
            brotli_static always;   #是否允许查找预处理好的、以.br结尾的压缩文件,可选值为on、off、always
            brotli_window 512k;     #窗口值,默认值为512k
            # Config for 0-RTT in TLSv1.3
            ssl_early_data on;
            ssl_stapling on;
            ssl_stapling_verify on;
            add_header Strict-Transport-Security "max-age=31536000";

            location /
                  {
                  proxy_redirect off;
                  proxy_read_timeout 1200s;
                  proxy_pass http://${proxy_ip}:${proxy_port};
                  proxy_http_version 1.1;
                  proxy_set_header X-Real-IP \$remote_addr;
                  proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
                  proxy_set_header Upgrade \$http_upgrade;
                  proxy_set_header Connection "upgrade";
                  proxy_set_header Host \$http_host;

                  # Config for 0-RTT in TLSv1.3
                  proxy_set_header Early-Data \$ssl_early_data;
                  }
        }
        server {
            listen 80;
            listen [::]:80;
    	    server_name ${domain};
    	    return 301 https://${domain}\$request_uri;
        }
EOF
    judge "Nginx 配置新增成功"

}

nginx_conf_add


再执行,按照提示填写
QQ_1731917389755

sh add_nginx_conf.sh

Q.E.D.


味无味处求吾乐,材不材间过此生。