内网接口转公网https安全接入配置

大模型内网转公网HTTPS安全接入 配置笔记

整体架构

内网容器 vLLM:8001 
       ↓ Autossh 加密反向隧道
公网云服务器 127.0.0.1:18001
       ↓ 独立Nginx + HTTPS + 密钥鉴权
公网统一入口:https://llm.litearch.cn/v1

核心规则:

  • 公网只开放 80、443、22严禁放行 8001/18001
  • 子域名 llm.litearch.cn 独立Nginx配置,不与博客混用
  • 博客GitHub Action自动构建不影响LLM接口配置

一、公网云服务器配置(ubuntu@VM-0-10-ubuntu)

1. 域名解析

域名:litearch.cn
新增A记录:

  • 主机记录:llm
  • 解析地址:云服务器公网IP
  • 已备案子域名无需额外备案

2. SSL证书申请

sudo certbot --nginx -d llm.litearch.cn

证书自动续期,无需手动维护。

3. Nginx 独立站点配置

配置文件路径:/etc/nginx/sites-available/llm-service

server {
    listen 443 ssl;
    server_name llm.litearch.cn;

    ssl_certificate /etc/letsencrypt/live/llm.litearch.cn/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/llm.litearch.cn/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;

    # 接口访问鉴权密钥
    if ($http_authorization != "Bearer LITEARCH_LLM_2026_SAFE_KEY") {
        return 401;
    }

    location / {
        proxy_pass http://127.0.0.1:18001;
        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_connect_timeout 60s;
        proxy_read_timeout 120s;
    }
}

server {
    listen 80;
    server_name llm.litearch.cn;
    return 301 https://$host$request_uri;
}

启用配置:

sudo ln -s /etc/nginx/sites-available/llm-service /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

4. 解决Nginx域名冲突

清理 litearch.conf 中所有 llm.litearch.cn 多余server块,只保留主博客域名配置,避免端口域名冲突。

5. 安全组/防火墙规则

仅放行:

  • 22 :SSH运维
  • 80 :HTTP证书验证、自动跳转
  • 443 :HTTPS公网接口
    禁止放行:18001、8001

二、内网模型容器配置(root@d58125c354a4)

1. vLLM 启动命令(任意路径可执行)

CUDA_VISIBLE_DEVICES=0 PORT=8001 /root/Documents/code/python/scripts/serve_qwen3_32b.sh

服务监听:127.0.0.1:8001

2. 内网容器免密登录云服务器

# 生成密钥
ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519
# 推送公钥到云服务器免密
ssh-copy-id -i ~/.ssh/id_ed25519.pub ubuntu@llm.litearch.cn

3. 永久反向隧道(断线自动重连)

# 安装工具
apt install autossh -y
# 启动反向隧道:内网8001 → 云机本地18001
autossh -M 0 -N -R 127.0.0.1:18001:127.0.0.1:8001 ubuntu@llm.litearch.cn

关闭旧隧道:

pkill -f autossh

三、连通性测试命令

1. 云服务器本地测试隧道

curl http://127.0.0.1:18001/v1/models

2. 公网接口测试

curl -X POST https://llm.litearch.cn/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: XXXX" \
  -d '{
    "model": "Qwen/Qwen3-32B",
    "messages": [{"role": "user", "content": "你好"}]
  }'

四、接入调用配置

基础信息

  • 接口地址:https://llm.litearch.cn/v1
  • 模型名称:Qwen/Qwen3-32B
  • API Key:EMPTY

Python 调用示例

from openai import OpenAI

client = OpenAI(
    base_url="https://llm.litearch.cn/v1",
    api_key="XXXX"
)

response = client.chat.completions.create(
    model="Qwen/Qwen3-32B",
    messages=[{"role": "user", "content": "你好"}]
)
print(response.choices[0].message.content)

五、安全强制规范

  1. 绝不对外放行 18001/8001 端口,只走443 HTTPS
  2. 所有公网接口必须加 Bearer 密钥鉴权
  3. 同事仅接口调用,无云服务器/内网服务器SSH账号权限
  4. 子域名独立Nginx配置,不混入博客配置,避免被GitHub Action覆盖
  5. SSH禁用密码登录、改端口、仅密钥登录,防爆破

六、日常运维常用命令

  1. 重启LLM服务(内网服务器端):CUDA_VISIBLE_DEVICES=0 PORT=8001 /root/Documents/code/python/scripts/serve_qwen3_32b.sh
  2. 重启隧道(云服务端):pkill -f autossh && autossh -M 0 -N -R 127.0.0.1:18001:127.0.0.1:8001 ubuntu@llm.litearch.cn
  3. Nginx检查重载(云服务端):sudo nginx -t && sudo systemctl reload nginx
  4. 查看隧道进程(云服务端):ps aux | grep autossh

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 kipleyarch@gmail.com
Archive PDF预览 PPTX Obsidian