Nginx 虚拟主机加载错误站点

Nginx virtual host loading wrong site

我有三个域的 Nginx。

站点按字母顺序为 d.comg.comm.com.

所有三个站点都是单站点 WordPress 安装。

g.com 是带有 letsencrypt 证书的 https,并按预期加载。

m.com 不是 https 并且按预期加载

d.com 加载 m.com 而不是它自己的文件夹。

我已经搜索和阅读了两个星期了,我无法理清我做错了什么。

新信息

我发现它的 DNS 仍在我的旧主机 ( mt ) 上,它指向这里是正确的,但我决定将它移动到新主机 ( linode )。

现在,如果我使用 www.d.com,我会从正确的文件夹中加载正确的网站。但是如果我离开 www 并只使用 d.com,我将被重定向到 www.m.com 作为完全重定向。

/etc/nginx/nginx.conf

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
        worker_connections 768;
        # multi_accept on;
}

http {

        ##
        # Basic Settings
        ##

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        client_max_body_size 150M;

        # server_tokens off;
        server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

        #fastcgi
        fastcgi_buffers 8 16k;
        fastcgi_buffer_size 32k;
        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;

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

        ##
        # SSL Settings
        # /snippits/ssl-params.conf
        ##

        #ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
        #ssl_prefer_server_ciphers on;

        ##
        # Logging Settings
        # Logs set in server blocks
        ##
        error_log /var/log/nginx/http_error.log error;

        ##
        # Gzip Settings
        # /conf.d/gzip.conf
        ##

        ##
        # Virtual Host Configs
        ##

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}

#mail {
#       # See sample authentication script at:
#       # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
#       # auth_http localhost/auth.php;
#       # pop3_capabilities "TOP" "USER";
#       # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
#       server {
#               listen     localhost:110;
#               protocol   pop3;
#               proxy      on;
#       }
#
#       server {
#               listen     localhost:143;
#               protocol   imap;
#               proxy      on;
#       }
#}

/etc/nginx/sites-available/d.com

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

        server_name d.com www.d.com;

        include snippets/expires-headers.conf;

        root /var/www/html/d.com/public_html;

        index index.php;

        access_log /var/log/nginx/d.com/www-access.log;
        error_log /var/log/nginx/d.com/www-error.log error;

        location = /favicon.ico {
                log_not_found off;
                access_log off;
        }

        location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
        }

        location / {
                try_files $uri $uri/ /index.php?$args;
        }

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_intercept_errors on;
                include fastcgi_params;
                fastcgi_pass unix:/run/php/php7.0-fpm.sock;
                fastcgi_param SCRIPT_FILENAME /var/www/html/d.com/public_html$fastcgi_script_name;
        }

        location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                expires max;
                log_not_found off;
        }
}

/etc/nginx/sites-available/g.com

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

        server_name g.com www.g.com;

    return 301 https://$server_name$request_uri;
}

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

    ssl_certificate /var/lib/acme/live/g.com/fullchain;
    ssl_certificate_key /var/lib/acme/live/g.com/privkey;

    include snippets/ssl-params.conf;
    include snippets/expires-headers.conf;

    server_name g.com www.g.com;

        root /var/www/html/g.com/public_html;
        index index.html index.php;

    access_log /var/log/nginx/g.com/www-access.log;
    error_log /var/log/nginx/g.com/www-error.log error;

    location /.well-known/acme-challenge/ {
        alias /var/run/acme/acme-challenge/;
    }

        location / {
                try_files $uri $uri/ =404;
        }

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                include fastcgi_params;
                fastcgi_pass unix:/run/php/php7.0-fpm.sock;
                fastcgi_param SCRIPT_FILENAME /var/www/html/g.com/public_html$fastcgi_script_name;
        }
}

/etc/nginx/sites-available/m.com

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

    server_name m.com www.m.com;

    include snippets/expires-headers.conf;

    root /var/www/html/m.com/public_html;

    index index.php;

    access_log /var/log/nginx/m.com/www-access.log;
    error_log /var/log/nginx/m.com/www-error.log error;

    location = /favicon.ico {
            log_not_found off;
            access_log off;
    }

    location = /robots.txt {
            allow all;
            log_not_found off;
            access_log off;
    }

    location / {
            try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_intercept_errors on;
            include fastcgi_params;
            fastcgi_pass unix:/run/php/php7.0-fpm.sock;
            fastcgi_param SCRIPT_FILENAME /var/www/html/m.com/public_html$fastcgi_script_name;
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
            expires max;
            log_not_found off;
    }
}

您的配置似乎没有任何问题,但我怀疑您通过 copy/pasting 创建了 d.com 的配置,m.com 的配置并在制作之前保存了文件任何更改,然后 NGINX 在您对 d.com 配置进行修改之前重新启动或重新加载其配置,这基本上意味着 NGINX 没有加载您当前的配置。

您可以重新加载配置。在 Ubuntu/Debian 上是这样的:

sudo service nginx reload

您还应该重新检查并确保 /var/www/html/d.com/public_html/var/www/html/m.com/public_html 确实在提供不同的内容。

将 DNS 区域文件从 Media Temple 移动到 Linode 后,http://www.d.com started loading the WordPress install from the correct folder, though http://d.com 没有。

我尝试了另一个浏览器,发现在另一个浏览器中现在都可以正常工作。

我不明白为什么移动 DNS 区域文件在这里起作用。