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
Redirect nginx-HTTPS重定向_Redirect_Ssl_Nginx_Https - Fatal编程技术网

Redirect nginx-HTTPS重定向

Redirect nginx-HTTPS重定向,redirect,ssl,nginx,https,Redirect,Ssl,Nginx,Https,我试图让我的网站只使用HTTPS。我已经查看了stackoverflow的所有内容,并尝试了该站点的nginx设置文件的许多建议设置,但我仍然无法让所有地址组合正常工作。我需要在文件中更改什么才能使其正常工作 这两个地址组合不会重定向- >无重定向(出错) >无重定向(出错) 以下是设置文件的外观- server { listen [::]:80; server_name www.example.com; return 301 https://$hos

我试图让我的网站只使用HTTPS。我已经查看了stackoverflow的所有内容,并尝试了该站点的nginx设置文件的许多建议设置,但我仍然无法让所有地址组合正常工作。我需要在文件中更改什么才能使其正常工作

这两个地址组合不会重定向-

  • >无重定向(出错)
  • >无重定向(出错)
以下是设置文件的外观-

server {
    listen         [::]:80;
    server_name www.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen         [::]:80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

server {
    listen [::]:443 default_server ipv6only=off;
    server_name example.com www.example.com;

    # rest of config file...
}

我通过以下方式在服务器上完成此操作:

server {
    listen 80;
    server_name example.com;
    rewrite ^/(.*) https://example.com/$1 permanent;
}
乍一看,您的配置看起来还可以,但是注意到,对于较旧版本的nginx,您的配置会遇到一些限制

最后,在安全服务器配置中,您可以包含一个指令,使客户端将来只能通过TLS连接到您的域

    add_header Strict-Transport-Security max-age=31536000;

下面的配置将把example.com重定向到

但是,如果要将所有域重定向到https:

  • 将服务器名称更改为(服务器名称)
  • 将重定向规则中的$server\u name变量替换为$host(返回301 https://$host$request\u uri;)
    • 您可以这样使用

      server {
          listen          192.168.1.1:443 ssl;
          server_name     www.example.com;
          ssl_certificate www.example.com.crt;
          ...
      }
      
      server {
          listen          192.168.1.2:443 ssl;
          server_name     www.example.org;
          ssl_certificate www.example.org.crt;
          ...
      }
      

      我已经把TLS部分放在那里了。你发布的内容几乎相同。如果我删除端口前面的
      [::]:
      部分,那么我将介绍我发布的第一个场景,但它仍然无法处理您是否在端口80服务器的
      servername
      指令中同时列出
      domain.com
      www.domain.com
      ?否。我在端口443服务器中。我应该在这两个服务器区域中同时列出这两个吗?谢谢请发布您当前的配置以澄清问题。将$host变量替换为$server\u名称。应该有用!!
      server {
          listen          192.168.1.1:443 ssl;
          server_name     www.example.com;
          ssl_certificate www.example.com.crt;
          ...
      }
      
      server {
          listen          192.168.1.2:443 ssl;
          server_name     www.example.org;
          ssl_certificate www.example.org.crt;
          ...
      }