Hello! VHost names with RegEx is an absolutely imazing feature of nginx. I llllllllllllllove it! :) But now I've got an issue with it. On my VM I have a VHost templates ax-common-vhost and use it for VHsots like project.area.loc, so the server_name rule is: server_name ~^(.*)\.(.*)\.loc$; It works fine and has already saved much time for me. But the default VHost seems to get a trouble with my template. When a site, that uses it, is active, the default VHost also is trieng to use the template. Example: /etc/nginx/sites-available: > default -- root /usr/share/nginx/html -- server_name localhost; > test.sandbox.loc -- include /etc/nginx/sites-available/ax-common-vhost; > ax-common-vhost -- server_name ~^(.*)\.(.*)\.loc$; -- if ($host ~ ^(.*)\.(.*)\.loc$) { set $project $1; set $area $2; set $folder "$area/$project"; set $domain "$project.$area.loc"; } -- root /var/www/$folder/; -- test.sandbox.loc (based on the ax-common-vhost) /etc/nginx/sites-enabled: > default > test.sandbox.loc By access to the server default VHost (over IP of the VM) an error occures: 2013/01/23 18:41:19 [error] 4051#0: *1 directory index of "/var/www//" is forbidden, client: 192.168.56.1, server: ~^(.*)\.(.*)\.loc$, request: "GET / HTTP/1.1", host: "192.168.56.101" When I change the server root rule in the template e.g. to /var/www/ and place a test file (index.html) into my webroot folder, it is displayed. That means: Nginx uses my template for the default host. But "192.168.56.101" cannot be mached to "^(.*)\.(.*)\.loc$"! Is it a bug? Posted at Nginx Forum: http://forum.nginx.org/read.php?2,235490,235490#msg-235490
on 2013-01-23 19:37
on 2013-01-23 20:17
On Wednesday 23 January 2013 22:37:08 automatix wrote: > It works fine and has already saved much time for me. But the default VHost > > > test.sandbox.loc > > -- include /etc/nginx/sites-available/ax-common-vhost; > > > ax-common-vhost > > -- server_name ~^(.*)\.(.*)\.loc$; > -- if ($host ~ ^(.*)\.(.*)\.loc$) { > set $project $1; > set $area $2; This is ugly equivalent to: server_name ~^(?<project>.+)\.(?<area>.+)\.loc$; > > set $folder "$area/$project"; > set $domain "$project.$area.loc"; And the $domain variable is effectively equal to $host. What's the point? > } > -- root /var/www/$folder/; root /var/www/$area/$project; > / HTTP/1.1", host: "192.168.56.101" > > When I change the server root rule in the template e.g. to /var/www/ and > place a test file (index.html) into my webroot folder, it is displayed. > > That means: Nginx uses my template for the default host. But > "192.168.56.101" cannot be mached to "^(.*)\.(.*)\.loc$"! Is it a bug? > Are you sure that your "default" is actually the default server configuration for the listening address:port? wbr, Valentin V. Bartenev -- http://nginx.com/support.html http://nginx.org/en/donation.html
on 2013-01-23 20:42
Thank you for your reply! > server_name ~^(?<project>.+)\.(?<area>.+)\.loc$; Yes, you are right, it's the better way to extract values from a RegEx into vars. > Are you sure that your "default" is actually the default server configuration for the listening address:port? No, I'm not. How can I check it? Ilya Posted at Nginx Forum: http://forum.nginx.org/read.php?2,235490,235497#msg-235497
on 2013-01-23 21:22
On Wednesday 23 January 2013 23:41:36 automatix wrote: > No, I'm not. How can I check it? > You should check the listen directive. Please see this article: http://nginx.org/en/docs/http/request_processing.html and also the documentation: http://nginx.org/r/listen wbr, Valentin V. Bartenev -- http://nginx.com/support.html http://nginx.org/en/donation.html
on 2013-01-23 21:54
Thank you very much for the usefull links and the tip. Yes, the vhost default was not default. Now I've set it to default explicitly with the flaf default_server and everything works fine! Thank you, Valentin! Since "default server is the first one" (http://nginx.org/en/docs/http/request_processing.html), the problem must have been, that the server couldn't find a vhost for the request and just took the first vhost. But what ist "the first" vhost, when all vhosts are stored in different files? In which order are the vhost files processed? Posted at Nginx Forum: http://forum.nginx.org/read.php?2,235490,235505#msg-235505
on 2013-01-23 23:31
On Thursday 24 January 2013 00:54:22 automatix wrote: > stored in different files? > > In which order are the vhost files processed? > Actually there is no such thing like "the vhost files" in nginx. You probably mean those files included from nginx.conf by the "include" directive (see: http://nginx.org/r/include ). Before nginx 1.3.10 the order was arbitrary. Since version 1.3.10 they sorted alphabetically on unix systems. Please note, such directories like "sites-enabled" and "sites-available" are not something common for nginx. In fact, they created by nginx package on some linux systems because the maintainers of these packages find it convenient. wbr, Valentin V. Bartenev -- http://nginx.com/support.html http://nginx.org/en/donation.html
on 2013-01-24 00:06
> such directories like "sites-enabled" and > "sites-available" are not something common for nginx. > In fact, they created by nginx package on some linux systems > because the maintainers of these packages find it convenient. Good to know, thanks for the info! > Actually there is no such thing like "the vhost files" in nginx. > You probably mean those files included from nginx.conf by the > "include" directive (see: http://nginx.org/r/include ). I mean the files in "sites-available". I know, that they are just included (over the links in "sites-enabled") to the nginx.conf, but I find it clearer and better maintainable to use one file for each vhost. OK, now everything is clear. Thanks a lot for your help! :) Posted at Nginx Forum: http://forum.nginx.org/read.php?2,235490,235514#msg-235514
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.