nginx基于域名重定向

Shi*_*dla 5 ssl nginx domain

我有一个 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/;
  }
}
Run Code Online (Sandbox Code Playgroud)

当我输入www.example1.comexample1.com从浏览器中时,它https://www.example1.com按预期将我带到了,但是,现在我已经配置了另一个域(example2.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;
  }
}
Run Code Online (Sandbox Code Playgroud)

小智 8

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

在 vhost 的 nginx 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;
  }
}
Run Code Online (Sandbox Code Playgroud)

要在 nginx 中创建虚拟主机,请参阅此链接 https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-virtual-hosts-server-blocks-on-ubuntu-12-04-lts- -3