手动申请证书和配置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块,复制过来替换了就可以了。