Nginx反向代理强制https

时间:2017-03-31 03:27:41

标签: ssl nginx proxy server reverse-proxy

我们使用nginx为反向代理设置服务器。此服务器将访问者重定向到访问它们的路径的相应服务器。现在,我想设置nginx.conf以强制将它们重定向到https。问题是我得到了太多的重定向"错误。我尝试使用重写并添加" proxy_set_header X-Forwarded-Proto https;"但它都不起作用。有没有办法实现这个目标?我们已经在cloudflare上设置了ssl证书,因此我们不需要在配置上添加它。

以下是当前nginx的配置设置。

   server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  localhost;
    root         /usr/share/nginx/html;

   if ($http_x_forwarded_proto = "http") {
      rewrite  ^/(.*)$  https://development-link/$1 permanent;
   }

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    location / {
            proxy_set_header X-Real-IP  $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_set_header Host $host;
            proxy_pass http://development-elb1;
            proxy_set_header X-Forwarded-Proto https;
    }

    location /en {
            proxy_set_header X-Real-IP  $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_set_header Host $host;
            proxy_pass http://development-elb2;
            proxy_set_header    X-Forwarded-Proto https;
    }

2 个答案:

答案 0 :(得分:2)

使用单独的块。

# Redirect HTTP to HTTPS
server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  localhost;
    return 301   https://$host$request_uri;
}

# HTTPS
server {
    listen       443 default_server;
    listen       [::]:443 default_server;
    server_name  localhost;
    root         /usr/share/nginx/html;       

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    location / {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
        proxy_pass http://development-elb1;
        proxy_set_header X-Forwarded-Proto https;
    }

    location /en {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
        proxy_pass http://development-elb2;
        proxy_set_header    X-Forwarded-Proto https;
    }
}

答案 1 :(得分:1)

所以你使用cloudflare作为你的DNS。

即使您在cloudflare端使用免费版本的cloudflare,也很容易强迫用户进行https。只需在您的Nginx上托管http版本。

1-打开cloudflare并选择您的域名。

2-转到“页面规则”选项卡。

3-创建页面规则

4-为网址,添加http://www.example.com/ *

5-进行设置,选择始终使用https

6-单击“保存并部署”

现在,您已在cloudflare中配置强制用户重定向到https网址。