Apache выдает ОШИБКУ 500: Внутренняя ошибка сервера при GET из локального хоста / внутренней сети - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть рабочий сервер с apache и django, установленными с использованием mod_wsgi .

Приложение django имеет REST API, который предоставляет некоторую информацию при отправке запроса GET.

Это всегда хорошо работало на разрабатываемом сервере, где мы запускали django, используя manage.py на экране. Теперь мы создали рабочий сервер с apache, работающим django, но этот API возвращает Ошибка 500 при запуске wget из localhost или другие машины в той же сети (используя 192.168.XX IP).

Вот вывод от wget:

~$ wget localhost:80/someinfo
--2020-04-02 16:26:59--  http://localhost/someinfo
Resolving localhost (localhost)... 127.0.0.1
Connecting to localhost (localhost)|127.0.0.1|:80... connected.
HTTP request sent, awaiting response... 500 Internal Server Error
2020-04-02 16:26:59 ERROR 500: Internal Server Error.

Кажется, что соединение успешно, поэтому я думаю, что это не apache проблема. Ошибка возникает из ответа API.

Ошибка в apache error.log выглядит следующим образом:

127.0.0.1 - - [02/Apr/2020:14:24:36 +0000] "GET /someinfo HTTP/1.1" 500 799 "-" "Wget/1.19.4 (linux-gnu)"

вопрос: что такое число после 500? Иногда 799, а иногда 803.

Но если запрос выполняется с использованием publi c IP-адреса сервера извне (т.е. из браузера), API работает нормально, и я вижу правильная информация.

Я уже проверил разрешенные хосты django, и он принимал localhost, а также IP-адрес 192.168.XX другой машины. В конце я оставил django settings.py примерно так:

#ALLOWED_HOSTS = ['localhost', '127.0.0.1', '192.168.1.101']
ALLOWED_HOSTS = ['*']

Примечание: 192.168.1.101 - это машина, которая пытается выполнить запрос GET. Конечная цель всего этого - создать GET-запрос для скрипта python, запущенного на этом компьютере (который уже работает, если django запускается через manage.py).

My apache .conf :


    <VirtualHost *:80>

            ServerAdmin webmaster@localhost
            #DocumentRoot /var/www/html

            Alias /static /home/myuser/myproject/django/static_root
        <Directory /home/myuser/myproject/django/static_root>
            Require all granted
        </Directory>

        <Directory /home/myuser/myproject/django/myproject_django>
            <Files wsgi.py>
                Require all granted
            </Files>
        </Directory>

        WSGIDaemonProcess myproject python-home=/home/myuser/env python-path=/home/myuser/myproject/django
        WSGIProcessGroup myproject
        WSGIScriptAlias / /home/myuser/myproject/django/myproject_django/wsgi.py
    </VirtualHost>

Я попытался запустить django через manage.py, и wget от localhost работает просто отлично. Проблема появляется только тогда, когда django запускается apache.

Я также попробовал решение, приведенное в в этом посте , но изменил строку не исправляет ошибку.

У меня есть некоторые сомнения относительно этой ошибки:

  1. как apache запускает django?
  2. перезапускает Служба apache2 также перезапускает django? (таким образом, читая снова файл settings.py)
  3. Есть ли какой-либо другой django файл настроек, а не тот, который я редактирую?
  4. как я могу увидеть django журналы? У меня сейчас нет консоли, поэтому я не вижу распечатки в реальном времени.

Я очень ценю любую помощь.

1 Ответ

0 голосов
/ 03 апреля 2020

Мне наконец-то удалось решить это самостоятельно.

Оказывается, wsgi обрабатывает запросы от локального хоста или внешних IP-адресов как разные группы экземпляров. Так что все, что мне нужно было сделать, это положить

WSGIApplicationGroup %{GLOBAL}

в

/etc/apache2/sites-available/000-default.conf
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...