我在 Ubuntu 14 上运行 apache2 服务器。现在我想配置 Apache 与 mod_wsgi 一起工作以在域的子目录(例如 www.abc.com/lab)上运行 Django,但我总是无法做到这一点。
顺便说一下,我已经成功安装了 Python。我可以执行python --version
which returns Python 2.7.3
。以下是我的设置步骤:
我在 /var/www 下创建了一个 pylab 文件夹,里面有这些文件在里面.py,在里面.pyc、manage.py、settings.py、settings.pyc,最后是 urls.py
然后我去
/etc/apache2/sites-available
创建一个包含以下内容的实验室文件:<VirtualHost *:80> ServerName /lab DocumentRoot /var/www/pylab <Directory /lab> Options All AllowOverride All Require all granted </Directory> Alias /static/ /var/www/pylab/static/ <Location "/static/"> Options -Indexes </Location> Alias /media/ /var/www/pylab/media/ <Location "/media/"> Options -Indexes </Location> WSGIScriptAlias / /var/www/pylab/wsgi.py WSGIDaemonProcess labapi python-path=/var/www/pylabprocesses=2 threads=15 display-name=Pylab WSGIProcessGroup pylab </VirtualHost>
但当我访问 www.abc.com/lab 时,只看到 404 错误。我做错了什么?
答案1
托管 Python 时,最好将 Python 源文件保留在外部DocumentRoot
。Apache 有一个 mod_wsgi 模块,使用某个版本的 Python 编译而成。您可以在/var/log/apache2/error.log
(注意:您可能需要使用 sudo 来读取此文件) 中找到此 Python 版本。
... mod_wsgi/4.7.1 Python/3.8 ...
安装 Python
您必须在项目中使用相同版本的 Python。如果您想使用不同版本的 Python,则必须从源代码编译 Python 和 mod_wsgi。安装以下软件包:
sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget
下载并编译 python,至少启用优化和共享标志。如果不添加,--prefix
则添加make altinstall
而不是make install
,否则可能会覆盖系统 python,这可能是致命的。
./configure --enable-optimizations --enable-shared --prefix=/opt/Python-3.8.2
make -j4
sudo make install
在j4
make中,它将使用4个并行进程进行编译。
安装 WSGI
此外,你应该从源代码下载并编译mod_wsgi。安装apache(-dev):
sudo apt install apache2 apache2-dev
并使用这些标志编译 mod_wsgi。
export LD_LIBRARY_PATH=/opt/Python-3.8.2/lib:$LD_LIBRARY_PATH
./configure --with-python=/opt/Python-3.8.2/bin/python3
make -j4
sudo make install
打开
sudo vim /etc/apache2/mods-available/wsgi.load
并添加
SetEnv LD_LIBRARY_PATH /opt/Python-3.8.2/lib
SetEnv LD_RUN_PATH /opt/Python-3.8.2/lib
前
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so
配置 Apache
sudo a2enmod wsgi
sudo apachectl graceful
现在让我们配置 apache
sudo vim /etc/apache2/sites-available/000-default.conf
在 VirtualHost 部分中写入
WSGIDaemonProcess sitename python-home=/path/to/project/venv python-path=/folder/containing/manage.py
WSGIProcessGroup sitename
#Static content
Alias /static /path/to/project/static
<Directory /path/to/project/static>
AllowOverride None
require all granted
</Directory>
#WSGI
WSGIScriptAlias / /path/to/wsgi.py. # the path is inclusive of wsgi.py
<Directory /path/contaning/wsgi.py>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
最后启用网站并正常重启 apache
sudo a2ensite 000-default
sudo apachectl graceful
从任何浏览器访问localhost
它都应该可以正常工作。
如果要将其托管在子文件夹“lab”中,请WSGIScriptAlias
在 apache-conf 文件中替换为
SetEnv SCRIPT_NAME lab
WSGIScriptAlias /lab /path/to/wsgi.py. # the path is inclusive of wsgi.py
并再次正常地重新启动 apache。
参考: