我有一个使用mod_wsgi安装了apache和django的生产服务器。
django应用程序具有一个REST API,该API在发送GET请求时会提供一些信息。
如果我们在屏幕上使用manage.py来运行django,那么在开发服务器上这总是可以正常工作的。现在,我们使用运行django的apache创建了一个生产服务器,但是当从localhost或同一网络中其他计算机(使用192.168.XX IP)运行wget时,此API返回错误500 )。
这是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正常运行。 仅当由apache运行django时出现问题。
我也尝试了this post中给出的解决方案,但是更改该行并不能解决错误。
我对此错误有疑问:
- apache如何运行django?
- 重新启动apache2服务还会重新启动django吗? (因此,请再次阅读settings.py)
- 是否还有其他django设置文件,而不是我正在编辑的文件?
- 我如何查看Django日志?我现在没有控制台,所以看不到实时打印。
我非常感谢您的帮助。
我终于设法自己解决了。
事实证明,wsgi将来自本地主机或外部IP的请求作为不同的实例组来处理。所以我要做的就是把
WSGIApplicationGroup %{GLOBAL}
输入
/ etc / apache2 / sites-available / 000-default.conf