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

CentOS7加载Python3.9版mod_wsgi及自定义配置时httpd启动失败

问题根因

两个报错本质是同一个问题:

  1. Invalid command 'WSGIScriptAlias' 是因为mod_wsgi模块根本没加载成功,Apache不认识WSGI开头的配置指令
  2. cannot open shared object file: No such file or directory 是核心原因:你在shell中配置的LD_LIBRARY_PATH/LD_RUN_PATH环境变量仅对当前shell启动的程序生效,systemd管理的httpd服务启动时不会读取这些shell环境变量,找不到mod_wsgi依赖的Python3.9动态库。

解决步骤

选其中一种方案即可,第一种方案长期稳定性更好。

方案一:重新编译mod_wsgi,硬编码库路径(推荐)

编译时直接把Python库路径写入mod_wsgi的运行时搜索路径,不依赖任何系统全局配置,不会和系统自带Python2.7的mod_wsgi冲突:

  1. 进入你之前解压的mod_wsgi源码目录,清理旧编译产物:
make clean
  1. 重新配置编译参数,注意替换成你实际的Python3.9库路径(从你之前的ldd输出来看你的库路径是/opt/python39/lib,如果实际安装在/opt/python3.9/lib自行替换):
./configure --with-python=/opt/python3.9/bin/python39 LDFLAGS="-Wl,-rpath,/opt/python39/lib"
  1. 重新编译安装:
make
sudo make install
  1. 验证依赖是否正常:
ldd /usr/lib64/httpd/modules/mod_wsgi.so

输出中libpython3.9.so.1.0后面没有not found提示即为正常。

方案二:配置系统动态链接库搜索路径

如果不想重新编译,可以把Python3.9的库路径加入系统全局动态链接库搜索范围:

  1. 新建动态库配置文件,同样注意替换成实际的Python库路径:
echo "/opt/python39/lib" | sudo tee /etc/ld.so.conf.d/python39.conf
  1. 刷新动态链接库缓存:
sudo ldconfig
  1. 同样执行ldd /usr/lib64/httpd/modules/mod_wsgi.so验证依赖解析正常。

配置检查

完成上述操作后,确认你的Apache配置文件(/etc/httpd/conf.d/wsgi.conf或django.conf)中,LoadModule wsgi_module /usr/lib64/httpd/modules/mod_wsgi.so这行必须放在所有WSGIScriptAlias、WSGIDaemonProcess等WSGI相关配置指令的最前面,否则还是会报指令无效的错误。

最后执行配置校验:

sudo apachectl configtest

输出Syntax OK后,再执行sudo systemctl start httpd即可正常启动服务。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 07:21:38