如何获取Apache使用的wsgi_mod版本?

25

我正在使用Ubuntu 12.041,并通过apt-get安装了Apache。

虽然我在google上查找了关于mod_wsgi版本的信息,但我不知道自己使用的是哪个版本。我发现可以使用apachctl重启Apache并获得类似于“Apache/2.2.2 (Unix) mod_wsgi/1.0 Python/2.3 configured”的东西。但这在我的情况下没有发生。

是否有任何方法可以知道我正在使用的版本?谢谢。

6个回答

20

如果您重新启动Apache并检查日志:

sudo apachectl -k restart
tail -n 5 /var/log/apache2/error.log

...你应该看到这个版本号:

[Fri Jun 05 15:13:46.546029 2015] [mpm_prefork:notice] [pid 2245] AH00163: Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.9 mod_wsgi/3.4 Python/3.4.0 配置完成-- 恢复正常操作


2
我相信如果Apache进行了特定的配置,那么该行中的信息可能可以部分排除。因此,不要仅仅依赖于有关mod_wsgi和Python的信息出现。 - Graham Dumpleton
4
您可以在无需重新启动的情况下查看现有日志:grep mod_wsgi /var/log/apache2/error.log - PeterVermont

13

我使用这个

dpkg -l | grep wsgi
我不知道它在做什么,但它是一个版本吗?
libapache2-mod-wsgi  (on ubuntu 10.04)

并不兼容Python 3.x。我是从某个随机的网络论坛上得知的,我不知道具体原因。此外,如何确定libapache2版本的方法超出了我的知识范围。

但是,上面的Unix脚本可以为您获取版本信息。在那之后,你就会独自面对了,水手。


3
关于发行版本打包的mod_wsgi版本的更多细节,从我手写的笔记中可以得知,您可以运行“apt-cache policy libapache2-mod-wsgi”命令。在Ubuntu系统上,Python 3版本将在包名中包含“py3”。 - Graham Dumpleton

12
在您的WSGI应用程序中查看WSGI环境字典中mod_wsgi.version的值。或者,在运行在mod_wsgi下的WSGI应用程序中(而不是命令行Python)导入mod_wsgi模块,并从该模块打印mod_wsgi.version

13
有一些...代码?或者一个文件夹?或者指向某个东西的指针,使这个过程变得轻松简单将会非常有用。 - bharal
只需在您的代码中添加 import mod_wsgilogsomewhere(mod_wsgi.version)。如前所述,您需要在 wsgi/apache 中运行代码,而不是在 Django Runserver 中运行。或者您可以将 modwsgi.version 添加到模板上下文中,并在应用程序的某些系统信息页面上显示它。 - tzanke

8

移动到Apache模块目录,其中mod_wsgi.so位于其中。

运行以下命令。

$ strings mod_wsgi.so | grep -w -A 1 "wsgi_init"
wsgi_init
4.5.7   

注意在出现wsgi_init后,可能需要使用-A来显示超过1行的内容。例如,在mod_wsgi版本2.7.5中,您需要使用-A 2来查看版本号:

$ strings mod_wsgi.so | grep -w -A 2 "wsgi_init"
wsgi_init
mod_wsgi/%s
2.7.5

我认为我正在使用mod_wsgi来运行Python 2.73.4.3(正在尝试弄清楚),但是按照您的命令并没有解决我的问题。我得到了这两行输出:wsgi_initmod_wsgi /%s。输出中没有前导或尾随空格,只有换行符。 - Leonid
我遇到了同样的问题。我将-A 1更改为-A 5以在wsgi_init打印后获取更多行。我得到了wsgi_init mod_wsgi/%s 2.7.5 %s.%d.%d.%d.sock %s.%d.%d.%d.lock sysvsem - James McCormac

3

有一个相关的问题是关于mod_wsgi所使用的Python版本。您可以通过使用ldd检查mod_wsgi.so模块来获取该信息:

➜  / cd usr/lib/apache2/modules 
➜  modules ldd mod_wsgi.so
        linux-vdso.so.1 =>  (0x00007ffcaabf3000)
        libpython2.7.so.1.0 => /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0 (0x00007f4e29c62000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4e29a45000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4e2967b000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f4e29461000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f4e2925d000)
        libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f4e2905a000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4e28d51000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f4e2a423000)
➜  modules 

在我的情况下,它显然是使用python2.7编译的。


0

这篇文章很老,但我没有看到我找到的答案:

yum list installed '*mod_wsgi*'

或者更好的是

yum list '*mod_wsgi*'

查看您已安装的内容以及可用的(可能是)更新版本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接