使用工具
- certbot
- nginx
- 一台 Ubuntu 22 云服务器
- 若干域名
- Cloudflare
操作步骤
- 购买域名
- 把域名托管到你喜欢的平台下
这里采用 Cloudflare 进行,转移托管权限自行参考 Cloudflare 给出的解决方法 - 在 Cloudflare 的域名管理下进入 DNS-记录 部分
- 使用 A记录 指向你的服务器ip地址
这样可以实现一个域名的多次到等于的无限域名的利用例如我在服务器部署好了一个A服务,此时我可以用 A记录
A a-service ip_address (记得关闭 Cloudflare 提供的 DNS 代理服务,这个是付费的)
此时可以访问 a-service.domain-name 这串地址访问到我们想要在服务器实现服务的入口了 - 回到自己的服务器上,部署 nginx
1
apt install nginx
- 再使用 systemctl 启动 nginx 服务,并设置为开机自启
1
2
3
4
5
6
7
8
9
10
11
12systemctl start nginx
systemctl enable nginx
#一些其他的 systemctl 命令
# 停止服务
sudo systemctl stop [服务名]
# 重启服务
sudo systemctl restart [服务名]
# 重新加载配置(不重启服务)
sudo systemctl reload [服务名] - 此时我们可以回去开始配置 nginx 的反向代理了
首先我们要来学习一下软连接
为了不破坏默认的软件配置环境,我们会希望柔和的方式来修改软件的配置,所以我们需要通过软连接的操作去映射文件
nginx 提供了两个文件夹来配置: /etc/nginx/sites-available/ 与 /etc/nginx/sites-enabled/
前者是用来存放可选列表,后者存放启用的规则 - 在
/etc/nginx/sites-available/中创建一个适当名字后最为.conf的文件,按照以下规则编写配置1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25server {
listen 443 ssl;
server_name a-service.domain-name;
ssl_certificate /etc/letsencrypt/live/a-service.domain-name/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/a-service.domain-name/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
proxy_pass http://127.0.0.1:port;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
server {
listen 80;
server_name a-service.domain-name;
return 301 https://$host$request_uri;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16# 让我们来解析一下上面这一段
# 从第21行的server{} 的作用是:监听80端口、定义通过a-service.domain-name访问(访问这个域名时,nginx才会匹配到这一段server下的配置)、返回一个状态码和请求想要https下的url地址
# 回到第2-3行:监听443端口、定义通过a-service.domain-name访问
# 目前第5-8行是没有的,可以先不写着,这些是用于 SSL 认证的部分
# 第10-17行:
# localtion / 这里定义访问这个域名的根目录下才会触发这部分的版块
# proxy_pass http://127.0.0.1:port; 这里定义将会重定向(代理)到本地的一个端口(port)下
# proxy_set_header Host $host; 保留原始的host请求头
# proxy_set_header X-Real-IP $remote_addr; 将客户端真实 IP 转发给后端
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 保存经过代理的客户端 IP 链
# proxy_set_header X-Forwarded-Proto $scheme; 告诉后端请求是 HTTP 还是 HTTPS
# proxy_http_version 1.1; 某些方法(如 PROPFIND、PUT、DELETE)需要 HTTP/1.1 才支持持久连接。所以,如果你需要这个服务长久的提供增删改服务,那就配置上这个
# proxy_set_header Connection ""; 防止 Nginx 自动添加 Connection: close,保持 WebDAV 请求的长连接 - 此时你按照上面的配置完成之后可以使用 nginx 提供的语法检查
nginx -t。成功了就开始软路由链接文件到对应的地址下1
sudo ln -s /etc/nginx/sites-available/service.conf /etc/nginx/sites-enabled/service.conf
- 重启 nginx
systemctl restart nginx - 此时可以在公网中访问你想要的服务地址
a-service.domain-name,但你很可能是会链接不进去,被报告说该网站不安全,因此我们接下来要接着解决网站不安全的问题 - 网站因为没有 SSL 证书,所以无法被标识为安全的网站。我们需要使用 certbot 来自动获取证书
1
2
3
4# 安装 certbot
apt install certbot
# 使用 certbot 自动申请你想要的域名的 SSL 证书
certbot --nginx -d a-service.domain-name - 运行完成之后你的 service.conf 里面大概率会多出在上面配置中的第5-8行的配置。如果没有的话,就把在终端输出的文件路径按照上面的配置来填写内容
- 然后再检查 nginx 的语法
nginx -t,成功后重启 nginx 服务systemctl restart nginx - 此时可以成功访问我们想要拿到的服务内容了
后记
买了个在美国的云服务器之后可以折腾好多东西,很好玩。(主要是个公网ip)
我利用了这个云服务器搭配 Cloudflare Pages/Worker(部署Telegraph-Image
)、Telegram、使用我的云服务器反代,实现在中国大陆可以不使用代理翻墙也能上传/预览我在 Telegram 的图片博客写到这里发现我服务又挂了 UTC+8 2025.08.27 01:09
不对!没挂!是我图片太大导致的没法上传 UTC+8 2025.08.27 01:12