Nginx virtual host loading wrong site

1.9k views Asked by At

I have Nginx with three domains.

The sites, alphabetically are d.com, g.com, and m.com.

All three sites are single site WordPress installations.

g.com is https with a letsencrypt certificate and loads as expected.

m.com is not https and loads as expected

d.com loads m.com instead of its own folder.

I've been searching and reading for two weeks now and I cannot sort out what I have done wrong.

NEW INFORMATION

I discovered that the DNS for this was still at my old host ( mt ), it was pointing here correctly, but I decided to move it to the new host ( linode ).

Now if I use www.d.com I get the correct site loading from the correct folder. But if I leave off the www and just use d.com, I get redirected to www.m.com as a full redirect.

/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;
    }
}
2

There are 2 answers

2
Dane Morgan On BEST ANSWER

After moving the DNS Zone file from Media Temple to Linode, http://www.d.com started loading the WordPress install from the correct folder, though http://d.com did not.

I tried another browser and found that in the other browser both were now working.

I don't understand why moving the DNS Zone file worked here.

7
Cristiano Baptista On

There seems to be nothing wrong with your config, but my suspicion is that you created the config for d.com by copy/pasting the config from m.com and saved the file before making any changes and then either NGINX restarted or reloaded its configuration before you made your modifications to d.com config, which basically means that NGINX doesn't have your current configuration loaded.

You could reload the configuration. On Ubuntu/Debian is something like this:

sudo service nginx reload

You should also recheck and be absolutely sure that /var/www/html/d.com/public_html and /var/www/html/m.com/public_html are indeed serving different content.