Apache 虚拟主机显示“页面索引”而不是网站

Apache 虚拟主机显示“页面索引”而不是网站

在浏览器中输入域名会显示“/ 的索引”页面,而不是我的网站内容。我在 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.comwww.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'

问题已经修复!现在我看到的是我的网站,而不是“索引”页面。

相关内容