NginX http重定向到https返回不可读的响应

时间:2016-09-02 15:14:50

标签: http redirect nginx https

我想用NginX将所有http请求重定向到https,但我遇到了一些困难。

这是我的vhost文件:

server {
    gzip off;
    listen 80;
    listen [::]:80;
    server_name mydomain.fr www.mydomain.fr sub.otherdom.fr otherdom.fr;
    return 301 https://$host$request_uri;
    }

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    root /usr/share/nginx/html;
    index index.html index.htm;
    ssl on;
    server_name mydomain.fr www.mydomain.fr sub.otherdom.fr otherdom.fr;
    ssl_certificate /root/tmp/live-ecdsa/mydomain.fr/0001_chain.pem;
    ssl_certificate_key /root/tmp/live-ecdsa/mydomain.fr/privkey-p384.pem;
    access_log /var/log/nginx/default.access.log;
    charset utf-8;
    location  / {
        try_files $uri $uri/ /index.html;
        }
        }

尝试使用不同浏览器的普通http访问这些域会导致以下结果: Chrome / Firefox:下载填充了字节数据的文件

边缘:显示包含€ÿÿÿÿ

的空白页面

curl -I mydomain.fr输出▒▒

直接通过https访问这些域。 我已经尝试了return 301 https://$host$request_uri;return 301 https://$server_name$request_uri;

2 个答案:

答案 0 :(得分:1)

我怀疑它与您在一个非常本地范围的上下文中的一个服务器名称字段中声明的相当多的服务器名称有关。虽然,如果我是诚实的,这是一个基于习惯的相当毫无根据的断言,我已成为用户。

我建议了一些事情,虽然通常大部分内容都不会解决你的问题,但它可能会更容易解决发生的事情:

  • 将您的配置拆分为目标文件。 IE浏览器。在另一个包含所有yous cert设置,密码套件等的文件夹中创建一个ssl.conf。然后在你的配置中添加一个include /path/to/ssl.conf。
  • 不要使用$ host,这个变量可以通过使用设置,所以可能不是一个好主意

假设您从其他地方引用了所有其他相关的ssl / tls设置,那么下面应该大致有用。

server {
  listen 80 default_server;
  listen [::]:80 default_server;
  server_name mydomain.fr;
  return 301 https://$server_name$request_uri;
}

server {
  listen 443 ssl http2 default_server;
  listen [::]:443 ssl http2 default_server;
  root /usr/share/nginx/html;
  $server_name mydomain.fr
  location  / {
    try_files $uri $uri/ /index.html;
  }
}

答案 1 :(得分:0)

好吧,虽然user6788523响应帮助我调试,但错误在我身边。

我有几个其他vhost文件,http2指令与http端口80(listen [::]:80 http2;)相关联。删除http2指令解决了问题。

此设置必须仅用于启用ssl的服务器块