Django API在本地工作,但部署在Elastic Beanstalk上则无法工作

时间:2018-07-24 00:00:07

标签: django amazon-web-services django-rest-framework jwt

我正在与Django Rest FrameworkDjango Rest Framework JWT合作,但是我遇到了有关本地行为与外部行为的问题。

当我发出POST请求以获取JWT令牌时,一切都按要求运行在本地和在我的EC2实例上。但是,一旦有了令牌,当我向需要身份验证的服务器发出请求时,只有本地服务器会返回预期的响应。在我的已部署服务器上,出现以下错误:

{"detail":"Authentication credentials were not provided."}

到目前为止,我已经尝试过:

通过切入我的服务器并启用http.conf来编辑WSGIPathAuthorization。 (看到了类似的帖子here,并尝试了解决方法)

什么可能导致此行为?我的本地计算机和部署的代码是相同的,这使我相信这与服务器端配置有关。

感谢所有帮助。谢谢!

3 个答案:

答案 0 :(得分:1)

您提到了ElasticBeanstalk。

您可以将其添加到将在部署期间执行的容器命令中。

01_wsgipass:
 command: 'echo "WSGIPassAuthorization On" >> ../wsgi.conf'

答案 1 :(得分:0)

启用WSGPPathAuthorization后,只需重新启动Apache即可解决我的错误。对于那些遇到类似问题的人,这是我所做的:

  1. SSH进入服务器

  2. 导航至http.conf文件的存储位置(在Apache中,通常是 etc/httpd/http.conf

  3. 编辑http.conf,添加WSGIPathAuthorization On

  4. 通过运行sudo service httpd restart重新启动Apache。

答案 2 :(得分:0)

当您在 EC2 实例上使用 apache 配置 wsgi 时,通常会出现此问题。 基本上是apache配置中的问题, 它与 AWS EC2 没有关系。 由于默认情况下 apache 不处理 Authorization 标头,因此,为了实现这一点,我们需要配置其文件。 对于ubuntu

cd /etc/apache2/apache2.conf

粘贴以下行

WSGIPassAuthorization On