【问题标题】:Nginx Reverse proxy force httpsNginx 反向代理强制 https
【发布时间】:2017-08-25 04:59:34
【问题描述】:

我们有一个使用 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;
    }

【问题讨论】:

    标签: ssl nginx proxy server reverse-proxy


    【解决方案1】:

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

    即使您在 cloudflare 端使用免费版本的 cloudflare,也有一个非常简单的 hack 可以强制用户访问 https。只需在 Nginx 上托管 http 版本即可。

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

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

    3- 创建页面规则

    4- 对于网址,输入http://www.example.com/*

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

    6- 点击保存并部署

    现在你已经在你的 cloudflare 配置了强制用户重定向到 https url。

    【讨论】:

      【解决方案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;
          }
      }
      

      【讨论】:

      • 您好,感谢您的回复。我尝试使用单独的块,但仍然收到“重定向错误太多”。
      • 你有任何来自开发服务器的 HTTP/HTTPS 重定向吗?
      • 不,我们在开发上的重定向是在用户没有登录的时候。我在想可能是因为代理?不太确定,但是当用户访问没有 /en 的链接时,我们有 2 个服务器,那么它将被重定向到服务器 1,但如果它有 /en,那么它将转到服务器 2 elb。
      • 我遇到了“重定向过多”错误,因为我忘记按端口分隔服务器块(例如,一个用于 80,一个用于 443),导致它无限重定向。
      猜你喜欢
      • 1970-01-01
      • 2015-01-04
      • 1970-01-01
      • 1970-01-01
      • 2021-04-06
      • 2016-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多