目录

手动申请证书和配置Nginx反向代理

这篇文章介绍了不依赖面板配置nginx证书和反向代理的方法

注意

注1、本期视频教程

注2、本期教程我均使用root用户运行,无法运行请切换为root用户。本期教程vps服务器在海外,无法运行请检查网络环境。

1 使用ACME申请证书

申请证书前我们先安装nginx,另附安装主线版nginx

sudo apt install nginx

1.1 安装ACME.sh

这里的邮箱my@example.com我们随便编一个也行,不能用@example.com这样的,我填了我cloudflare的注册邮箱

curl https://get.acme.sh | sh -s email=my@example.com

安装完需要断开重新连接一下ssh,acme.sh才会加载生效。

1.2 设置证书颁发机构位letsencrypt

acme.sh --set-default-ca --server letsencrypt

1.3 添加cloudflare区域令牌

我们到cloudflare给当前域名申请一个api令牌,然后把令牌放在如下实例的引号之间,粘贴到命令行回车

export CF_Token="Y_jpG9AnfQmuX5Ss9M_qaNab6SQwme3HWXNDzRWs"

1.4 申请证书

将两个example.com处分别替换为自己的域名,然后运行。等会即可申请好证书

acme.sh --issue --dns dns_cf -d example.com -d '*.example.com'

1.4 放置证书

进入nginx配置文件夹

cd /etc/nginx

创建keyfile文件夹

mkdir keyfile

然后运行如下命令,将两处example.com替换为自己的域名

acme.sh --install-cert -d example.com -d '*.example.com' \
--key-file       /etc/nginx/keyfile/key.pem  \
--fullchain-file /etc/nginx/keyfile/cert.pem \
--reloadcmd     "service nginx force-reload"

1.5 设置acme自动更新

acme.sh --upgrade --auto-upgrade

2 配置反向代理

我们先安装一个alist,一会就用反代alist来演示,alist的默认端口为5244

curl -fsSL "https://alist.nn.ci/v3.sh" | bash -s install

查看alist的初始密码

sudo systemctl status alist

2.1 配置alist反向代理

我们进入nginx的配置文件夹

cd /etc/nginx/conf.d

新建一个alist的反代配置文件

nano alist.conf

在文件中放入如下内容

server {
    listen 80;
    listen [::]:80;
    server_name example.com;  # 替换为你的域名

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

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    #listen 443 quic reuseport;
    #listen [::]:443 quic reuseport;
    server_name example.com;  # 替换为你的域名

    http2 on;

    ssl_certificate /etc/nginx/keyfile/cert.pem;  
    ssl_certificate_key /etc/nginx/keyfile/key.pem;  

    # SSL 配置(可选)
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers on;

    # 启用 HSTS
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

    location / {
               proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
               proxy_set_header X-Forwarded-Proto $scheme;
               proxy_set_header Host $http_host;
               proxy_set_header X-Real-IP $remote_addr;
               proxy_set_header Range $http_range;
               proxy_set_header If-Range $http_if_range;
               proxy_redirect off;
               proxy_pass http://127.0.0.1:5244;     #反代不同服务修改这里
               # the max size of file to upload
               client_max_body_size 20000m;
               # required for browsers to direct them to quic port
               #add_header Alt-Svc 'h3=":443"; ma=86400';
             }
}

同时我们关闭直接对公网ip和未配置域名的访问

nano close.conf

放置如下内容

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;

    # 对未配置的域名返回 444
    return 444;
}

server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;
    server_name _;

    ssl_certificate /etc/nginx/keyfile/cert.pem;  
    ssl_certificate_key /etc/nginx/keyfile/key.pem;


    # 对未配置的域名返回 444
    #return 444;
    ssl_reject_handshake on;
}

重启nginx反代即生效

sudo systemctl restart nginx

3 结语

我们把主域名和*.域名都解析到这台设备就可以反代任意子域名到不同服务了。只要把nginx配置文件复制粘贴改个名字,里面域名改一下。反代的端口改一下。如果有docker本地地址改为172.17.0.1或者响应的软件文档里也会提供location块,复制过来替换了就可以了。