Nginx

在 nginx 中將萬用字元域重定向/重寫到 ssl

  • November 20, 2014

我已經嘗試了在此站點和其他站點上找到的所有解決方案,但在將帶有 http 的萬用字元子域重定向到 https 時仍然遇到問題。我還是結束了

https://%2A.example.com/site_admin

上面的 url 在 Chrome 中顯示,在 IE 中顯示“此頁面無法顯示”,在我手機上的 chrome 中顯示“您的連接不是私有的”。

非萬用字元 nginx 伺服器塊工作正常。

我已經嘗試在伺服器塊中為 http 萬用字元重寫和重定向 301,但它仍然將 url 重寫為 %A2(*)。我認為預設伺服器使用 *.example.com 的 server_name 但即使使用 $host 它仍然會重寫為 *.example.com。是否需要包含另一個指令?

server {
   listen  80;
   server_name example.com www.example.com;

   # tell users to go to SSL version this time
   if ($ssl_protocol = "") {
      rewrite     ^   https://$server_name$request_uri? permanent;
   }
}
server {
   listen 443 ssl;
   server_name example.com www.example.com;

   ## ssl and locations not shown
}

server {
   listen  80;
   server_name manager.example.com ;

   # tell users to go to SSL version this time
   if ($ssl_protocol = "") {
      rewrite     ^   https://$server_name$request_uri? permanent;
   }
}
server {
   listen 443 ssl;
   server_name manager.example.com ;

   ## ssl and locations not shown
}

server {
   listen  80 default_server;
   server_name *.example.com "" ;

   # tell users to go to SSL version this time
   if ($ssl_protocol = "") {
       rewrite     ^   https://$host$request_uri? permanent;
       #rewrite     ^   https://$server_name$request_uri? permanent;
}

}
server {
   listen 443  default_server;
   server_name *.example.com ;

   ssl on;
   ## other ssl and locations not shown
}

原來是瀏覽器記憶體。一旦它被清除,重定向就起作用了。有時這是最簡單的事情。

您錯過了ssl應該是萬用字元 sslserver {}塊中的實際語句,因此您實際上在 443 埠上有一個 http 而不是 https。

引用自:https://serverfault.com/questions/645883