【问题标题】:NGINX Redirect http to https and non-www to wwNGINX 将 http 重定向到 https,将非 www 重定向到 ww
【发布时间】:2014-02-02 03:01:38
【问题描述】:

我正在使用 SSL 设置 nginx 服务器。

带有 ssl 的域是 www.mydomain.com

我想重定向所有请求:

http://mydomain.com, http://www.mydomain.com, & https://mydomain.com

https://www.mydomain.com

我目前有以下服务器块设置:

server{
  listen 443 ssl;
  root /www/mydomain.com/;

  ssl_certificate /ssl/domain.crt;
  ssl_certificate /ssl/domain.key;
  .
  . 
  .
}

server{
  listen 80;
  server_name mydomain.com;
  return 301 https://www.mydomain.com$request_uri;
}

server{
  listen 80;
  server_name www.mydomain.com;
  return 301 https://www.mydomain.com$request_uri;
}

server{
  listen ssl 443;
  server_name mydomain.com;
  return 301 https://www.mydomain.com$request_uri;
}

这目前不起作用,但我不明白为什么不这样做。我可以得到 http -> https 工作或 no-www 到 -> www 工作的组合,但如上所述混合它们不起作用。

【问题讨论】:

    标签: redirect ssl nginx https


    【解决方案1】:

    如果您的 ssl 证书不支持非 www 域,则 ssl 重定向将不起作用。 配置正确,但可以减少到只有 1 个重定向服务器

    另外别忘了重新加载nginxsudo service nginx reload

    server {
      listen 80;
      listen 443 ssl;
      server_name example.com;
      # add ssl settings
      return 301 https://www.example.com$request_uri;
    }
    

    【讨论】:

    • 这正是我想要的,并且正在以相反的方式使用它。谢谢!
    • 如果您需要,您需要一个单独的服务器,服务器名称为 www.domain.com,并连接到端口 80 来执行额外的重定向。
    • 这给了我 - nginx: [emerg] invalid parameter "443" in /etc/nginx/nginx.conf:96
    • 你可以粘贴那行'96',也是你的nginx版本
    • 我刚刚在那个版本上测试过,它也给了我同样的结果,你可以把它分成两条听线listen 80;listen 443;
    【解决方案2】:

    我迟到了,但你可以这样做

    server{
      listen 443 ssl;
      server_name www.mydomain.com;
      root /www/mydomain.com/;
    
      ssl    on;
      ssl_certificate /ssl/domain.crt;
      ssl_certificate /ssl/domain.key;
      .
      . 
      .
    }
    
    server{
      listen 80;
      server_name www.mydomain.com mydomain.com;
      return 301 https://$server_name$request_uri;
    }
    
    server{
      listen 443;
      server_name mydomain.com;
      return 301 https://www.$server_name$request_uri;
    }
    

    或者您可以将return 301 https://www.$server_name$request_uri; 替换为rewrite ^ http://www.$server_name$request_uri? permanent;,两者都可以。

    您还需要在 google 网站管理员中设置此项以获得更好的 SEO。

    【讨论】:

    • 好像错了,www.mydomain.com 将在 listen 80 块中被替换为 www.www.mydomain.com。
    • @Feras 我已经更新了答案,请检查。如果您有任何问题,请告诉我。
    • @Feras 太好了,我很高兴这有帮助。
    • 这似乎不适用于 https//mydomain.com
    • 它将 https//mydomain.com 重定向到 https//www.mydomain.com,如果不想重定向则删除第三个块。
    【解决方案3】:
    #If you like to redirect all "http" to "https" then add the following:
    server {
            listen 80;
    
            server_name yourdomain.com;
            server_name www.yourdomain.com;
    
     if ($scheme = "http")
            {
                    rewrite ^(.*)$ https://yourdomain.com$1 permanent;
            }
    }
    

    【讨论】:

      【解决方案4】:

      这对我来说适用于 http 到 https 的重定向,

      server {
          listen 80 default_server;
          listen [::]:80 default_server;
      
          root /var/www/html;
          index index.php index.html index.htm index.nginx-debian.html;
          server_name example.com;
      
          #For HTTP to HTTPS:
      
          proxy_set_header X-Forwarded-Proto $scheme;
          if ( $http_x_forwarded_proto != 'https' ) 
          {
              return 301 https://$host$request_uri;
          }
      
          location / {
              try_files $uri $uri/ /index.php;
              add_header 'Access-Control-Allow-Origin' '*';
          }
          
          location ~ \.php$ {
              include fastcgi.conf;   
              fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
          }
      
          
          location ~ /\.ht {
              deny all;
          }
      }
      

      谢谢。

      【讨论】:

        【解决方案5】:

        使用重写将所有 HTTP 流量发送到 HTTPS:

        server {
         listen 80 default_server;
         listen [::]:80 default_server;
         server_name _;
         return 301 https://$host$request_uri;
        }
        

        此配置侦听端口 80 作为 IPv4 和 IPv6 的默认服务器,并且 对于任何主机名。 return 语句返回一个 301 永久重定向到 HTTPS 服务器在同一主机和请求 URI。

        【讨论】:

          【解决方案6】:
          Please add two given things on your file.
          
          Given code paste on top side 
          server {
              listen 80;
              server_name linuxize.com www.linuxize.com;
              return 301 https://linuxize.com$request_uri;
          }
          
          Given code paste on bottom side.
          server {
              listen 443 ssl http2;
              server_name www.linuxize.com;
          
              # . . . other code
          
              return 301 https://linuxize.com$request_uri;
          }
          

          了解更多click here!

          【讨论】:

            猜你喜欢
            • 2016-01-07
            • 2018-02-02
            • 2011-06-11
            • 2017-09-03
            • 2017-11-24
            • 2017-03-24
            • 1970-01-01
            • 2018-04-22
            • 1970-01-01
            相关资源
            最近更新 更多