从本地主机/内部网络GET时,Apache引发错误500:内部服务器错误

时间:2020-04-02 17:05:49

标签: django apache rest mod-wsgi internal-server-error

我有一个使用 mod_wsgi 安装的 apache django 的生产服务器。

django应用程序具有一个REST API,该API在发送GET请求时会提供一些信息。

如果我们在屏幕上使用manage.py来运行django,那么这在开发服务器上总是可以正常工作。现在,我们使用运行django的apache创建了一个生产服务器,但是当从 localhost 运行 wget 时,此API返回错误500 或同一网络(使用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。

但是,如果使用外部(即来自浏览器)服务器的公共IP来完成请求,则该API可以正常工作,并且我可以看到正确的信息。

我已经检查了django允许的主机,并且该主机正在接受localhost和另一台计算机的192.168.X.X IP。最后,我像这样离开了django的 settings.py

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

注意:192.168.1.101是尝试发出GET请求的计算机。 所有这些的最终目标是能够从在该计算机上运行的python脚本发出GET请求(如果django通过manage.py运行,该脚本就已经可以使用了。)

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

我尝试通过manage.py运行django,来自本地主机的wget正常工作。 该问题仅在apjan django运行时出现。

我也尝试了this post中给出的解决方案,但更改行并不能解决错误。

我对此错误有疑问:

  1. apache如何运行django?
  2. 重启apache2服务还会重启django吗? (因此,请再次阅读settings.py)
  3. 除了我正在编辑的文件之外,还有其他django设置文件吗?
  4. 如何查看Django日志?我现在没有控制台,所以看不到实时打印。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我终于设法自己解决了。

事实证明,wsgi将来自本地主机或外部IP的请求作为不同的实例组进行处理。所以我要做的就是放

WSGIApplicationGroup %{GLOBAL}

/etc/apache2/sites-available/000-default.conf