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

Ubuntu系统下如何实现无需端口直接通过域名访问Flask服务

问题根本原因

HTTPS协议默认使用443端口,你当前把配置了SSL证书的Flask服务跑在80端口上,用户访问https://test.example.com时浏览器会默认请求443端口,而你的服务没监听这个端口,自然访问失败。你访问https://test.example.com:80能通是因为主动指定了请求80端口的HTTPS服务,不符合常规使用习惯。另外注意你的代码里ssl_conext是拼写错误,正确写法为ssl_context。


解决方案

方案1:直接修改Flask监听端口(适合测试场景)

把启动代码里的port参数改成443即可:

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=443, ssl_context=context)

修改后重启Flask服务即可,注意1024以下的端口需要root权限启动,所以启动命令要加sudo,比如sudo python3 flask_server.py。

方案2:用Nginx做反向代理(生产环境推荐)

生产环境不建议直接用Flask自带的server对外提供服务,稳定性和性能都不足,用Nginx做反向代理是更合理的选择:

  • 首先把Flask服务改成监听内部端口比如5000,不需要单独配置SSL(SSL交给Nginx处理即可),启动代码改成:
if __name__ == '__main__':
    app.run(host='127.0.0.1', port=5000)
  • 安装Nginx:sudo apt install nginx
  • 新增Nginx配置文件/etc/nginx/sites-available/test.example.com,内容参考:
server {
    listen 80;
    server_name test.example.com;
    # 把HTTP请求跳转到HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name test.example.com;

    # 配置SSL证书路径
    ssl_certificate 你的证书pem文件路径;
    ssl_certificate_key 你的证书key文件路径;

    location / {
        proxy_pass http://127.0.0.1:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
  • 激活配置:sudo ln -s /etc/nginx/sites-available/test.example.com /etc/nginx/sites-enabled/
  • 测试配置是否合法:sudo nginx -t
  • 重启Nginx生效:sudo systemctl restart nginx
  • 可以把Flask服务配置成systemd服务后台自启,避免退出终端就停止服务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:15:02