我有一个使用 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中给出的解决方案,但更改行并不能解决错误。
我对此错误有疑问:
- apache如何运行django?
- 重启apache2服务还会重启django吗? (因此,请再次阅读settings.py)
- 除了我正在编辑的文件之外,还有其他django设置文件吗?
- 如何查看Django日志?我现在没有控制台,所以看不到实时打印。
非常感谢您的帮助。
答案 0 :(得分:1)
我终于设法自己解决了。
事实证明,wsgi将来自本地主机或外部IP的请求作为不同的实例组进行处理。所以我要做的就是放
WSGIApplicationGroup %{GLOBAL}
在
/etc/apache2/sites-available/000-default.conf