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

如何通过NGINX+UWSGI实现本地IP服务映射公网IP/端口访问

公网访问本地Django应用配置方案

核心故障原因

公网IP访问返回页面找不到,是请求匹配规则未覆盖公网请求、转发规则配置方向错误共同导致的,按以下步骤修改即可:

1. 调整Nginx服务配置

当前Nginx的server_name仅配置了内网IP,公网请求携带的Host头为你的公网IP,无法命中当前server块,会被Nginx默认站点返回404。

  • 找到Nginx配置中server块的server_name配置项,将公网IP加入匹配列表,临时调试也可以直接用通配符_匹配所有未命中其他规则的请求:
upstream django {
        server unix:///my_path/my_project.sock; 
    }

server {
    listen      80;
    # 替换为你实际的内网IP、公网IP,后续绑定域名可直接追加在后面
    server_name 你的内网IP 你的公网IP;
    # 临时调试可直接写 server_name _;
    charset     utf-8;

    client_max_body_size 75M;

    location /media  {
        alias /my_path/media;  
    }

    location /static {
        alias /my_path/static;
    }
    location / {
        uwsgi_pass  django;
        include     /my_path/uwsgi_params; 
    }
}
  • 配置修改完成后先执行nginx -t检查语法正确性,确认无报错后执行nginx -s reload重载配置生效。

2. 更新Django白名单配置

Django的ALLOWED_HOSTS配置会对请求的Host头做白名单校验,当前仅配置内网IP的情况下,公网IP发起的请求会被Django直接拦截返回错误。

  • 打开项目的settings.py文件,将公网IP加入ALLOWED_HOSTS列表:
# 替换为实际的IP值,本地回环地址可一并加上方便本地调试
ALLOWED_HOSTS = ['你的内网IP', '你的公网IP', '127.0.0.1', 'localhost']
  • 修改完成后重启uWSGI进程,让Django配置生效。

3. 修正防火墙/端口映射规则

你之前配置的“本地IP到公网IP的转发规则”方向错误,正确的规则配置要求:

  • 在出口网关/防火墙配置入方向DNAT规则:将公网IP的80端口TCP请求,转发到内网服务器的本地IP 80端口
  • 放开网关/防火墙公网入方向80端口的访问权限,不要拦截公网来源的80端口请求
  • 检查服务器本地系统防火墙(firewalld/ufw/iptables)的入站规则,确认80端口对所有来源放开,不要仅限制内网段访问

4. 访问验证

按顺序做连通性校验:

  • 在本地服务器执行curl 127.0.0.1,确认本地服务正常
  • 同内网其他设备访问http://你的内网IP,确认内网访问正常
  • 手机断开内网WiFi、使用移动流量访问http://你的公网IP,确认公网访问正常

注意:如果运营商分配的IP是100.64开头的地址,属于运营商级NAT的内网地址,不是真正可直接映射的公网IP,需要联系运营商调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:24:21