加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > Nginx > 正文

nginx – 无效的子域被重定向到另一个域

发布时间:2020-12-13 21:11:22 所属栏目:Nginx 来源:网络整理
导读:我在同一台服务器上托管了两个域.在DNS记录中,我有通配符(*)两个域的记录都指向服务器. 所以我期待xyz.domain1.com解析为domain1.com 和xyz.domain2.com到domain2.com. 但是目前除了domain2.com上的www子域之外的所有内容都将重定向到domain1.com. 我为这两

我在同一台服务器上托管了两个域.在DNS记录中,我有通配符(*)两个域的记录都指向服务器.

所以我期待xyz.domain1.com解析为domain1.com
和xyz.domain2.com到domain2.com.

但是目前除了domain2.com上的www子域之外的所有内容都将重定向到domain1.com.

我为这两个域提供了相同的nginx配置,所以我不明白是什么原因引起的.这是我的nginx配置看起来像 –

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /dev/stdout  main;
    sendfile        on;
    keepalive_timeout  65;

    # Listen for non-HTTPS requests and redirect them to HTTPS
    server {
        server_name www.domain1.com domain1.com;
        return 301 https://domain1.com$request_uri;
    }

    # Listen for www requests with HTTPS and redirect them to non www site 
    server {
        listen 443 ssl;
        server_name www.domain1.com;
        ssl_certificate     /etc/letsencrypt/live/www.domain1.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/www.domain1.com/privkey.pem;
        ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers         HIGH:!aNULL:!MD5;
        return 301 https://domain1.com$request_uri;
    }

    # Listen for non-www HTTPS requests and serve the app
    server {
        listen              443 ssl;
        #add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
        server_name         domain1.com api.domain1.com;
        ssl_certificate     /etc/letsencrypt/live/www.domain1.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/www.domain1.com/privkey.pem;
        ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers         HIGH:!aNULL:!MD5;

        location ^~ /.well-known/ {
            root   /usr/share/nginx/html;
            allow all;
        }

        location / {
            root /var/www/domain1;
        }
    }




    # Listen for non-HTTPS requests and redirect them to HTTPS
    server {
        server_name www.domain2.com domain2.com;
        return 301 https://domain2.com$request_uri;
    }

    # Listen for www requests with HTTPS and redirect them to non www site
    server {
        listen 443 ssl;
        server_name www.domain2.com;
        ssl_certificate     /etc/letsencrypt/live/www.domain2.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/www.domain2.com/privkey.pem;
        ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers         HIGH:!aNULL:!MD5;
        return 301 https://domain2.com$request_uri;
    }


    # Listen for non-www HTTPS requests and serve the app
    server {
        listen              443 ssl;
        #add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
        server_name         domain2.com;
        ssl_certificate     /etc/letsencrypt/live/www.domain2.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/www.domain2.com/privkey.pem;
        ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers         HIGH:!aNULL:!MD5;

        location ^~ /.well-known/ {
            root   /usr/share/nginx/html;
            allow all;
        }

        location / {
            root /var/www/domain2;
        }
    }
}

如何将域保持分离,以便每个域的子域都重定向到正确的域?

最佳答案
您必须为每个域包含通配符server_name条目,以选择要重定向到的域.否则,将将未知的server_names分派到第一个条目(在这种情况下,重定向到domain1.com).

将* .domain2.com添加到server_name www.domain2.com的行,它应该正确地拆分domain2.com子域.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读