Streamlit服务器IP白名单配置求助:未找到设置指引及配置项
Streamlit 服务器IP访问白名单配置方法
Streamlit本身没有内置IP白名单配置项,需要通过反向代理、操作系统防火墙或代码逻辑实现访问限制,以下是三种可行方案:
方案一:Nginx反向代理实现IP白名单
- 先将Streamlit服务绑定到本地回环地址,避免直接暴露在外网:
streamlit run app.py --server.address 127.0.0.1 --server.port 8501 - 配置Nginx的server块,添加IP允许/拒绝规则:
server { listen 80; server_name your-domain.com; # 允许指定单个IP或网段访问 allow 192.168.1.100; allow 10.0.0.0/24; # 拒绝所有未在允许列表内的IP deny all; location / { proxy_pass http://127.0.0.1:8501; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } - 重启Nginx服务使配置生效。
方案二:操作系统防火墙规则限制
Linux(iptables)
执行以下命令,仅允许指定IP/网段访问Streamlit端口(示例为8501):
# 允许单个IP访问 iptables -A INPUT -p tcp --dport 8501 -s 192.168.1.100 -j ACCEPT # 允许整个网段访问 iptables -A INPUT -p tcp --dport 8501 -s 10.0.0.0/24 -j ACCEPT # 拒绝其他所有IP访问该端口 iptables -A INPUT -p tcp --dport 8501 -j DROP
Windows(高级防火墙)
- 打开「Windows Defender防火墙高级设置」
- 新建入站规则,选择「端口」类型,指定8501端口
- 选择「允许连接」,在「作用域」中添加允许的IP地址范围
- 完成规则创建并启用
方案三:Streamlit代码内添加IP校验逻辑(临时方案)
在应用代码开头添加客户端IP校验,不符合规则则终止服务:
import streamlit as st from streamlit.web.server.server import Server from streamlit.runtime.scriptrunner import get_script_run_ctx def get_client_ip(): ctx = get_script_run_ctx() if not ctx: return None session_info = Server.get_current()._session_info_by_id.get(ctx.session_id) return session_info.request.remote_addr if session_info else None # 定义允许访问的IP列表 ALLOWED_IPS = {"192.168.1.100", "10.0.0.5"} client_ip = get_client_ip() if client_ip not in ALLOWED_IPS: st.error("您的IP地址不允许访问本服务") st.stop() # 正常业务代码 st.title("受限访问的Streamlit应用")
注意:此方案依赖Streamlit内部未公开的API,可能随版本更新失效,仅适合临时场景使用。
内容的提问来源于stack exchange,提问作者user16627746
相关产品推荐
相关产品推荐

