nginx根据域名重定向

nginx根据域名重定向

我有一个 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.com或从浏览器输入时,它会按预期example1.com带我到,但现在我已经配置了另一个域( )来路由到同一台服务器,而实际的问题是https://www.example1.comexample2.company.com(xx.xxx.105.49)

每当我输入https://example2.company.com(安全)时,服务器都会使用相同的域名为我提供 Web 应用程序example2.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;
  }
}

答案1

您需要为 example2.xyz.com 设置一个新的 vhost。Nginx 将首先读取域名,然后分别调用 conf 文件,否则将调用默认 conf。

在 nginx vhost conf 中为 example1 和 example2 分别监听 80 端口,或者您也可以在默认 conf 中添加监听 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 中创建 vhost,请参考此链接 https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-virtual-hosts-server-blocks-on-ubuntu-12-04-lts--3

相关内容