Welcome! Log In Create A New Profile

Advanced

try_files acting weird, maybe affected by IF ?

June 16, 2012 12:08PM
Hi,
I've been trying to force nginx to dynamically handle hosts. This is my configuration file

server {
listen 127.0.0.1:80;
server_name ~^(:?(?<second>.+)\.)?(?<domain>[^.]+\.[^.]+)$;
index index.php index.html;

location / {
set $try_dir $domain;
if (-d /var/www/hosts/$second.$domain) {
set $try_dir $second.$domain;
}

root /var/www/hosts/$try_dir;
try_files $uri $uri/ /index.php;
}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
set $try_dir $domain;
if (-d /var/www/hosts/$second.$domain) {
set $try_dir $second.$domain;
}

root /var/www/hosts/$try_dir;
include fastcgi_params;
fastcgi_param SERVER_NAME $try_dir;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;

fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

try_files $uri =404;
}
}


It receives request, checks if exists corresponding subdirectory, if not, passes to "main" directory.
I know I shouldn't be using the IF statement, but I've tried many, but havent figured this out without the if.

So let's have a request

$ curl http://hosiplan.l/rewrite

The directory /var/www/hosts/hosiplan.l exists, there is index.php file and no "rewrite" file. This should be handled by the index.php

...
[debug]: *1 using configuration "/"
...
[debug]: *1 http script file op 0000000000000002 "/var/www/hosts/.hosiplan.l"
[debug]: *1 http script file op false
[debug]: *1 http script if
[debug]: *1 http script if: false
...
[debug]: *1 try files phase: 11
...
[debug]: *1 try to use file: "/rewrite" "/var/www/hosts/hohosiplan.l/rewrite"
...
[debug]: *1 try to use dir: "/rewrite" "/var/www/hosts/hohosiplan.l/rewrite"
...
[debug]: *1 try to use file: "/index.php" "/var/www/hosts/hohosiplan.l/index.php"
[debug]: *1 internal redirect: "/index.php?"
...

This works like a charm. Pure perfection. But when I use a subdomain

$ curl http://blaphp.hosiplan.l/rewrite

The directory /var/www/hosts/blaphp.hosiplan.l exists, there is index.php file and no "rewrite" file. This should be handled by the index.php

...
[debug]: *3 using configuration "/"
...
[debug]: *3 http script file op 0000000000000002 "/var/www/hosts/blaphp.hosiplan.l"
[debug]: *3 http script if
...
[debug]: *3 try files phase: 11
...
[debug]: *3 http filename: "/var/www/hosts/blaphp.hosiplan.l/rewrite"
2012/06/16 17:05:45 [error] 2604#0: *3 open() "/var/www/hosts/blaphp.hosiplan.l/rewrite" failed (2: No such file or directory), client: 127.0.0.1, server: ~^(:?(?<second>.+)\.)?(?<domain>[^.]+\.[^.]+)$, request: "GET /rewrite HTTP/1.1", host: "blaphp.hosiplan.l"

And that's where I'm stuck. Any kind of input would be really appreciated.
Subject Author Posted

try_files acting weird, maybe affected by IF ?

HosipLan June 16, 2012 12:08PM

Re: try_files acting weird, maybe affected by IF ?

Maxim Dounin June 16, 2012 05:58PM

Re: try_files acting weird, maybe affected by IF ?

HosipLan June 17, 2012 04:46AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 312
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready