Nginx

Nginx 萬用字元將所有內容重定向到 https 非 www 但子域轉到特定文件夾?

  • January 30, 2019

我剛剛安裝了 Let’s Encrypt 萬用字元證書,我想使用非 www 作為我的標準正則表達式來縮短伺服器塊。所以我希望做到以下幾點:

  1. http 非 www —> https 非 www
  2. http www —> https 非 www
  3. https www —> https 非 www
  4. http any —> https any 到特定文件夾,例如 /var/www/any
  5. https any —> https any 到特定文件夾,例如 /var/www/any

我這樣做對嗎?是否有太多重定向?我希望你能在這裡得到我想要的。

經過一些測試,我已經找到了答案……

# case 1 & 2...

server {
   listen 80;
   listen [::]:80;
   server_name <domain> www.<domain>;
   return 301 https://<domain>$request_uri;
}

# case 3...

server {
   listen 443 http2 ssl;
   listen [::]:443 http2 ssl;
   server_name www.<domain>;
   ...
   return 301 https://<domain>$request_uri;
}

# the main server block...

server {
   listen 443 http2 ssl;
   listen [::]:443 http2 ssl;
   ...
}

對於案例 4 和 5,我首先需要通過我的 DNS 中的 CNAME 記錄添加一個子域並將其指向我的主域,然後創建一個伺服器塊,其根文件夾對應於您想要的 server_name(子域)。

server {
   ...
   server_name <subdomain>.<domain>
   root /var/www/any
   ...
}

還值得一提(避免域停放和與 IP 無關的域)並返回“444 Connection Closed without Response”…

server {
   listen 80 default_server;
   listen [::]:80 default_server;
   access_log off;
   log_not_found off;
   server_name _;
   return 444;
}

關於不使用正則表達式重定向和避免 if 語句的參考:https ://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/

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