如何更改 mod_wsgi 使用的默认版本?
我将 Debian 5 与 Apache 2 一起使用。
在似乎是随机事件中,一个站点今晚关闭了,在查看了 Apache 错误日志后,这是这个问题:
(13)Permission denied: mod_wsgi (pid=2751): Unable to connect to WSGI daemon process 'mysite.com-ssl' on '/var/run/apache2/wsgi.2579.0.2.sock' after multiple attempts.
Run Code Online (Sandbox Code Playgroud)
现在我阅读了mod_wsgi的ConfigurationIssues wiki,修复似乎是合理的。无法写入该目录,因此必须指定一个替代方案WSGISocketPrefix
所以我设置:
WSGISocketPrefix /var/run/wsgi
Run Code Online (Sandbox Code Playgroud)
它解决了这个问题,并且站点可以在 Apache 重新启动后加载。
但是,我很好奇 - 为什么这个目录不再可供写入?我错过了什么吗?该/var/run/apache2目录归 拥有root:root,但现在在其下运行的新套接字/var/run/wsgi*.sock是www-data:root.. 服务器重新启动,仅此而已。也许现在某些东西会在启动时接管该目录的权限?
有任何想法吗?谢谢!
我收到“网关超时”
504:网关没有及时收到上游服务器或应用的响应。
我将 apache 与 mod_wsgi 版本 4.4.8 一起使用。
在 apache 错误日志中,我看到:
Timeout when reading response headers from daemon process 'md':
/home/user/mc/src/mc/mc/mc.wsgi
Run Code Online (Sandbox Code Playgroud)
wsgi 配置:
WSGIDaemonProcess md user=mc group=users threads=1 processes=4
maximum-requests=1000
request-timeout=600
python-home=/localhome/user/mc
WSGIScriptAlias /mc /home/mc/src/mc/mc/mc.wsgi
<Location "/mc/">
WSGIProcessGroup md
WSGIApplicationGroup %{GLOBAL}
Require all granted
</Location>
Run Code Online (Sandbox Code Playgroud)
超时发生在 100 秒后。
根据配置超时为 600 秒。
我不知道为什么会发生这种情况。它是可重复的。该错误是可重复的。对于特定的 URL,它每次都会发生。
第一步对我来说是:更好的错误信息。谁负责此消息“从守护进程读取响应头时超时”?
在AWS Elastic Beanstalk上,在“64bit Amazon Linux 2017.09 v2.6.0 running Python 3.6”平台上,好像是mod_wsgi配置有问题。我在/etc/httpd/conf.d/wsgi.conf:
WSGIDaemonProcess wsgi processes=1 threads=15 display-name=%{GROUP} \
python-home=/opt/python/run/venv/ \
python-path=/opt/python/current/app:/opt/python/run/venv/lib64/python3.6/site-packages:/opt/python/run/venv/lib/python3.6/site-packages user=wsgi group=wsgi \
home=/opt/python/current/app
Run Code Online (Sandbox Code Playgroud)
但是,我得到了这个/var/log/httpd/error_log:
[Mon Nov 20 19:54:44.565076 2017] [:error] [pid 32080] mod_wsgi (pid=32080): Call to 'site.addsitedir()' failed for '(null)', stopping.
[Mon Nov 20 19:54:44.565444 2017] [:error] [pid 32080] mod_wsgi (pid=32080): Call to 'site.addsitedir()' failed for '/opt/python/run/venv/lib64/python3.6/site-packages:/opt/python/run/venv/lib/python3.6/site-packages'.
Run Code Online (Sandbox Code Playgroud)
尝试访问该站点会导致此错误:
[Mon Nov 20 21:21:21.304605 2017] [:error] [pid 2886] [remote 71.236.217.102:39802] ModuleNotFoundError: No module named 'myappname'
Run Code Online (Sandbox Code Playgroud)
如果我将 …
我最初安装了 Python 3.6,并且在我的 Linux 服务器上与 WSGI 和 Apache2 配合得很好。
然后我创建了一个 Flask 应用程序,它有一个需要 Python 3.7 的依赖项。我已经成功(并且我认为)升级到 Python 3.9。跑步
python3或者sudo python3
两者都带我到 Python 3.9。但当我跑步时
sudo apt-get install libapache2-mod-wsgi-py3
The following additional packages will be installed: python3, python3.6
Run Code Online (Sandbox Code Playgroud)
它安装Python 3.6
此后,python3仍然指向Python 3.9。但是,当运行 WSGI 应用程序时,使用 Python 3.6,并且它会崩溃。mod-wsgi我已经使用正确的 PIP安装了 Python 包。
主要是通过反复试验,我在下面创建了 Apache 配置文件。
它旨在允许 localhost:8002 上的服务器和通过 WSGI 的 trac 服务器共享 LDAP 服务器,并且看起来在同一个域/端口上。
这些规则是孤立运行的,但不是并行运行的。
特别是,trac WSGI 只有在ProxyPass/ProxyPassReverse行被注释掉时才能正确服务。如果没有重定向,localhost:8002 处的服务器显然不会映射到传出的 8022 端口。
我假设目录、代理和位置规则的组合是我的问题的路径 - 或者它们的顺序?
WSGIDaemonProcess trac stack-size=524288 python-path=/usr/lib/python2.5/site-packages
WSGIScriptAlias /trac /home/web/foo/parts/trac/tracwsgi/cgi-bin/trac.wsgi
<VirtualHost foo.bar.com:8022>
ServerName foo.bar.com
ServerAlias foo.bar.com
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPreserveHost On
ProxyPass / http://localhost:8002/VirtualHostBase/http/foo.bar.com:8022/foo/VirtualHostRoot/
ProxyPassReverse / http://localhost:8002/VirtualHostBase/http/foo.bar.com:8022/foo/VirtualHostRoot/
<Directory "/home/web/foo/parts/trac/tracwsgi/cgi-bin">
WSGIApplicationGroup %{GLOBAL}
Options +Indexes FollowSymLinks
AllowOverride None
Allow from all
Order allow,deny
</Directory>
<Location "/trac">
AuthBasicProvider ldap
AuthType Basic
AuthzLDAPAuthoritative off …Run Code Online (Sandbox Code Playgroud) 当我在 mod_wsgi 文件夹中“制作”时,我收到此错误
我使用以下配置
./configure --with-apxs=/usr/local/apache/bin/apxs --with-python=/opt/python27/bin/python
Run Code Online (Sandbox Code Playgroud)
/usr/bin/ld: /opt/python27/lib/libpython2.7.a(node.o): relocation R_X86_64_32针对`a local symbol'不能在创建共享对象时使用;使用 -fPIC /opt/python27/lib/libpython2.7.a 重新编译:无法读取符号:错误值 collect2:ld 返回 1 退出状态 apxs:错误:命令失败,rc=65536
此链接有解决方案,但我无法完全理解
1)How can i found that i have compiled x32bit or x64 bit version of python
2)I didn't understand about what symbolic link he was talking about
Run Code Online (Sandbox Code Playgroud) 我正在运行 Ubuntu 10.04.1 LTS,它预装了 python2.6,但我需要用 python2.7.2 替换它。
(原因很简单,2.7 有很多从 3 向后移植的特性)
我已经安装了 python2.7.2 使用
./configure
make
make altinstall
Run Code Online (Sandbox Code Playgroud)
altinstall 选项将它安装到 /usr/local/lib/python2.7 并将解释器放置在 /usr/local/bin/python2.7 中,而不涉及系统默认版本
然后为了帮助 mod_wsgi 找到 python2.7,我将以下内容添加到 /etc/apache2/sites-available/wsgisite
WSGIPythonHome /usr/local
Run Code Online (Sandbox Code Playgroud)
我启动了 apache 并运行了一个测试 wsgi 应用程序,但是迎接我的是python 2.6.5 而不是 Python2.7
后来我替换了默认的 python simlink 指向 python 2.7
ln -f /usr/local/bin/python2.7 /usr/bin/python
Run Code Online (Sandbox Code Playgroud)
现在在控制台上输入 'python' 会打开 python2.7 但不知何故 mod_wsgi 仍然会选择 python2.6
接下来我尝试,
PATH=/usr/local/bin:$PATH
export PATH
Run Code Online (Sandbox Code Playgroud)
然后快速重启apache,但又是python2.6!
这是我的 $PATH
/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Run Code Online (Sandbox Code Playgroud)
/etc/apache2/sites-available/wsgisite 的内容
WSGIPythonHome /usr/local
<VirtualHost *:80>
ServerName wsgitest.local
DocumentRoot /home/wwwhost/pydocs/wsgi
<Directory /home/wwwhost/pydocs/wsgi>
Order …Run Code Online (Sandbox Code Playgroud) Python 作为一种 Web 脚本语言让我很感兴趣,所以我想在我的测试服务器上设置它。
无法让 Apache 重新启动mod_wsgi。在 win7 64 位上运行 xampp v win32-1.8 w/apache v2.4,python v2.7 32bit。我看到的 Python 注册表文件位于hkey_classes_root. 我不确定这是否正确,但hkey_current_user. 中的一个hkey_local_machine表示未设置默认值。
这是我跑步时得到的 apache_start.bat
Apache 2 正在启动...
httpd.exe:C:/xampp/apache/conf/httpd.conf 第 141 行的语法错误:无法将 C:/xampp/apache/modules/mod_wsgi.so 加载到服务器:指定的程序找不到。
我添加到 httpd.conf 的内容:
LoadModule wsgi_module modules/mod_wsgi.so
WSGIScriptAlias /wsgi_handler "C:/xampp/wsgi/mywsgi.py"
<Directory "C:/xampp/wsgi">
Order allow,deny
Allow from all
</Directory>
Run Code Online (Sandbox Code Playgroud) 我有一个 Python Elastic Beanstalk 负载平衡应用程序。以下是用户请求进入 Elastic Beanstalk 应用程序的路径:
user -> Elastic Beanstalk ELB -> Elastic Beanstalk mod_wsgi
问题:
来自新应用程序版本user之后的前 ~2-4 个请求将从eb deployELB 生成 504 错误。
在这些 ~2-4 个生成 504 的请求之后,一切都很好!200 左右。
当 504 发生时,零请求会Elastic Beanstalk mod_wsgi根据/var/httpd/access_log. 在 ELB 决定重新开始工作后,我才看到 200 年代。
我尝试过但不起作用的事情:
Elastic Beanstalk ELB空闲超时增加到 300 秒Elastic Beanstalk mod_wsgiapacheKeepAliveTimeout增加到 300 秒:http : //docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/ts-elb-error-message.html有人可能会说,“就和 504 一起生活吧!”
但是,实际问题是,在我的生产设置中,我CloudFlare在user和之间Elastic Beanstalk ELB …
mod-wsgi amazon-web-services amazon-elb elastic-beanstalk apache-2.4
mod-wsgi ×10
python ×5
apache-2.2 ×3
apache2 ×2
amazon-elb ×1
apache-2.4 ×1
centos ×1
django ×1
ldap ×1
proxy ×1
xampp ×1