You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Nginx在HTTPS下运行Streamlit应用并解决证书错误?

解决Nginx反向代理Streamlit子域名证书错误问题

问题原因

你遇到的net::ERR_CERT_COMMON_NAME_INVALID错误,核心是当前使用的domain.crt证书没有包含streamlit.domain.com这个子域名。浏览器验证证书时,会检查证书的通用名称(CN)或主题备用名称(SAN)是否匹配访问的域名,不匹配就会判定证书无效。

解决方案

1. 先确认当前证书的覆盖范围

执行以下命令查看证书详情:

openssl x509 -in /etc/nginx/sites-available/domain.crt -text -noout

重点看两个部分:

  • Subject字段里的CN=值,是否是streamlit.domain.com或通配符*.domain.com
  • X509v3 Subject Alternative Name里,是否列出了streamlit.domain.com

如果这两个地方都没有这个子域名,必须重新申请包含该子域名的证书。

2. 重新申请适配子域名的证书

以常用的Let's Encrypt免费证书为例,用certbot工具申请:

  • 如果只需要给streamlit.domain.com单独申请证书:
certbot certonly --nginx -d streamlit.domain.com
  • 如果想让一个证书同时覆盖主域名和子域名:
certbot certonly --nginx -d domain.com -d streamlit.domain.com

执行命令后,certbot会自动验证域名所有权,并生成对应证书,默认存储路径是/etc/letsencrypt/live/[你的域名]/。

3. 更新Nginx配置并重启服务

修改Nginx配置里的证书路径,替换成新生成的证书:

server {
    listen 443 ssl http2;
    server_name streamlit.domain.com;

    # 替换成新证书的路径
    ssl_certificate /etc/letsencrypt/live/streamlit.domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/streamlit.domain.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:8501/;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 86400;
    }
}

保存配置后,重启Nginx生效:

systemctl restart nginx

4. 额外检查项

  • 确认streamlit.domain.com的DNS解析已经指向服务器公网IP,且TTL已生效(可以用nslookup streamlit.domain.com验证)
  • 检查Nginx配置里的server_name是否拼写正确,和子域名完全一致

内容的提问来源于stack exchange,提问作者Danessely

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 06:22:19