Python Apache for Django 1.10上的共享主机设置
我们正在寻找一种干净、独立的方式,在一个Apache上托管几个Django站点,在Ubuntu 14.04上安装vhosts 遵循文档 并且,我们设置了以下设置: 拥有mod_wsgi的全球虚拟视频Python Apache for Django 1.10上的共享主机设置,python,django,apache,mod-wsgi,shared-hosting,Python,Django,Apache,Mod Wsgi,Shared Hosting,我们正在寻找一种干净、独立的方式,在一个Apache上托管几个Django站点,在Ubuntu 14.04上安装vhosts 遵循文档 并且,我们设置了以下设置: 拥有mod_wsgi的全球虚拟视频 virtualenv -p /usr/bin/python3 /home/admin/vhosts_venv . vhosts_venv/bin/activate pip install mod-wsgi sudo /home/admin/vhosts_venv/bin/mod_wsgi-expr
virtualenv -p /usr/bin/python3 /home/admin/vhosts_venv
. vhosts_venv/bin/activate
pip install mod-wsgi
sudo /home/admin/vhosts_venv/bin/mod_wsgi-express install-module
sudo vi /etc/apache2/mods-available/wsgi_express.load
增加:
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi-py34.cpython-34m.so
然后有一个vhost venv和一个基本应用程序:
virtualenv -p /usr/bin/python3 /home/admin/vhost1_venv
. vhost1_venv/bin/activate
pip install Django
pip install PyMySQL
django-admin startproject vhost1
cd vhost1
python manage.py startapp main
使用以下设置主机分辨率:
sudo vi /etc/hosts
更新:
127.0.0.1 localhost vhost1.example.com
使用以下内容设置Apache vhost:
<VirtualHost vhost1.example.com:80>
ServerName vhost1.example.com
ServerAlias example.com
ServerAdmin webmaster@localhost
#DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/vhost1_error.log
CustomLog ${APACHE_LOG_DIR}/vhost1_access.log combined
WSGIProcessGroup vhost1.example.com
WSGIScriptAlias / /home/admin/vhost1/vhost1/wsgi.py process-group=vhost1.example.com
WSGIDaemonProcess vhost1.example.com user=www-data group=www-data threads=25 python-path=/home/admin/vhost1:/home/admin/vhost1_venv/lib/python3.4/site-packages:/home/admin/vhosts_venv/lib/python3.4/site-packages
<Directory /home/admin/vhost1>
<Files wsgi.py>
<IfVersion < 2.3>
Order deny,allow
Allow from all
</IfVersion>
<IfVersion >= 2.3>
Require all granted
</IfVersion>
</Files>
</Directory>
</VirtualHost>
在测试时,我们为一个卷曲请求得到两个答案,分两个时间提交(有时两个时间间隔为0.5秒):
成功了!祝贺您的第一个Django动力页面
当然,你实际上还没有做任何工作。下一步,开始你的工作
运行python manage.py startapp[app_label]的第一个应用程序
您之所以看到此消息,是因为您的
Django设置文件,但您尚未配置任何URL。开始工作吧
紧接着是:
内部服务器错误
服务器遇到内部错误或配置错误,无法正常运行
无法完成您的请求
请通过以下地址与服务器管理员联系:webmaster@localhost到
通知他们此错误发生的时间以及您采取的措施
在此错误之前执行
有关此错误的详细信息,请参阅服务器错误
日志vhost1.example.com端口80上的Apache/2.4.7(Ubuntu)服务器
在/var/log/apache2/error.log
中,我们得到:
[2016年8月15日星期一15:37:42.754139][core:notice][pid 18622:tid
140151787534208]AH00051:子pid 18717出口信号分段
故障(11),在/etc/apache2中可能存在堆芯转储
在/var/log/apache2/vhost1_access.log
中:
127.0.0.1--[15/Aug/2016:15:37:42+0200]“GET/HTTP/1.1”500 2593“-”curl/7.35.0”
如何正确设置它?总结格雷厄姆·邓普尔顿的答案
- mod_wsgi 4.5.4被Python3破坏。4.5.5修复了它
- 可以为虚拟主机设置Python虚拟主机(使用包
),但建议使用mod_wsgi
选项而不是Python home
设置Python虚拟主机Python path
- 建议根据设置
WSGIRestrictEmbedded On
/etc/apache2/mods available/wsgi_express.conf
如下所示:
WSGIRestrictEmbedded On
<VirtualHost vhost1.example.com:80>
ServerName vhost1.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/vhost1_error.log
CustomLog ${APACHE_LOG_DIR}/vhost1_access.log combined
WSGIDaemonProcess vhost1.example.com threads=15 python-home=/home/admin/vhost1_venv python-path=/home/admin/vhost1
WSGIScriptAlias / /home/admin/vhost1/vhost1/wsgi.py process-group=vhost1.example.com application-group=%{GLOBAL}
<Directory /home/admin/vhost1>
<Files wsgi.py>
<IfVersion < 2.3>
Order deny,allow
Allow from all
</IfVersion>
<IfVersion >= 2.3>
Require all granted
</IfVersion>
</Files>
</Directory>
</VirtualHost>
/etc/apache2/sites available/vhost1.conf
看起来像:
WSGIRestrictEmbedded On
<VirtualHost vhost1.example.com:80>
ServerName vhost1.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/vhost1_error.log
CustomLog ${APACHE_LOG_DIR}/vhost1_access.log combined
WSGIDaemonProcess vhost1.example.com threads=15 python-home=/home/admin/vhost1_venv python-path=/home/admin/vhost1
WSGIScriptAlias / /home/admin/vhost1/vhost1/wsgi.py process-group=vhost1.example.com application-group=%{GLOBAL}
<Directory /home/admin/vhost1>
<Files wsgi.py>
<IfVersion < 2.3>
Order deny,allow
Allow from all
</IfVersion>
<IfVersion >= 2.3>
Require all granted
</IfVersion>
</Files>
</Directory>
</VirtualHost>
ServerName vhost1.example.com
服务器管理员webmaster@localhost
DocumentRoot/var/www/html
ErrorLog${APACHE_LOG_DIR}/vhost1_error.LOG
CustomLog${APACHE_LOG_DIR}/vhost1_access.LOG组合
WSGIDaemonProcess vhost1.example.com threads=15 python home=/home/admin/vhost1_venv python path=/home/admin/vhost1
WSGIScriptAlias//home/admin/vhost1/vhost1/wsgi.py进程组=vhost1.example.com应用程序组=%%{GLOBAL}
命令拒绝,允许
通融
= 2.3>
要求所有授权
总结格雷厄姆·邓普尔顿的答案
- mod_wsgi 4.5.4被Python3破坏。4.5.5修复了它
- 可以为虚拟主机设置Python虚拟主机(使用包
),但建议使用mod_wsgi
选项而不是Python home
设置Python虚拟主机Python path
- 建议根据设置
WSGIRestrictEmbedded On
/etc/apache2/mods available/wsgi_express.conf
如下所示:
WSGIRestrictEmbedded On
<VirtualHost vhost1.example.com:80>
ServerName vhost1.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/vhost1_error.log
CustomLog ${APACHE_LOG_DIR}/vhost1_access.log combined
WSGIDaemonProcess vhost1.example.com threads=15 python-home=/home/admin/vhost1_venv python-path=/home/admin/vhost1
WSGIScriptAlias / /home/admin/vhost1/vhost1/wsgi.py process-group=vhost1.example.com application-group=%{GLOBAL}
<Directory /home/admin/vhost1>
<Files wsgi.py>
<IfVersion < 2.3>
Order deny,allow
Allow from all
</IfVersion>
<IfVersion >= 2.3>
Require all granted
</IfVersion>
</Files>
</Directory>
</VirtualHost>
/etc/apache2/sites available/vhost1.conf
看起来像:
WSGIRestrictEmbedded On
<VirtualHost vhost1.example.com:80>
ServerName vhost1.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/vhost1_error.log
CustomLog ${APACHE_LOG_DIR}/vhost1_access.log combined
WSGIDaemonProcess vhost1.example.com threads=15 python-home=/home/admin/vhost1_venv python-path=/home/admin/vhost1
WSGIScriptAlias / /home/admin/vhost1/vhost1/wsgi.py process-group=vhost1.example.com application-group=%{GLOBAL}
<Directory /home/admin/vhost1>
<Files wsgi.py>
<IfVersion < 2.3>
Order deny,allow
Allow from all
</IfVersion>
<IfVersion >= 2.3>
Require all granted
</IfVersion>
</Files>
</Directory>
</VirtualHost>
ServerName vhost1.example.com
服务器管理员webmaster@localhost
DocumentRoot/var/www/html
ErrorLog${APACHE_LOG_DIR}/vhost1_error.LOG
CustomLog${APACHE_LOG_DIR}/vhost1_access.LOG组合
WSGIDaemonProcess vhost1.example.com threads=15 python home=/home/admin/vhost1_venv python path=/home/admin/vhost1
WSGIScriptAlias//home/admin/vhost1/vhost1/wsgi.py进程组=vhost1.example.com应用程序组=%%{GLOBAL}
命令拒绝,允许
通融
= 2.3>
要求所有授权
如果您使用的是mod_wsgi 4.5.4,请将其卸下并安装4.5.3。在4.5.4中引入了一个影响Python 3的问题,如果应用程序使用print
或Python日志模块向stdout/stderr发送任何内容,就会导致进程崩溃。今天将有一个4.5.5版本,在找到解决方案时回滚更改。崩溃的另一个原因是C扩展无法在子解释器中工作。将应用程序组=%{GLOBAL}
选项与WSGIScriptAlias
一起使用。您也不需要WSGIProcessGroup
指令,因为您正在使用processgroup
选项来WSGIScriptAlias
。跟踪Python虚拟环境站点包
目录也是可疑的。应该只引用一个,最好使用python home
选项来表示虚拟环境的顶部,而不要使用python path
到其中的site packages
目录。将WSGIDaemonProcess
指令移动到WSGIScriptAlias
指令之前。对于您的虚拟环境,您所描述的内容毫无意义。只要每个站点的虚拟环境是根据构建mod_wsgi的相同Python安装创建的,就足够了。您不需要同时参考Python安装mod_wsgi是根据它构建的。如果需要更多说明,建议您使用mod_wsgi邮件列表。如果始终委托给守护进程进程模式,请阅读并确保您正在关闭嵌入式模式。如果您使用mod_wsgi 4.5.4,请将其删除并安装4.5.3。在4.5.4中引入了一个影响Python 3的问题,如果应用程序使用print
或Python日志模块向stdout/stderr发送任何内容,就会导致进程崩溃。将有一个4.5.5版本的t