![Apache 虚拟主机显示“页面索引”而不是网站](https://linux22.com/image/1482797/Apache%20%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BA%E6%98%BE%E7%A4%BA%E2%80%9C%E9%A1%B5%E9%9D%A2%E7%B4%A2%E5%BC%95%E2%80%9D%E8%80%8C%E4%B8%8D%E6%98%AF%E7%BD%91%E7%AB%99.png)
在浏览器中输入域名会显示“/ 的索引”页面,而不是我的网站内容。我在 ec2 上使用 django、mod-wsgi 和 apache。
我的 Apache conf 文件如下所示:
<VirtualHost 52.79.**.**:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/qna
Alias /m/ /var/www/qna/static/
Alias /upfiles/ /var/www/qna/askbot/upfiles/
<DirectoryMatch “/var/www/qna/askbot/skins/([^/]+)/media”>
Require all granted
</DirectoryMatch>
<Directory “/var/www/qna/askbot/upfiles”>
Require all granted
</Directory>
WSGIDaemonProcess qna
WSGIProcessGroup qna
WSGIScriptAlias / /var/www/qna/django.wsgi
<LocationMatch “(?!/m)/admin(?!/media)”>
RewriteEngine on
RewriteRule /admin(.*)$ https://mywebsite.com/admin$1 [L,R=301]
</LocationMatch>
CustomLog /var/log/apache2/t_access_log common
ErrorLog /var/log/apache2/qna_error_log
LogLevel debug
</VirtualHost>
<VirtualHost 52.79.**.**:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/qna
<LocationMatch "^(?!/admin)">
RewriteEngine on
RewriteRule django.wsgi(.*)$ http://mywebsite.com$1 [L,R=301]
</LocationMatch>
SSLEngine on
SSLCertificateFile /etc/ssl/private/qna.crt
SSLCertificateKeyFile /etc/ssl/private/qna.key
Alias /admin/media/ /usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/media/
Alias /m/ /var/www/qna/static/
WSGIScriptAlias / /var/www/qna/django.wsgi
CustomLog /var/log/apache2/qna_access_log common
ErrorLog /var/log/apache2/qna_error_log
</VirtualHost>
我是新手,我认为 Apache 设置存在根本性错误。我花了四天时间解决这个问题,尝试了各种方法,但什么也没解决。
我认为 WSGI 设置有问题,因为 apache 不理解 django。settings.py 文件位于 /var/www/qna 中。
Django 1.8.8 和 Python 2.7.6,在 Amazon ec2 Ubuntu 上。提前谢谢您。请帮忙。
我尝试更改并添加 ServerName mysite.com 以及 ServerAlias,但在这种情况下我收到 500 内部服务器错误。
VirtualHost configuration:
*:80 mysite.com (/etc/apache2/sites-enabled/qna.conf:1)
*:443 mysite.com (/etc/apache2/sites-enabled/qna.conf:31)
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex rewrite-map: using_defaults
Mutex ssl-stapling: using_defaults
Mutex ssl-cache: using_defaults
Mutex default: dir="/var/lock/apache2" mechanism=fcntl
Mutex watchdog-callback: using_defaults
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33 not_used
Group: name="www-data" id=33 not_used
但是我运行的时候python maange.py runserver 0.0.0.0:80
一切正常,输入域名就可以访问网站。
答案1
这是您的配置;为了便于阅读,我重新格式化了我的配置:
<VirtualHost 52.79.**.**:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/qna
Alias /m/ /var/www/qna/static/
Alias /upfiles/ /var/www/qna/askbot/upfiles/
<DirectoryMatch “/var/www/qna/askbot/skins/([^/]+)/media”>
Require all granted
</DirectoryMatch>
<Directory “/var/www/qna/askbot/upfiles”>
Require all granted
</Directory>
WSGIDaemonProcess qna
WSGIProcessGroup qna
WSGIScriptAlias / /var/www/qna/django.wsgi
<LocationMatch “(?!/m)/admin(?!/media)”>
RewriteEngine on
RewriteRule /admin(.*)$ https://mywebsite.com/admin$1 [L,R=301]
</LocationMatch>
CustomLog /var/log/apache2/t_access_log common
ErrorLog /var/log/apache2/qna_error_log
LogLevel debug
</VirtualHost>
<VirtualHost 52.79.**.**:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/qna
<LocationMatch "^(?!/admin)">
RewriteEngine on
RewriteRule django.wsgi(.*)$ http://mywebsite.com$1 [L,R=301]
</LocationMatch>
SSLEngine on
SSLCertificateFile /etc/ssl/private/qna.crt
SSLCertificateKeyFile /etc/ssl/private/qna.key
Alias /admin/media/ /usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/media/
Alias /m/ /var/www/qna/static/
WSGIScriptAlias / /var/www/qna/django.wsgi
CustomLog /var/log/apache2/qna_access_log common
ErrorLog /var/log/apache2/qna_error_log
</VirtualHost>
我假设,如果您已经设置了虚拟主机,如果您尝试通过 IP 地址访问网站,52.79.**.**:80
一切都会顺利,但如果您通过主机名/域名访问,example.com
那么就会出现问题,对吗?如果是这种情况,您需要做的是设置虚拟主机行,如下所示:
<VirtualHost *:80>
对于 HTTPS,这是:
<VirtualHost *:443>
然后之内那些配置块你将设置ServerName
这样的值;当然这不是完整的配置,而只是你应该更改的一个示例:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/qna
ServerName www.example.com
ServerAlias www example.* www.example.*
执行此类操作将允许虚拟主机配置与www.example.com
连接到该配置的实际服务器名称一起正常工作,然后ServerAlias
允许该配置捕获其他变体,www.example.com
例如example.com
或www.example.net
。
答案2
找到解决方案得益于Giacomo1968 的回答。非常感谢,你拯救了我!
这很简单,是权限问题。
按照建议,我检查了一下/var/log/apache2/qna_error_log
,上面说IOError: [Errno 13] Permission denied: '/var/www/qna/log/askbot.log'
/var/www/qna/log
因此我通过使用更改了权限sudo chmod -R 777 /var/www/
(我不认为设置 777 是一个好的解决方案但我就是这么做的)。
现在我收到以下错误:
ExtractionError: Can't extract file(s) to egg cache
The following error occurred while trying to extract file(s) to the Python egg
cache:
[Errno 13] Permission denied: '/var/www/.python-eggs'
The Python egg cache directory is currently set to:
/var/www/.python-eggs`
正如建议的那样这里,我新建了一个目录/usr/local/pylons
,并进行django.wsgi
如下/var/www/qna
编辑:
import os
os.environ['PYTHON_EGG_CACHE'] = '/usr/local/pylons/python-eggs'
问题已经修复!现在我看到的是我的网站,而不是“索引”页面。