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

如何在绑定SSL域名的CentOS服务器部署公网可访问Django应用

核心问题判定
  • 你当前使用的runserver、runserver_plus、runsslserver均为Django生态的开发调试服务器,仅设计用于本地开发场景,无生产级并发处理、安全防护能力,禁止直接暴露在公网长期运行。
  • 公网访问8000端口超时的直接原因是8000端口的公网入站链路未放通:服务器本地iptables防火墙、云服务商侧安全组(如果是云服务器)均未添加8000端口的放行规则,而你能正常访问80/443端口是因为这两个端口的规则已经提前配置完成。

即使临时放通8000端口,也不建议长期用开发服务器承载公网流量,极易出现性能瓶颈、安全漏洞。

生产环境部署方案(适配现有Apache 2.2环境)

基于你已经配置完成的Apache+SSL环境,直接通过mod_wsgi模块对接Django应用是最优方案,可复用现有SSL证书、不需要开放额外公网端口,稳定性和安全性符合生产要求。

步骤1:安装必要组件

  1. 安装Apache对应WSGI模块:
    yum install mod_wsgi
    
  2. 进入你的Django项目运行的Python环境(如果用了虚拟环境就激活虚拟环境),安装Python侧mod_wsgi依赖:
    pip install mod_wsgi
    

步骤2:加载mod_wsgi模块到Apache

执行以下命令获取模块加载配置:

mod_wsgi-express module-config

命令会输出3行配置,格式参考如下:

LoadModule wsgi_module /usr/lib64/httpd/modules/mod_wsgi.so
WSGIPythonHome /path/to/your/python/env
WSGIPythonPath /path/to/your/django/project

将输出的内容全部复制,追加到Apache主配置文件/etc/httpd/conf/httpd.conf的末尾,或者新建/etc/httpd/conf.d/wsgi.conf写入内容(CentOS下Apache会自动加载conf.d目录下所有.conf后缀的配置文件)。

步骤3:配置Apache虚拟主机规则

找到你已经配置好SSL的443端口虚拟主机配置文件,保留原有SSL证书相关配置不变,添加Django相关映射规则,适配Apache 2.2语法的配置示例如下:

<VirtualHost *:443>
    ServerName mywebsite.com
    # 保留原有SSL配置,不要修改
    SSLEngine on
    SSLCertificateFile /path/to/your/cert_file.crt
    SSLCertificateKeyFile /path/to/your/private.key
    SSLCertificateChainFile /path/to/your/ca_chain.crt

    # 映射Django静态文件,提前执行collectstatic收集静态资源到指定目录
    Alias /static/ /data/www/your_django/static/
    <Directory /data/www/your_django/static>
        Order allow,deny
        Allow from all
    </Directory>

    # 映射Django用户上传的媒体文件
    Alias /media/ /data/www/your_django/media/
    <Directory /data/www/your_django/media>
        Order allow,deny
        Allow from all
    </Directory>

    # 绑定Django的WSGI入口
    # 如果要把全站请求转给Django,路径填/;如果只转/django_app路径,填/django_app
    WSGIScriptAlias /django_app /data/www/your_django/your_project/wsgi.py
    <Directory /data/www/your_django/your_project>
        <Files wsgi.py>
            Order allow,deny
            Allow from all
        </Files>
    </Directory>
</VirtualHost>

如果仅将/django_app路径映射给Django,需要额外在Django的settings.py中添加配置:FORCE_SCRIPT_NAME = '/django_app',避免路径解析错误。

步骤4:调整Django生产配置

编辑项目下的settings.py文件:

  • 关闭调试模式:DEBUG = False
  • 配置允许访问的主机,不要使用通配符*:ALLOWED_HOSTS = ['mywebsite.com', '127.0.0.1']
  • 配置静态文件根目录:STATIC_ROOT = '/data/www/your_django/static/'
  • 执行静态资源收集命令,将项目、admin后台等所有静态文件汇总到指定目录:
    python manage.py collectstatic
    

步骤5:重启Apache生效

执行命令重启Apache服务:

service httpd restart

配置完成后不需要启动runserver系列服务,直接访问https://mywebsite.com/django_app/home即可通过公网正常访问Django应用。

临时调试方案(仅用于短时间调试,禁止生产使用)

如果仅临时需要公网访问Django调试服务,不需要做完整生产部署,按以下步骤放通端口即可:

  1. 配置服务器本地iptables防火墙,放行8000端口TCP入站流量:
    iptables -I INPUT -p tcp --dport 8000 -j ACCEPT
    service iptables save
    
  2. 如果服务器是云服务商提供的实例,登录对应云平台控制台,在实例安全组添加入站规则:放行TCP 8000端口,源地址设为0.0.0.0/0。
  3. 重新执行python manage.py runserver 0.0.0.0:8000启动服务,即可通过公网IP:8000访问。

开发服务器单进程仅能处理串行请求,且默认开启调试模式会暴露敏感信息,调试完成后立即停止服务,关闭8000端口的公网放行规则。

内容的提问来源于stack exchange,提问作者Abhilash Singh Chauhan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:39:18