NGINX 重定向 HTTPS 部分有效

NGINX 重定向 HTTPS 部分有效

我尝试将所有流量重定向到 https。我使用 AWS、passenger + NGINX。

到目前为止,我的智能手机(Android)的 Chrome 最新版本是:http://服务器名称.com重定向到 https...

在我家的电脑上,chrome 最新版本的 reddirect 也一样。但在其他电脑上,它没有 reddirect。

当然无处不在https://服务器名称.com直接访问时有效。

这是我的配置:

#user  adrien;

events {
    worker_connections 768;
    # multi_accept on;
}

http {
  passenger_root /home/ubuntu/.rvm/gems/ruby-2.3.1/gems/passenger-5.0.30;
  passenger_ruby /home/ubuntu/.rvm/gems/ruby-2.3.1/wrappers/ruby;

  server_tokens off;
  add_header X-Frame-Options SAMEORIGIN;
  add_header X-Content-Type-Options nosniff;
  add_header X-XSS-Protection "1; mode=block";
  add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://bam.nr-data.net https://js-agent.newrelic.com 'unsafe-inline' 'unsafe-eval' https://ssl.google-analytics.com https://assets.zendesk.com https://connect.facebook.net; img-src 'self' https://secure.gravatar.com https://ssl.google-analytics.com https://s-static.ak.facebook.com https://assets.zendesk.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com https://assets.zendesk.com; font-src 'self' https://themes.googleusercontent.com; frame-src https://assets.zendesk.com https://www.facebook.com https://s-static.ak.facebook.com https://tautt.zendesk.com; object-src 'none'";

  ssl_session_cache shared:ssl_session_cache:10m;

  server {
    listen      80 default_server;
    server_name xeralis.eu www.xeralis.eu;
    return      301 https://$host$request_uri;
  }

  server {
    listen 443;
    server_name xeralis.eu www.xeralis.eu;

    ssl on;
    ssl_session_timeout 5m;
    ssl_certificate /etc/ssl/nginx.crt;
    ssl_certificate_key /etc/ssl/nginx.key;

    ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
    ssl_prefer_server_ciphers   on;
    ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
    ssl_dhparam /etc/ssl/dhparams.pem;

    resolver 8.8.8.8;
    # Rails add its own headers with force_ssl: true
    # add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

    passenger_enabled on;
    passenger_friendly_error_pages on;
    rails_env development;
        root   /home/ubuntu/www/rails/mercipublic/public;

    location /cable {
        passenger_app_group_name gorails_websocket;
        passenger_force_max_concurrent_requests_per_process 0;
    }

    location ~* ^/assets/ {
        gzip_static on;
        expires max;
        add_header Cache-Control public;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
      root html;
    }

    keepalive_timeout 10;
    }
}

这次会议让我在 SSL 实验室获得了“A”的评分。我该怎么做才能让我的网站在任何地方都能正常工作,http 总是重定向到 HTTPS

**编辑 http 响应标头**

演示:
警告:使用 -X/--request 将自定义 HTTP 方法设置为 HEAD 可能无法按您想要的方式工作。
请考虑改用 -I/--head。curl
:(7) 无法连接到 xeralis.eu 端口 80:连接被拒绝

使用 -I:
无法连接到 xeralis.eu 端口 80:连接被拒绝

**编辑 https 响应标头 **

警告:使用 -X/--request 将自定义 HTTP 方法设置为 HEAD 可能无法
按您想要的方式工作。请考虑改用 -I/--head。HTTP
/1.1 200
OK 日期:2017 年 2 月 28 日星期二 22:36:59 GMT
内容类型:text/html;charset=utf-8
内容长度:11339 连接:保持活动
设置 Cookie:AWSALB=1AbTZpK/eslWt+5VDBK1wqKygcY30U73T36e8987HvJVTR2iE4jqD2W51m+pwEvvzd+Y9wazTTG1rrh2T0BNsNE+TDB9mD5Bl1EADEFWL9hxlHQsqOuQ6/p6qXjy; Expires=2017 年 3 月 7 日星期二 22:36:59 GMT;Path=/
状态:200 OK
Cache-Control:max-age=0,private,must-revalidate
ETag:W/“4b9c4360372ca37d2116059c2018043b”
X-Frame-Options:SAMEORIGIN
X-XSS-Protection:1;模式=block
X-Content-Type-Options:nosniff
X-Runtime:0.081279
X-Request-Id:288d1d28-b6ae-420f-9c87-9e016873c900 Set-Cookie: _mercipublic_session=aEdtcW9NRFlQSytSL1VFTmFoVlNHd0RCUXk1ZzFCaFo3ak5RUGQ0SmRocC9MVmxmd0VnNWxZem5sUDlySTUxVDlDVGFIZTRBbVFwRGwvOXpSNmhReTh6Z2d4MkpVQWhVL2Z6b GJ3UWt3U3BqRXNsMjZSUnNXOW55OEtOTk9GUzdzbERnSWJXR3c2Y2F1dUF2RmRNWlhBPT0tLWUyYWl5aWlsT3lUS2s2YXkya0JJNVE9PQ%3D%3D--e896f790c978b429d6644055f2e8c827d07657c2;路径=/;HttpOnly
X-Powered-By:Phusion Passenger 5.0.30
服务器:nginx + Phusion Passenger 5.0.30
X-Frame-Options:SAMEORIGIN
X-Content-Type-Options:nosniff
X-XSS-Protection:1;模式=block
Content-Security-Policy:default-src'self';脚本源‘self’ https://bam.nr-data.net https://js-agent.newrelic.com‘不安全内联’ ‘不安全评估’https://ssl.google-analytics.com https://assets.zendesk.com https://connect.facebook.net; img-src‘自我’https://secure.gravatar.com https://ssl.google-analytics.com https://s-static.ak.facebook.com https://assets.zendesk.com; 样式源‘self’‘unsafe-inline’https://fonts.googleapis.com https://assets.zendesk.com; 字体源‘自身’ https://themes.googleusercontent.com; 框架源 https://assets.zendesk.com https://www.facebook.com https://s-static.ak.facebook.com https://tautt.zendesk.com; 对象源‘无’

** 编辑 2 一半问题已解决 ** 问题来自 AWS 的 ELB。我在 443 上只有一个监听器。所以当然它阻塞了 80...

现在我要解决的最后一件事是为什么在 HTTP 和 HTTPS 都正常工作的情况下重定向不起作用

答案1

尝试这个替代块,它删除了 $host 并对要重定向到的 URL 进行硬编码。我建议你尝试这个的原因是$host 的定义

按以下优先顺序:请求行中的主机名,或“Host”请求标头字段中的主机名,或与请求匹配的服务器名称

server {
    listen      80 default_server;
    server_name xeralis.eu www.xeralis.eu;
    return      301 https://www.xeralis.eu$request_uri;
}

如果这不起作用,请编辑您的问题以包含发生的情况的演示,包括成功和失败时的情况。“curl -X HEAD -i (URL)”通常可以做到这一点。同时显示匹配的访问日志条目。

相关内容