Location expression - PHP treated as binary file

Hi,

Having following configuration, PHP files, if requested from /junk or
/pub
locations, are treated as binary. Sample request - domain.com/pub/i.php

file is downloaded to PC instead of executing.

Have no problems serving PHP files from other locations. Having separate
locations for /pub /junk with autoindex also works, however my intention
is
to combine them in one expression.

upstream www-default {
server unix:/dev/shm/www-default.sock;
}

server {
listen 80;
server_name _;
index index.php index.html;
fastcgi_index index.php;
root /data/www/default/htdocs;
charset utf-8;
access_log /data/www/default/logs/frontend/access.log;
error_log /data/www/default/logs/frontend/error.log;
client_max_body_size 8m;

    location ~* \.(jpg|jpeg|gif|css|png|js|swf|ico)$ {
        expires max;
    }

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

    location ~ (/\.svn|/\.ht) {
        deny all;
    }

    location ~* ^/(pub/|junk/) {
        autoindex on;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_pass www-default;
        fastcgi_param SCRIPT_FILENAME

$document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
include /etc/nginx/fastcgi_params;
}
}

Posted at Nginx Forum:

On Tue, Sep 25, 2012 at 10:04 AM, technoplague [email protected]
wrote:

Hi,

Having following configuration, PHP files, if requested from /junk or /pub
locations, are treated as binary. Sample request - domain.com/pub/i.php
file is downloaded to PC instead of executing.

Have no problems serving PHP files from other locations. Having separate
locations for /pub /junk with autoindex also works, however my intention is
to combine them in one expression.

That’s because when both locations are regexp, the first match is used
while when it’s regexp and normal, regexp is used. Try moving the php
block to the top.

Check this reference: http://wiki.nginx.org/HttpCoreModule#location

(it would be nice if the order list is also copied to official docs.
The current one which describes it in prose form is harder to read)

Thanks! This seemed to do the trick

Posted at Nginx Forum: