Nginx

如何將所有 Web 請求重定向到 Nginx 上的特定子域?

  • March 15, 2019

我有一個網站,我只想在以下位置提供請求:

abc.mywebsite.com

我希望有任何要求:

www.mywebsite.com
mywebsite.com
<anything that is not abc>.mywebsite.com

被定向到abc.mywebsite.com,因為我有專門的證書。如何編寫我的 conf 文件來完成此操作?

這是我的conf文件:

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

server {
   listen   443 default ssl;
   server_name abs.mywebsite.com;

   ssl    on;
   ssl_certificate    /etc/nginx/bundle.crt;
   ssl_certificate_key    /etc/nginx/abc.mywebsite.com.key;

   ssl_session_timeout  5m;
   ssl_protocols  SSLv2 SSLv3 TLSv1;
   ssl_ciphers  HIGH:!aNULL:!MD5;
   ssl_prefer_server_ciphers   on;


   root /home/mywebsite/public;

   try_files $uri/index.html $uri @app;

您需要default_server為 HTTP 和 HTTPS 設置一個塊。該塊將處理您的重定向。

它看起來像這樣:

server {
   listen 80 default_server;
   listen [::]:80 default_server;

   return 301 https://abc.mywebsite.com$request_uri;
}

此塊將任何請求重定向到任何虛擬主機abc.mywebsite.com和原始請求 URI。您可能想要剝離request_uri,因為通常沒有匹配的頁面。

server {
   listen 443 ssl default_server;
   listen [::]:443 ssl default_server;

   ... ssl_certificates here ...

   return 301 https://abc.example.com$request_uri;
}

此塊將到達埠 443 的任何虛擬主機的任何請求重定向到abc.example.com原始 URI。使用 TLS,您需要為要重定向的域提供有效證書,並且需要正確設置它們才能完全正常工作。

server {
   listen 443 ssl;

   server_name abc.example.com;

   ssl_certificate    /etc/nginx/bundle.crt;
   ssl_certificate_key    /etc/nginx/abc.mywebsite.com.key;

   ssl_session_timeout  5m;
   ssl_protocols  SSLv2 SSLv3 TLSv1;
   ssl_ciphers  HIGH:!aNULL:!MD5;
   ssl_prefer_server_ciphers   on;

   root /home/mywebsite/public;

   try_files $uri/index.html $uri @app;
}

這是abc.example.com.

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