Nginx 反代 80/443
🔑 先记住 3 个路径
路径 | 作用 | 本教程用到的文件名 |
---|---|---|
/etc/nginx/sites-available/ | 存放“草稿”配置文件 | trilium |
/etc/nginx/sites-enabled/ | 存放“正式启用”的配置 | 软链接指向上面草稿 |
/etc/ssl/ | 存放证书 |
解释:软链接 = 快捷方式,不改文件就能启用。

准备工作:生成 / 下载 Cloudflare Origin CA 证书
登录 Cloudflare → SSL/TLS → 源服务器 → 创建证书

私钥类型:RSA(兼容最好)
主机名填写你自己绑定的域名,例如我的设置是这个:trilium.dpdns.org
和*.trilium.dpdns.org
,有效期选择15年。

点击创建
,会生成你的源证书和私钥。
🔑 一定要保存好!一定要保存好!一定要保存好!
⚠️ 私钥下面的页面关闭后就再也不能查看了。

上面的页面关闭后,只有证书还能再次下载查看,如下图。如果私钥没保存,请删除重建。

把证书“放”到服务器
运行安装的Xshell 8,连接VPS。

① 进入证书目录
cd /etc/ssl/certs
② 新建证书文件(空文件)
sudo nano trilium.pem
③ 把 Cloudflare Origin CA 证书 内容一次性粘进去

粘贴 → 保存退出:
右键粘贴→Ctrl + O → Enter → Ctrl + X
④ 同样把私钥也放好
cd /etc/ssl/private
sudo nano trilium.key

粘贴 → 保存退出:
右键粘贴→Ctrl + O → Enter → Ctrl + X
⑤ 权限改安全:
sudo chown root:root trilium.key
sudo chmod 600 trilium.key
服务器装 Nginx
✅第 1 步:装 Nginx
sudo apt update && sudo apt install nginx -y
✅第 2 步:新建站点配置
sudo nano /etc/nginx/sites-available/trilium
✅第 3步:粘贴 → 保存退出
右键粘贴→Ctrl + O → Enter → Ctrl + X
🤖注意:要将代码中所有与域名
trilium.dpdns.org
相关的内容,替换成你自己的,再粘贴进配置里。
# ========== 唯一且仅有一个 80 端口 Server:强制跳 HTTPS ==========
server {
listen 80;
listen [::]:80;
server_name trilium.dpdns.org;
return 301 https://trilium.dpdns.org$request_uri;
}
# ========== HTTPS 主 Server:HTTP + WebSocket 通用 ==========
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name trilium.dpdns.org;
# ---- 证书 ----
ssl_certificate /etc/ssl/certs/trilium.pem;
ssl_certificate_key /etc/ssl/private/trilium.key;
# ---- TLS 强化 ----
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# ---- 上传大小 ----
client_max_body_size 1000M;
# ---- 通用 location:同时支持普通 HTTP 与 WebSocket(路径 /) ----
location / {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
# 核心:允许协议升级
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
# 常规透传头
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 https;
# WebSocket 长连优化
proxy_buffering off;
proxy_read_timeout 86400s;
proxy_send_timeout 86400s;
}
}
✅ 第 4 步:让 Nginx 加载这个新配置
# 启用站点(建立软链接)
sudo ln -s /etc/nginx/sites-available/trilium /etc/nginx/sites-enabled/
# 检查语法有没有写错
sudo nginx -t
正常会显示:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
✅ 第 5 步:替换服务器上/etc/nginx
路径下的nginx.conf
文件
nginx.conf (若附件失效,可自行去nginx.conf配置文件中加入下面这串代码)
为什么要替换这个nginx.conf文件,因为我遇到了一个bug困扰了好几天才从AI那获取最终解决问题的优化。
![]() | ![]() |
相较于原版的nginx.conf文件只在http {
后增加了以下代码:
http {
# ① 升级变量映射(WebSocket 需要)★★★ 放在最顶部 ★★★
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
##
# Basic Settings
##
✅第 6 步:检查服务器上/etc/nginx/sites-enabled
路径下的只保留trilium的快捷方式,删除/etc/nginx/sites-enabled
路径下nginx可能生成的default文件,防止80端口冲突。

✅第 7 步:重载 Nginx(不停服务)。
sudo systemctl reload nginx
✅ 第 8 步:确认 80 端口已监听
sudo netstat -tlnp | grep :80
防火墙 80/443端口放行
✅ 安装保存工具丨出现彩色提示框直接按 ← 左箭头选 YES → 回车(没提示就继续)。
sudo apt install iptables-persistent -y

✅ 放行 80 端口(IPv4 最前)
sudo iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
✅ 放行 80 端口(IPv6 最前)
sudo ip6tables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
✅ 放行 443 端口(IPv4 最前)
sudo iptables -I INPUT 1 -p tcp --dport 443 -j ACCEPT
✅ 放行 443 端口(IPv6 最前)
sudo ip6tables -I INPUT 1 -p tcp --dport 443 -j ACCEPT
✅ 保存规则(重启不失效)
sudo netfilter-persistent save

✅ 【检查是否成功】
sudo iptables -L -n --line-numbers | grep -E 'dpt:80|dpt:443'
只要看到类似,就说明 80 和 443 防火墙已打开!
1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
2 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443