Take the 2-minute tour ×
Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

I've just installed Nginx on my server and am extremely happy with the results, however I still cannot figure out how to insert wildcard virtual hosts.

This is the [directory] structure I'd like:

-- public_html (example.com)
---subdoamin 1 (x.example.com)
---subdomain 2 (y.example.com)

As you can see it's pretty basic, however, I'd like the ability to add domains by simply adding an A record for a new subdomain, which will instantly point to the subdirectory of the same name under public_html.

There's stuff on the web, however I haven't come across something exactly like this.

Any help would be greatly appreciated.

share|improve this question
    
I'm not sure what you mean by "subdirectory of the same name" when your example has two different names: subdomain 1 / x.example.com - can you clarify? –  nickgrim Mar 21 '11 at 18:04
    
True, not very clear sorry. Lets say I have subdomain x.example.com, it's directory would be /public_html/x, however I need both example.com and www.example.com to point to /public_html/ –  rorygilchrist Mar 21 '11 at 20:20

2 Answers 2

I shall show you.

The configuration file

server {
  server_name example.com www.example.com;
  root www/pub;
}

server {
  server_name ~^(.*)\.example\.com$ ;
  root www/pub/$1;
}

Test files

We have two test files:

$ cat www/pub/index.html 
COMMON

$ cat www/pub/t/index.html 
T

Testing

Static server names:

$ curl -i -H 'Host: example.com' http://localhost/
HTTP/1.1 200 OK
Server: nginx/0.8.54
Date: Wed, 23 Mar 2011 08:00:42 GMT
Content-Type: text/html
Content-Length: 7
Last-Modified: Wed, 23 Mar 2011 07:56:24 GMT
Connection: keep-alive
Accept-Ranges: bytes

COMMON

$ curl -i -H 'Host: www.example.com' http://localhost/
HTTP/1.1 200 OK
Server: nginx/0.8.54
Date: Wed, 23 Mar 2011 08:00:48 GMT
Content-Type: text/html
Content-Length: 7
Last-Modified: Wed, 23 Mar 2011 07:56:24 GMT
Connection: keep-alive
Accept-Ranges: bytes

COMMON

And regexp server name:

$ curl -i -H 'Host: t.example.com' http://localhost/
HTTP/1.1 200 OK
Server: nginx/0.8.54
Date: Wed, 23 Mar 2011 08:00:54 GMT
Content-Type: text/html
Content-Length: 2
Last-Modified: Wed, 23 Mar 2011 07:56:40 GMT
Connection: keep-alive
Accept-Ranges: bytes

T
share|improve this answer
    
Doesn't work unfortunately. All subdomains just point to public_html. Here is the second server config: server{ listen 80; server_name ~^(.*)\.example\.com$ ; location / { root /var/www/public_html/$1; index index.html index.htm index.php; } location ~ \.php$ { root $1; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/public_html/$1$fastcgi_script_name; include fastcgi_params; } } –  rorygilchrist Mar 22 '11 at 19:50
    
"doesn't work unfortunately" gives no details unfortunately. Always look into nginx error.log for details. I've updated my answer to show you how this config works. You can see my Nginx version is 0.8.54 –  Alexander Azarov Mar 23 '11 at 8:18

This is how I've handled Virtual Hosts with Nginx:

server_name ~^(?<vhost>.*)$;
root /srv/www/$vhost;
access_log /var/log/nginx/$vhost.access.log;

I'm not sure why Wildcard Subdomains in a Parent Folder is so wrong/misleading.

share|improve this answer
    
Posting just a link as an answer is discouraged as links change over time and renders the answer useless. Can you add some content to your answer? Highlights from the linked page, basic explanation, etc.? –  squillman Aug 22 '13 at 12:36

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.