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

如何使用uWSGI白名单命令及配置uwsgi.ini实现白名单功能

解决uWSGI白名单配置生效的问题

Hey there! Let's break down how to get uWSGI's whitelist working correctly, since it's easy to mix up what it actually controls. First, let's fix a tiny typo in your config that might cause other issues, then clarify what the whitelist option does and how to use it properly.

首先,纠正你配置里的小错误

你的static-map路径少了一个斜杠,正确写法应该是:

static-map = /static=/usr/local/myproject/static

这个不影响白名单,但能修复静态文件的访问问题,如果之前没注意到的话。

关键:搞清楚whitelist的作用范围

这是最容易混淆的点!uWSGI的whitelist选项只限制uWSGI内部控制端口的访问(比如你配置的stats = 127.0.0.1:5566端口),完全不影响你的主HTTP应用端口(http = :80)。

如果你本来是想阻止外部访问80端口的应用,那whitelist根本起不到作用——这类限制需要靠前端Web服务器(比如Nginx)或者Python应用内部的IP过滤来实现。

验证你的当前白名单是否生效(针对stats端口)

你当前的whitelist = 127.0.0.1配置是正确的,它会把stats端口的访问限制在本地。可以这样测试:

  • 在服务器本地执行uwsgi --connect-and-read 127.0.0.1:5566,应该能看到JSON格式的stats数据。
  • 从其他机器尝试访问这个5566端口(比如用curl),连接会被阻断或者超时。

正确配置白名单的多种场景

如果需要调整控制端口的白名单,这里有几种常见用法:

  • 单个IP:你当前的配置就没问题:whitelist = 127.0.0.1
  • 多个IP:用空格分隔:whitelist = 127.0.0.1 192.168.1.100
  • 整个网段:使用CIDR格式:whitelist = 192.168.1.0/24
  • 所有控制端口:白名单规则会自动应用到你配置的所有内部控制端口(stats、admin、rpc等)。

如果需要限制你的HTTP应用(80端口)的访问

既然whitelist管不到主应用端口,推荐用下面两种方法:

方法1:用Nginx做反向代理(推荐)

让Nginx代理请求到uWSGI,然后在Nginx里添加IP限制:

server {
    listen 80;
    server_name your-domain.com;

    location / {
        # 只允许这些IP/网段访问
        allow 127.0.0.1;
        allow 192.168.1.0/24;
        deny all;

        uwsgi_pass unix:/path/to/your/uwsgi.sock; # 也可以用TCP方式
        include uwsgi_params;
    }

    # 让Nginx直接处理静态文件(性能更好)
    location /static/ {
        root /usr/local/myproject;
    }
}

方法2:在Python应用里添加IP过滤

如果你用的是Django、Flask这类框架,可以添加中间件来拦截未授权的IP。比如Django的中间件:

# myproject/middleware.py
from django.http import HttpResponseForbidden

class IPWhitelistMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response
        # 允许访问的IP列表
        self.allowed_ips = {"127.0.0.1", "192.168.1.100"}

    def __call__(self, request):
        client_ip = request.META.get("REMOTE_ADDR")
        if client_ip not in self.allowed_ips:
            return HttpResponseForbidden("访问被拒绝:你的IP不在白名单内。")
        response = self.get_response(request)
        return response

然后在settings.py里注册这个中间件:

MIDDLEWARE = [
    # ... 其他中间件 ...
    "myproject.middleware.IPWhitelistMiddleware",
]

总结

  • 你当前的whitelist配置对于限制stats端口访问是完全正确的。
  • 如果是想限制主应用的访问,需要用Nginx或者应用级中间件来实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:06:37