Skip to content
Advertisement

Wildcard subdomain and a specific subdomain configuration in same server Nginx

I had set up a wildcard subdomain server for my PHP app1 domain like *.domain.com in Nginx default configuration. My app1 was serving if someone type x.domain.com or y.domain.com everything was fine.

When I set up another virtual host for a specific subdomain in this domain specific.domain.com for app2. After that, when I type x.domain.com it’s showing me app2 but I wanted to show app2 only for specific.domain.com and app1 for *.domain.com

server {
    # Set the port to listen on and the server name
    listen 80 default_server;
    server_name *.domain.com;
    # Set the document root of the project
    root /var/www/html/app1;

    # Set the directory index files
    index index.php index.html index.htm;

    # Specify the default character set
    charset utf-8;

    # Setup the default location configuration
    location / {
      try_files $uri $uri/ /index.php$is_args$args;
    }

    # Specify the details of favicon.ico
    location = /favicon.ico { access_log off; log_not_found off; }

    # Specify the details of robots.txt
    location = /robots.txt  { access_log off; log_not_found off; }

    # Specify the logging configuration
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    sendfile off;

    client_max_body_size 128m;

    # Specify what happens when PHP files are requested
    location ~ .php$ {
        fastcgi_split_path_info ^(.+.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_intercept_errors off;
        fastcgi_buffer_size 16k;
        fastcgi_buffers 4 16k;
    }

    # deny access to .htaccess files
    location ~ /.ht {
       deny  all;
    }
}

server {
    listen 80;
    server_name specific.domain.com;

    root /var/www/html/app2;

    index index.html index.htm;

    charset utf-8;

    location / {
      try_files $uri $uri/ /index.html$is_args$args;
    }
}

Advertisement

Answer

Just solved this problem to add more 1 server block and take specific.domain.com first then *.domain.com. And I leave the default server block blank

Here is my code example

server {
    listen 80 default_server;

    server_name *.domain.com;
    root /var/www/html;
}

server {
    listen 80;

    server_name specific.domain.com;
    root /var/www/html/app2;
}

server {
    listen 80;

    server_name *.domain.com;
    root /var/www/html/app2;
}

User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement