Python中如何在一台服务器上配置Flask和Django两个项目网站?只有一个公网IP

详细情况:
服务器:一台阿里云 ECS 主机。
域名:有两个域名,均未备案(已提交,审核太慢了。但是现在急需运行项目)。

本来只有一个 Flask 项目,配置 Nginx 后通过访问公网 ip,就能直接访问。
现在想再往服务器部署一个 Django 项目。该如何配置呢?

在网上查到的方法都是有两个域名,在 Nginx 里设置两个 Server name 和 端口号即可。但现在两个域名都未备案,无法使用。可用的只有一个公网 IP、有什么方法可以同时部署好这两个项目并访问呢 。求各位指教
Python中如何在一台服务器上配置Flask和Django两个项目网站?只有一个公网IP


16 回复

IP 也可以不同端口啊
1.2.3.4:80
1.2.3.4:81


帖子回复:

这个问题很实际,一个公网IP跑多个Web项目是常见需求。核心思路就是用反向代理(比如Nginx)根据访问的域名或路径,把请求转发到对应的后端服务。Flask和Django项目各自在自己的端口上运行(比如Flask在5000,Django在8000),然后由Nginx统一对外。

下面是一个最直接的Nginx配置示例,假设你的公网IP绑定了两个域名:

  • flask.example.com -> 指向Flask应用 (运行在 127.0.0.1:5000)
  • django.example.com -> 指向Django应用 (运行在 127.0.0.1:8000)

1. 首先,确保你的Flask和Django项目能在本地端口正常启动。

  • Flask: 通常 app.run(host='0.0.0.0', port=5000)
  • Django: python manage.py runserver 0.0.0.0:8000 (仅用于测试,生产环境要用Gunicorn/UWSGI)

2. 关键的Nginx配置 (/etc/nginx/sites-available/your_config 或直接在 nginx.confhttp 块里):

server {
    listen 80;
    server_name flask.example.com;

    location / {
        proxy_pass http://127.0.0.1:5000;
        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;
    }
}

server {
    listen 80;
    server_name django.example.com;

    location / {
        proxy_pass http://127.0.0.1:8000;
        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;
    }
}

3. 配置完成后,检查Nginx配置并重启:

sudo nginx -t  # 测试配置
sudo systemctl restart nginx  # 或 sudo service nginx restart

4. 最后,把你的域名DNS解析到这台服务器的公网IP。

如果只有一个域名,也可以用路径区分,比如 example.com/flaskexample.com/django,配置里改一下 location 块就行。

总结:用Nginx根据域名或路径做反向代理是标准做法。

Flask 和 Django 都可以改端口的

用 kong 做 gateway

不同端口 然后 nginx 反代

好的,我试试~先感谢一下。

好的,我去试试。先感谢一下哈。

一般情况下后面的 python 应用使用 uWSGI 或 gunicorn 跑在两个不同端口号上,前面用 Nginx 对不同域名反向代理 到对应的应用端口就行了。网上例子很多。

也可以同一端口,路由到不同 url 前缀。比如 /flask 转发到 flask 的进程,/django 转发到 django 的进程

不同的域名对应到不同的端口

nginx 路径域名端口都可以,google

一个域名 一个端口

访问域名还添加端口,费事不?
是不是可以考虑使用 nginx 做一个反向代理呢

先感谢楼上各位回复~,无法通过 IP+不同端口 访问两个网站的原因找到了。给以后再碰到这个问题的同志们省点麻烦

原因:阿里云的主机服务默认只开放了几个特定的端口号。除了这几个,别的端口号是无法访问的。
解决:想用自己设定的端口号的话,就去网上找一下开放阿里云端口号的教程,开放自己的端口就好啦。

是也乎 ╮(╯▽╰)╭

用 ngnix 将内部端口映射到不同目录也可~

回到顶部