nginx 强制 SSL 异常

nginx 强制 SSL 异常

我使用的是 Ubuntu 14.04,安装了 nginx,并在主域上安装了 SSL,运行良好。我甚至在主域上停放了 5-6 个其他域。如果我访问其中任何一个域,我都会收到 SSL 警告,因为我已使用以下配置在 nginx 配置中强制使用 HTTPS:

我已经添加了以下内容/etc/nginx-sp/vhosts.d/APPNAME.d/redirect_to_https.nonssl_conf

return 302 https://$host$request_uri;

这正确地强制提供 HTTPS 版本。

我如何实现某些条件,例如:如果域名是main.example.com则重定向到 HTTPS 版本,否则显示 HTTP 版本

答案1

任何尝试创建if语句来返回站点的 https 版本的尝试都将导致重定向循环(因为您的条件server_name在重定向后不会改变,所以总是会匹配条件并再次重定向...)。

话虽如此,我建议为每个虚拟主机/子域设置单独的配置文件(我从您当前的设置推断,您使用的是单个 catch-all 配置 - 如果不是这种情况,请相应地更新您的问题)

您可能还会发现以下一种更优雅的方式,可以在您希望始终通过 https 提供服务的域/子域上重定向到 https:

    if ( $scheme = http ){
            rewrite ^ https://$server_name$request_uri? permanent;
    }

例如,您可以创建以下内容:

server {
  server_name nonssldomain.com anothernonssldomain.com;
  listen 80;
           }

在一个名为 non_ssl_sites.conf (或任何你喜欢的)的文件中,然后是另一个:

server {
  server_name ssldomain.com;
  listen 80;
  listen 443 ssl;

  if ( $scheme = http ){
            rewrite ^ https://$server_name$request_uri? permanent;
  }
           }

在名为 ssl_sites.conf 的文件中(或者,无论您喜欢什么)

答案2

您应该为您管理的每种“类型”的域使用不同的服务器块,这样您就不必使用 if 语句来测试 $host 变量。

# Domains to serve only via HTTPS
server {
  server_name domaintoredirect1.tld domaintoredirect2;
  listen 80;

  return 302 https://$host$request_uri;
}

server {
  server_name domaintoredirect1.tld domaintoredirect2;
  listen 443 ssl;

  ...
}

# Domains to serve via both HTTP/HTTPS
server {
  listen 80;
  listen 443 ssl;

  server_name otherdomain1.tld otherdomain2.tld;
}

相关内容