繁体   English   中英

使用重写https到http重定向无法在nginx配置中工作

[英]https to http redirect not working in nginx configuration using rewrite

为了在我们的应用程序中分配负载并实现安全性,我们从amazon采用了弹性Load Balancer,并在其上配置了SSL。现在,从http到https的重定向在服务器上的nginx配置或ELB上附加的实例上不起作用。 以下是nginx配置: -

 server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;
        server_name new.example.com;
        access_log /var/log/nginx/domain-access.log;
        location / {
                proxy_read_timeout 90;
                proxy_connect_timeout 90;
                proxy_set_header Host $host;
                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://127.0.0.1:8000;
              }
}

首先服务器不支持https URL然后我在配置中添加一些代理设置但现在问题是重定向不起作用我在ngnix配置中使用以下命令将http重定向到https: -

#version 1   
    server{
      return         301 https://$server_name$request_uri;
    }

#version 2   
    server {
     rewrite ^(.*) https://$host$1 permanent;
    }

部署在服务器上的应用程序是使用django框架构建的。

当我做了类似的事情时,我已经设置了ELB HTTPS以重定向到节点上的HTTP端口80。 然后我在节点上设置了第二个nginx vhost,例如在端口81上,它指示返回301 https:// $ server_name $ request_uri; 并设置ELB http侦听器以重定向到该端口(其中$ server_name显然指向ELB的域CNAME)

然后,我确保无法使用安全组从我的VPC外部访问ELB背后的实例。

如果您使用Django,您可以使用它来进行重定向,这提供了很多灵活性,例如仅在生产服务器上启用HTTPS重定向或选择要重定向的URL:

# Honor the 'X-Forwarded-Proto' header for request.is_secure()
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTOCOL', 'https')

# Redirect to HTTPS in production
SECURE_SSL_REDIRECT = not DEBUG

# Disable redirection on this urls
SECURE_REDIRECT_EXEMPT = [
    '^legacy/api/',
]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM