首页主机资讯Debian Apache如何支持Python

Debian Apache如何支持Python

时间2025-12-16 16:22:04发布访客分类主机资讯浏览1489
导读:Debian 上让 Apache 支持 Python 的主流做法有三种:使用 mod_wsgi 运行 WSGI 应用(推荐)、使用 CGI 方式运行脚本、以及使用已不推荐但仍有历史遗留的 mod_python。下面给出可直接落地的步骤与要点...

Debian 上让 Apache 支持 Python 的主流做法有三种:使用 mod_wsgi 运行 WSGI 应用(推荐)、使用 CGI 方式运行脚本、以及使用已不推荐但仍有历史遗留的 mod_python。下面给出可直接落地的步骤与要点。

方案一 使用 mod_wsgi 部署 WSGI 应用(推荐)

  • 安装组件并启用模块
    • 安装 Apache、Python3 与 WSGI 模块:sudo apt update & & sudo apt install apache2 python3 python3-pip libapache2-mod-wsgi-py3
    • 启用模块:sudo a2enmod wsgi
  • 准备应用与 WSGI 入口
    • 示例应用文件 /var/www/yourapp/app.py
      from flask import Flask
      app = Flask(__name__)
      @app.route("/")
      def hello():
          return "Hello, World from Flask via mod_wsgi"
      if __name__ == "__main__":
          app.run()
      
    • 生成 WSGI 入口 /var/www/yourapp/wsgi.py
      import sys
      sys.path.insert(0, "/var/www/yourapp")
      from app import app as application  # 对象名必须为 application
      
  • 配置虚拟主机
    • 新建 /etc/apache2/sites-available/yourapp.conf
      <
          VirtualHost *:80>
          
          ServerName yourdomain.com
      
          WSGIDaemonProcess yourapp python-home=/var/www/yourapp/venv python-path=/var/www/yourapp
          WSGIProcessGroup yourapp
          WSGIScriptAlias / /var/www/yourapp/wsgi.py
      
          <
          Directory /var/www/yourapp>
          
              Require all granted
          <
          /Directory>
      
      
          ErrorLog ${
      APACHE_LOG_DIR}
      /error.log
          CustomLog ${
      APACHE_LOG_DIR}
          /access.log combined
      <
          /VirtualHost>
          
      
    • 启用站点并重启:sudo a2ensite yourapp.conf & & sudo systemctl restart apache2
  • 说明
    • 使用虚拟环境时,将 python-home 指向虚拟环境目录(如 /var/www/yourapp/venv),将应用目录加入 python-path
    • 若使用旧版 .egg 包,需设置 PYTHON_EGG_CACHE 目录并确保可写。

方案二 使用 CGI 运行 Python 脚本(简单脚本场景)

  • 启用 CGI 模块并准备脚本
    • 启用模块:sudo a2enmod cgi
    • 脚本示例 /usr/lib/cgi-bin/hello.py
      #!/usr/bin/env python3
      print("Content-Type: text/html")
      print()
      print("<
          html>
          <
          body>
          Hello, World from CGI<
          /body>
          <
          /html>
          ")
      
    • 赋权:sudo chmod +x /usr/lib/cgi-bin/hello.py
  • 配置站点
    • /etc/apache2/sites-available/000-default.conf 的 VirtualHost 中加入:
      ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
      <
          Directory "/usr/lib/cgi-bin">
          
          AllowOverride None
          Options +ExecCGI
          AddHandler cgi-script .py
          Require all granted
      <
          /Directory>
          
      
    • 重启:sudo systemctl restart apache2
  • 验证:curl http://localhost/cgi-bin/hello.py

方案三 使用 mod_python(历史方案,不推荐新项目使用)

  • 安装与启用
    • 安装:sudo apt-get install libapache2-mod-python libapache2-mod-python-doc
    • 启用:sudo a2enmod python
  • 测试与示例
    • 测试句柄(完成后请移除,避免安全风险):
      <
          Location /mpinfo>
          
          SetHandler mod_python
          PythonHandler mod_python.testhandler
          <
          IfModule mod_authz_core.c>
          
              Require all granted
          <
          /IfModule>
          
      <
          /Location>
          
      
    • 简单处理器示例 /var/www/py/hello.py
      from mod_python import apache
      def handler(req):
          req.content_type = 'text/html'
          req.send_http_header()
          req.write('<
          html>
          <
          body>
          Hello World from mod_python<
          /body>
          <
          /html>
          ')
          return apache.OK
      
    • 配置目录(在站点配置中):
      <
          Directory /var/www/py>
          
          AddHandler mod_python .py
          PythonHandler hello
          PythonDebug On
      <
          /Directory>
          
      
  • 说明
    • mod_python 将解释器嵌入 Apache,性能优于传统 CGI,但项目维护与兼容性不如 WSGI 生态,官方与社区已转向 WSGI。

常见问题与排错要点

  • 服务与语法检查
    • 检查状态:sudo systemctl status apache2
    • 语法检查:sudo apache2ctl configtest
    • 查看日志:tail -f /var/log/apache2/error.log
  • 权限与路径
    • CGI 脚本需可执行:chmod +x;WSGI 目录需 Require all granted
    • 确认 python-home/python-pathWSGIScriptAlias 路径正确,且 WSGI 入口对象名为 application
  • 虚拟环境与依赖
    • 在虚拟环境中 pip install -r requirements.txt;如使用 .egg 包,设置可写的 PYTHON_EGG_CACHE
  • 防火墙与端口
    • 如有防火墙,放行 HTTP/HTTPS:sudo ufw allow 'Apache Full'(或放行 80/443)。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Debian Apache如何支持Python
本文地址: https://pptw.com/jishu/772927.html
Ubuntu系统中日志文件权限如何设置 Debian Apache如何支持Node.js

游客 回复需填写必要信息