WSGIDaemonProcess 的 django apache 配置不起作用
django apache configuration with WSGIDaemonProcess not working
更新问题
[Mon Jul 18 09:20:10.517873 2016] [:error] [pid 30316:tid 139756302964480] [remote 122.164.94.99:48261] Traceback (most recent call last):
[Mon Jul 18 09:20:10.518005 2016] [:error] [pid 30316:tid 139756302964480] [remote 122.164.94.99:48261] File "/var/www/rent/Rent/wsgi.py", line 20, in <module>
[Mon Jul 18 09:20:10.518141 2016] [:error] [pid 30316:tid 139756302964480] [remote 122.164.94.99:48261] from django.core.wsgi import get_wsgi_application
[Mon Jul 18 09:20:10.518236 2016] [:error] [pid 30316:tid 139756302964480] [remote 122.164.94.99:48261] ImportError: No module named django.core.wsgi
我的虚拟主机
<VirtualHost *:80>
ServerName ip_address
ServerAdmin webmaster@localhost
Alias /static/ /var/www/rent/static/
Alias /media/ /var/www/rent/media/
WSGIScriptAlias / /var/www/rent/Rent/wsgi.py
WSGIDaemonProcess Rent python-path=/var/www/rent:/root/.virtualenvs/rent/lib/python2.7/site-packages
WSGIProcessGroup Rent
<Directory /var/www/rent/static>
Options -Indexes
Order deny,allow
Allow from all
</Directory>
<Directory /var/www/rent/media>
Options -Indexes
Order deny,allow
Allow from all
</Directory>
LogLevel warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
WSGIDaemonProcess Rent python-path=/var/www/rent:/root/.virtualenvs/rent/lib/python2.7/site-packages
这是问题最可能的原因。您已经在超级用户的主文件夹中创建了一个 virtualenv。但是 apache 不太可能访问该文件夹。默认情况下,任何其他用户都无法访问用户的主文件夹。
Web 服务器和 WSGI 进程将 运行 作为非特权用户,通常命名为 nobody
、httpd
、apache
或类似名称。虽然您可以通过更改 /root/ 上的权限来解决此问题,但这是一个很大的禁忌。如果是普通用户,危险性会小一些,但仍然不是一个好主意。
最好的解决方案是将 virtualenv 放在非特权用户可以访问的位置。 /usr/local/virtualenv
位置不错。
请注意,将 /root/.virtualenvs/
移动到 /usr/local/virtualenv
后,您必须按以下方式重新创建它
source /root/.virtualenvs/rent/bin/activate
pip freeze > /tmp/requirements.txt
cd /usr/local/
virtualenv virtualenv
source virtualenv/bin/activate
pip install -r /tmp/requirements.txt
然后编辑 httpd.conf
文件以反映新路径。
更新问题
[Mon Jul 18 09:20:10.517873 2016] [:error] [pid 30316:tid 139756302964480] [remote 122.164.94.99:48261] Traceback (most recent call last):
[Mon Jul 18 09:20:10.518005 2016] [:error] [pid 30316:tid 139756302964480] [remote 122.164.94.99:48261] File "/var/www/rent/Rent/wsgi.py", line 20, in <module>
[Mon Jul 18 09:20:10.518141 2016] [:error] [pid 30316:tid 139756302964480] [remote 122.164.94.99:48261] from django.core.wsgi import get_wsgi_application
[Mon Jul 18 09:20:10.518236 2016] [:error] [pid 30316:tid 139756302964480] [remote 122.164.94.99:48261] ImportError: No module named django.core.wsgi
我的虚拟主机
<VirtualHost *:80>
ServerName ip_address
ServerAdmin webmaster@localhost
Alias /static/ /var/www/rent/static/
Alias /media/ /var/www/rent/media/
WSGIScriptAlias / /var/www/rent/Rent/wsgi.py
WSGIDaemonProcess Rent python-path=/var/www/rent:/root/.virtualenvs/rent/lib/python2.7/site-packages
WSGIProcessGroup Rent
<Directory /var/www/rent/static>
Options -Indexes
Order deny,allow
Allow from all
</Directory>
<Directory /var/www/rent/media>
Options -Indexes
Order deny,allow
Allow from all
</Directory>
LogLevel warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
WSGIDaemonProcess Rent python-path=/var/www/rent:/root/.virtualenvs/rent/lib/python2.7/site-packages
这是问题最可能的原因。您已经在超级用户的主文件夹中创建了一个 virtualenv。但是 apache 不太可能访问该文件夹。默认情况下,任何其他用户都无法访问用户的主文件夹。
Web 服务器和 WSGI 进程将 运行 作为非特权用户,通常命名为 nobody
、httpd
、apache
或类似名称。虽然您可以通过更改 /root/ 上的权限来解决此问题,但这是一个很大的禁忌。如果是普通用户,危险性会小一些,但仍然不是一个好主意。
最好的解决方案是将 virtualenv 放在非特权用户可以访问的位置。 /usr/local/virtualenv
位置不错。
请注意,将 /root/.virtualenvs/
移动到 /usr/local/virtualenv
后,您必须按以下方式重新创建它
source /root/.virtualenvs/rent/bin/activate
pip freeze > /tmp/requirements.txt
cd /usr/local/
virtualenv virtualenv
source virtualenv/bin/activate
pip install -r /tmp/requirements.txt
然后编辑 httpd.conf
文件以反映新路径。