Nginx

NGINX 重定向多個域

  • April 1, 2020

我對 NGINX 和整個配置都很陌生,所以在朋友的幫助下,我設法使用以下配置設置了一個伺服器:

   server {
       listen 80;
       listen [::]:80;
       server_name domain.com;
       rewrite         ^       https://$server_name$request_uri? permanent;
}

server {
       listen 80;
       listen [::]:80;
       server_name domain.de;
       rewrite         ^       https://$server_name$request_uri? permanent;
}

server {
       listen 443 ssl http2;
       listen [::]:443 ssl http2;
       server_name domain.com domain.de;
       root /var/www/html;
       index index.php index.html index.htm;

我的首頁、一些項目頁面和一些私人頁面有多個伺服器。我為每個 TLD 都有自己的伺服器,因為我不想在重定向時更改地址欄中的 TLD。現在我的答案是,我怎樣才能簡單地將所有這些非 SSL 伺服器獲取到一個大型伺服器(1/項目)而不重​​定向到一個 TLD?

例子:

Project.com、Project.de、Project.net 和 Project.org 正在將這些非 SSL 伺服器中的 5 台以上重定向到一台啟用 SSL 的伺服器。當我要去http://project.net>時,我會被重定向到<https://project.net。由於單一的非 SSL 伺服器設置,TLD 根本沒有改變。

我想要實現的是,我可以縮小我的配置文件,使每個項目有一個非 SSL 伺服器重定向到 https 而無需更改域。

                                      :80 Server      :443 Server

http domain.net —> https domain.net (

$$ non-SSL 01 $$—>$$ SSL 01 $$) http domain.com —> https domain.com ($$ non-SSL 02 $$—>$$ SSL 01 $$) http domain.de —> https domain.de ($$ non-SSL 03 $$—>$$ SSL 01 $$) http 項目.de —> https 項目.de (

$$ non-SSL 04 $$—>$$ SSL 02 $$) http project.com —> https project.com ($$ non-SSL 05 $$—>$$ SSL 02 $$) 等等

我的理解是您想將多個域重定向到一個域。

首先,我建議您使用return 301而不是rewrite. 在這種情況下效率更高。

這是預設的伺服器配置。如果請求與任何虛擬主機不匹配,它將被提供。

server {
   listen 80 default_server;
   listen [::]:80 default_server;
   server_name _;
   return 301 https://your-correct-domain.com$request_uri;
}

還要設置伺服器以接收 your-correct-domain.com 的 HTTP 流量並將其重定向到 HTTPS。

server {
   listen 80;
   listen [::]:80;
   server_name your-correct-domain.com;
   return 301 https://your-correct-domain.com$request_uri;
}

最後,您擁有所有配置的 your-correct-domain.com 的 HTTPS 伺服器。

server {
   listen 443 ssl http2;
   listen [::]:443 ssl http2;
   server_name your-correct-domain.com;
   root /var/www/html;
   index index.php index.html index.htm;
}

請注意,如果有人直接訪問 IP,此設置將為預設伺服器提供服務。例如,您的伺服器 IP 是192.168.100.100,如果有人在瀏覽器中輸入該 IP,他們將被重定向到https://your-correct-domain.com.

預設伺服器將擷取所有沒有為其準備伺服器/虛擬主機的請求。因此,如果有人請求*domain.de、my.domain.de、site2.domain-something.com,*他們都將被永久重定向https://your-correct-domain.com. 您還可以選擇使用302而不是 301 進行重定向。

最後要注意的是,如果您有其他虛擬主機不屬於您正在製作的此設置,則不會有問題。預設伺服器不會為此提供服務,因為 Nginx 將首先檢查虛擬主機是否存在並首先提供服務。

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