域名与请求转发
在你选择的代理中终止 TLS,并把应用请求路径转发到私有监听端口。将 MEMOS_INSTANCE_URL 设置为外部访问地址,例如 https://notes.example.com。后端端口不要直接暴露公网。代理应保留主机名及转发协议,并允许流式响应和所需大小的授权上传。
只信任自己的代理
MEMOS_TRUSTED_PROXIES 控制哪些上游节点可提供客户端地址信息,默认信任私有网络。条件允许时应限定为实际代理网络,并确认不受信任的客户端不能伪造转发地址。限流依赖正确的客户端身份。代理缓冲事件流或过早关闭空闲连接时,即使普通页面正常,实时更新也可能受影响。
从外部验证
通过代理验证外部健康检查、登录和退出、附件上传下载,以及事件流。在浏览器中检查 TLS 与 Cookie 行为。可参考故障排查区分代理和应用问题。
同机原生后端的 Nginx 示例
前提:域名已指向主机,Nginx 已安装,证书和私钥已签发,原生 Memos 进程仅通过 127.0.0.1:5230 可达。为应用设置 MEMOS_INSTANCE_URL=https://notes.example.com 与 MEMOS_TRUSTED_PROXIES=127.0.0.1/32,并替换下面的域名及证书路径。此例假设 Nginx 直接运行在主机上;代理位于容器中或后端使用 Docker 端口发布时,桥接/NAT 可能改变 Memos 看到的节点,应使用实际可达后端与观察到的代理网段,不要照抄 127.0.0.1/32。示例不会自动签发证书。
server {
listen 80;
server_name notes.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name notes.example.com;
ssl_certificate /etc/ssl/memos/fullchain.pem;
ssl_certificate_key /etc/ssl/memos/privkey.pem;
client_max_body_size 50m;
location / {
proxy_pass http://127.0.0.1:5230;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
proxy_buffering off;
proxy_read_timeout 300s;
proxy_cache off;
}
}放行流量前验证
把 server 配置放进当前 Nginx 安装实际使用的 include 目录,先运行 nginx -t,再重载对应服务。此单层代理示例会覆盖来自互联网客户端的不可信转发地址。50 MiB 只是示例传输上限,不会修改应用的附件大小设置。调整缓冲与超时前参考 Nginx 代理指令。
nginx -t
curl --fail --show-error http://127.0.0.1:5230/healthz
curl --fail --show-error https://notes.example.com/healthz解释验证结果
直连检查失败时先修应用监听;只有 HTTPS 失败时检查 DNS、证书有效性、代理到后端的连接及 Nginx 日志。413 表示请求超过某层大小限制,只调整其中一层未必有效;502/504 通常需要检查后端连接或超时。最后用普通账号在浏览器验证登录、上传下载和实时更新,不要通过关闭证书验证让检查表面通过。