Nginx

nginx根據域名重定向

  • July 15, 2021

我有一個 django Web 應用程序,它在 IP 地址xx.xxx.105.49和域為的伺服器上執行www.example1.com

下面是我的nginx配置

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

 location / { 
   return 301    https://www.example1.com$request_uri;
 }
}

server {
   listen 443 ssl;
   server_name  example1.com  www.example1.com;

   ssl_certificate      /etc/ssl/company/company.com.chained.crt;
   ssl_certificate_key  /etc/ssl/company/www.company.com.key;
   ssl_session_timeout  20m;
   ssl_session_cache    shared:SSL:10m;  # ~ 40,000 sessions
   ssl_protocols        TLSv1 TLSv1.1 TLSv1.2; # SSLv2
#    ssl_ciphers          ALL:!aNull:!eNull:!SSLv2:!kEDH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+EXP:@STRENGTH;
   ssl_ciphers          HIGH:!aNULL:!MD5;
   ssl_prefer_server_ciphers on;
   client_max_body_size 20M;

   location / {
       proxy_pass http://127.0.0.1:8001;
       proxy_connect_timeout 300s;
       proxy_read_timeout 300s;
   }

 location /static/ {
   alias /home/apps/webapp/company/new_media/;
 }

 location /media/ {
   alias  /home/apps/webapp/company/media/;
 }
}

當我鍵入www.example1.comexample1.com從瀏覽器中鍵入時,它https://www.example1.com按預期將我帶到但是,現在我已經配置了另一個域(example2.company.com)以路由到同一伺服器(xx.xxx.105.49),實際問題是

當我輸入https://example2.company.com(安全)時,伺服器正在為我提供具有相同域的 webappexample2.company.com

但是當我使用時http://example2.company.com,我的伺服器正在重定向到我www.example1.com不想要的,所以如何對上面的 nginx 配置文件進行一些更改,以便如果有人嘗試example2.company.com使用 http 或 https 訪問它應該重定向到https://example2.company.com如下所示

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

 location / { 
   return 301    https://www.example1.com$request_uri;
 }
}

server {
 listen 80;
 server_name  example2.company.com  www.example2.company.com ;

 location / { 
   return 301    https://www.example2.company.com$request_uri;
 }
}

您需要為 example2.xyz.com 設置一個新的虛擬主機。Nginx 會先讀取域名,然後分別呼叫 conf 文件,否則預設 conf。

在 vhost 的 nginx conf 中分別為 example1 和 example2 監聽埠 80,或者您也可以在預設配置中添加監聽 80 以重定向到 https。

使用 map 模組映射多個重定向,如下例所示。

map $http_host $new {
 'exp1.xyz.com' '1';
 'exp2.xyz.com' '2';
}

server {
 listen 80;
 if ($new = '1') {
   rewrite ^(.*) https://exp1.xyz.com$1 redirect;
 }
 if ($new = '2') {
   rewrite ^(.*) https://exp2.xyz.com$1 redirect;
 }
}

要在 nginx 中創建虛擬主機,請參閱此連結 https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-virtual-hosts-server-blocks-on-ubuntu-12-04-lts- -3

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