Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SSL、AWS负载平衡器、Nginx和Gunicorn的Django Rest框架具有复杂堆栈的错误超链接_Django_Amazon Web Services_Ssl_Nginx_Django Rest Framework - Fatal编程技术网

使用SSL、AWS负载平衡器、Nginx和Gunicorn的Django Rest框架具有复杂堆栈的错误超链接

使用SSL、AWS负载平衡器、Nginx和Gunicorn的Django Rest框架具有复杂堆栈的错误超链接,django,amazon-web-services,ssl,nginx,django-rest-framework,Django,Amazon Web Services,Ssl,Nginx,Django Rest Framework,我无法找到如何正确设置nginx,因此我在DRF构建的API中的超链接是正确的 我当前对nginx的配置是: upstream web { ip_hash; server web:8000; } # portal server { listen 8000; server_name localhost; location / { proxy_set_header Host $host:$server_port; proxy_se

我无法找到如何正确设置
nginx
,因此我在DRF构建的API中的超链接是正确的

我当前对
nginx
的配置是:

upstream web {
  ip_hash;
  server web:8000;
}

# portal
server {
  listen 8000;
  server_name localhost;

  location / {
        proxy_set_header        Host $host:$server_port;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        X-Forwarded-Proto $scheme;
        proxy_pass http://web/;
    }
}
nginx
在容器内运行,暴露端口
8000
,并将其映射到
8000
上的内部运行的gunicorn(也在容器中)。因此,当我启动整个docker机器时,我可以很好地访问
localhost:8000/api
,链接呈现正常。即使我使用不同的域访问它(例如,如果我设置了
/etc/hosts
127.0.0.1 mytest.com
),URL和端口也会正确地传递到DRF,链接会按预期呈现


但此服务必须位于AWS负载平衡器之后,证书使用SSL。此LB上的主机名设置为
otherdomain.com
,它将流量重定向到使用端口8000上的HTTP运行上述
nginx
的计算机。然后,当尝试使用
https://otherdomain.com/api
,链接呈现为
http://otherdomain.com:8000/api/
添加到您的
设置.py

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTOCOL', 'https')
SECURE_SSL_REDIRECT = not DEBUG

kotrfa编辑:相关。我不想添加第二行,因此仍然可以不使用HTTPS直接访问服务器,例如在本地主机上测试时。为此,我必须在
nginx
中设置两个不同的服务器,一个是在来自负载平衡器(例如7779)的同一端口上使用硬编码的
Host my.domain.org
,另一个是在7778上使用
Host$Host:$port
,这样就可以在VPN后面或本地主机上直接访问,链接仍然有效:-)

添加到您的
设置.py

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTOCOL', 'https')
SECURE_SSL_REDIRECT = not DEBUG

kotrfa编辑:相关。我不想添加第二行,因此仍然可以不使用HTTPS直接访问服务器,例如在本地主机上测试时。为此,我必须在
nginx
中设置两个不同的服务器,一个是在来自负载平衡器(例如7779)的同一端口上使用硬编码的
Host my.domain.org
,另一个是在7778上使用
Host$Host:$port
,这样就可以在VPN后面或本地主机上直接访问,链接仍然有效:-)

您是否已添加到
设置.py
SECURE\u PROXY\u SSL\u HEADER=('HTTP\u X\u FORWARDED\u PROTOCOL','https')
SECURE\u SSL\u REDIRECT=not DEBUG
解决了这个问题,谢谢您添加到
设置.py
SECURE\u PROXY\u SSL\u HEADER=('HTTP\u X\u FORWARDED\u PROTOCOL','https')
SECURE\u SSL\u REDIRECT=not DEBUG
解决了这个问题,谢谢