Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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 Nginx反向代理强制https_Ssl_Nginx_Proxy_Server_Reverse Proxy - Fatal编程技术网

Ssl Nginx反向代理强制https

Ssl Nginx反向代理强制https,ssl,nginx,proxy,server,reverse-proxy,Ssl,Nginx,Proxy,Server,Reverse Proxy,我们有一个使用nginx的反向代理服务器设置。此服务器将把访问者重定向到访问他们的路径所在的相应服务器。现在,我想设置nginx.conf以强制将它们重定向到https。问题是我遇到了“太多重定向”错误。我尝试使用重写并添加“proxy\u set\u header X-Forwarded-Proto-https;”,但都不起作用。我们有没有办法做到这一点?我们已经在cloudflare上设置了ssl证书,因此无需将其添加到配置中 下面是当前nginx的配置设置 server {

我们有一个使用nginx的反向代理服务器设置。此服务器将把访问者重定向到访问他们的路径所在的相应服务器。现在,我想设置nginx.conf以强制将它们重定向到https。问题是我遇到了“太多重定向”错误。我尝试使用重写并添加“proxy\u set\u 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;
    }
使用单独的块

# 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;
    }
}
使用单独的块

# 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;
    }
}

因此,您正在使用cloudflare作为您的DNS

即使您在cloudflare端使用免费版本的cloudflare,也有一种非常简单的方法可以强迫用户使用https。只需在Nginx上托管http版本

1-打开cloudflare并选择您的域

2-转到页面规则选项卡

3-创建页面规则

4-对于url,将*

5-对于设置,请选择始终使用https

6-单击保存并部署


现在,您已经在cloudflare上配置了强制用户重定向到https url。

所以您使用cloudflare作为DNS

即使您在cloudflare端使用免费版本的cloudflare,也有一种非常简单的方法可以强迫用户使用https。只需在Nginx上托管http版本

1-打开cloudflare并选择您的域

2-转到页面规则选项卡

3-创建页面规则

4-对于url,将*

5-对于设置,请选择始终使用https

6-单击保存并部署


现在,您已经在cloudflare上配置了强制用户重定向到https url。

您好,感谢您的回复。我尝试使用一个单独的块,但仍然出现“太多重定向错误”。您是否有来自开发服务器的HTTP/HTTPS重定向?没有,我们在开发中的重定向是在用户未登录时进行的。我在想,这可能是因为代理?不太确定,但我们有两台服务器,当用户访问没有/en的链接时,它将重定向到服务器1,但如果它有/en,它将转到服务器2 elb。我遇到了“太多重定向”错误,因为我忘了按端口分隔服务器块(例如,一个用于80,一个用于443),导致它无限重定向。嗨,谢谢你的回复。我尝试使用一个单独的块,但仍然出现“太多重定向错误”。您是否有来自开发服务器的HTTP/HTTPS重定向?没有,我们在开发中的重定向是在用户未登录时进行的。我在想,这可能是因为代理?不太确定,但我们有两台服务器,当用户访问没有/en的链接时,它将被重定向到服务器1,但如果它有/en,它将转到服务器2 elb。我遇到了“太多重定向”错误,因为我忘了按端口分隔服务器块(例如,一个用于80,一个用于443),导致它无限重定向。