Auth and PHP

Hello,

I am having a hard time trying to password protect a directory
containing
PHP files.
Whenever I access www.domain.com/forums/admin/ I get a 404 error.
I have tried setting a fastcgi_param SCRIPT_FILENAME in my forums/admin
location section and that doesn’t work either. I have also been moving
around
location sections incase there was a correct processing order that I
was missing out on but I couldn’t get it to change anything.

Any help would be greatly appreciated.

This is my domain.conf

server {
listen 192.168.30.10;
server_name www.domain.com;
access_log /var/log/nginx/domain.com.access.log main;
root /home/user/public_html;
index index.php index.html index.htm;
include /usr/local/nginx/fastcgi_params;

    location / {
    }

    location ^~ /forums/admin {
            auth_basic            "Authorization Required";
            auth_basic_user_file 

/home/user/not_web_accessible/.htpasswd;
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_intercept_errors on;
}
}

    location ~ \.php$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_intercept_errors  on;
            fastcgi_param  SCRIPT_FILENAME

/home/user/public_html$fastcgi_script_name;
}
}

If it helps, here’s a section of my config that is working for auth on
one directory only,
server {
server_name blah;
root /var/www/mysite;
…some rewrites not relevant…
location ~ .php$ { fastcgi_pass 127.0.0.1:9000; include
fastcgi_params; }
location ~ ^/free/admin {
auth_basic “Restricted”;
auth_basic_user_file /var/www/mysite/free/admin/.htpasswd;
}
}

Example here of a password protected dir that processes PHP:

http://michaelshadle.com/2008/08/17/nginx-wordpress-redux/

Note that the issue is probably due to the order of location {} blocks
and such. That’s what got me. Also how you set them up (with the
appropriate ^~ and ~ and stuff)

As always, I also give my two cents about ways to make the config file
cleaner:

These three things can be set globally on the http {} level:

fastcgi_index index.php;
fastcgi_intercept_errors on;
fastcgi_param SCRIPT_FILENAME
/home/user/public_html$fastcgi_script_name;

Remember for SCRIPT_FILENAME you can use this and simplify your life
(unless for some reason you have to hardcode it)

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

The only thing you need per server {} or location {} is:

location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
}

No need to define anything special or use include ‘fastcgi_params’ for
each location. It can all be done globally (just being anal retentive)