Виртуальный хост Apache показывает страницу «index of» вместо веб-сайта

3993
SJ H

При вводе имени домена в браузере отображается страница «index of /» вместо содержимого моего веб-сайта. Я использую django, mod-wsgi и apache на ec2.

Мой файл 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 Internal Server Error.

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
Вы говорите, что используете «доменное имя» в браузере, но все ваши настройки имеют IP-адрес, например: «52.79. **. **: 80». Это может быть случай, когда должно быть установлено ServerName. JakeGould 8 лет назад 0
@Paul У меня нет index.html. SJ H 8 лет назад 0
@JakeGould Спасибо. Я попытался установить ServerName для моего доменного имени, но все равно не работает. SJ H 8 лет назад 0
@SJH Пожалуйста [посмотрите на мой полный ответ] (http://superuser.com/a/1035431/167207), чтобы понять, как, по моему мнению, должна быть установлена ​​конфигурация виртуального хоста. Вы должны установить значение подстановочного знака для виртуального хоста следующим образом:`и затем установите` ServerName` в конфигурации. Затем перезапустите Apache и проверьте его. Кроме того, проверьте вывод `apachectl -S`, чтобы убедиться, что конфиги правильно распознаются Apache. Может быть полезным, если к вашему ответу можно добавить вывод `apachectl -S`. JakeGould 8 лет назад 0
Не обращая внимания на мой комментарий о `DirectoryIndex`, я вижу в переформатированной конфигурации Джейка, что есть псевдоним для /. Paul 8 лет назад 0
@SJH «Теперь я получаю 500 внутренних ошибок сервера». Это означает, что вы ближе. Проверьте журналы на наличие ошибок в `/ var / log / apache2 / qna_error_log`. Это скажет вам, что должно быть причиной 500 ошибок. JakeGould 8 лет назад 0

3 ответа на вопрос

0
JakeGould

Here are your configs; reformatted my me for readability:

<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> 

I am assuming if you have a virtual host setup in place, if you attempt to access the website via the IP address of 52.79.**.**:80 everything is fine, but if you are accessing it via a hostname/domain name like example.com then it is choking, correct? If that is the case what you need to do is set the virtual host lines like this:

<VirtualHost *:80> 

And this for HTTPS:

<VirtualHost *:443> 

Then within those config blocks you would set a ServerName value like this; of course this is not a full config but just a example of what you should change:

<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/qna ServerName www.example.com ServerAlias www example.* www.example.* 

Doing something like this would allow the virtual host config to work correctly with www.example.com being the actual server name connected to that config and then ServerAlias allows the config to capture other variants of www.example.com such as example.com or www.example.net.

0
jc_ryan

You need to add a DirectoryIndex to your node.

See https://httpd.apache.org/docs/2.4/mod/mod_dir.html#directoryindex

ninja edit: I didnt see the numerous comments already detailing this

Нет необходимости указывать индекс каталога в конфигурации виртуального хоста; это уже обрабатывается в основном конфиге Apache. JakeGould 8 лет назад 0
0
SJ H

The found the solution thanks to JakeGould. Thank you so much, you saved my day! It was rather simple, it was the permission issue.

As suggested, I checked /var/log/apache2/qna_error_log, and it said IOError: [Errno 13] Permission denied: '/var/www/qna/log/askbot.log'

So I changed permission of /var/www/qna/log by using sudo chmod -R 777 /var/www/ (I don't believe setting 777 is a good solution but I just did).

Now I got the following error:

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` 

As suggested in here, I made a new directory /usr/local/pylons and edited django.wsgi in /var/www/qna as below:

import os os.environ['PYTHON_EGG_CACHE'] = '/usr/local/pylons/python-eggs' 

And it's fixed! Now I see my website, not the "index of" page.

В общем, этот сайт не является доской объявлений или чатом. Если мой или какой-либо другой ответ помог вам, вам необходимо искоренить его, и если это был ответ, который разрешил предоставленное решение вашей проблемы, необходимо проверить его как таковой. Это правда, что вторая половина вашего ответа дает больше понимания того, что вы сделали, чтобы в конечном итоге решить этот вопрос, поэтому этот ответ должен стоять, но любой, кто помог вам - не только я - всегда должен быть вознагражден за помощь в прояснении вещей голосование и проверка ответов. JakeGould 8 лет назад 0
@JakeGould Спасибо за ваши комментарии. Я новичок в этом сайте, поэтому я не знаком с правилами. Я уже пытался поднять ваш ответ и другие (что я действительно ценю), но мой недостаток очков репутации, я не мог поднять ваш ответ. В любом случае, еще раз большое спасибо за вашу помощь, и это было абсолютно полезно. SJ H 8 лет назад 0