From Apache to Nginx+php-fpm : How to port configuration?

Greetings all.

I successfully installed nginx + php-fpm. I already read numerous
tutorials and exemples out there on the web, and I would need some
additional insights on how to port the various configuration options I
had via .htaccess under Apache.

For instance, CSS files needs to be processed by PHP.
Under Apache, I simply put this in the .htaccess :

SetHandler application/x-httpd-php

  1. How can I achieve this under Nginx with php-fpm ?
  2. Any way to specify per server PHP configs à -la Apache (ex : php_value
    memory_limit 64M) ?
  3. Weird behavior : if I try to access a PHP file (ex :
    http://www.mydomain.com/somefile.php), I get a download prompt.

Here is the server configuration for mydomain.
Any tweaks and advices would be appreciated.

    server
    {
            listen          :80 default;
            server_name     mydomain.com www.mydomain.com;
            expires         0;

            access_log      access.log;
            error_log       error.log;

            # Redirect from non-www to www
            if ($host = 'mydomain.com')
            {
                    rewrite  ^/(.*)$  http://www.mydomain.com/$1 

permanent;
}

            # Simple static content delivery system (versionning 

only)
location ~*
“^(+)-[0-9]{10}.(js|gif|jpg|jp?g|png|css|swf)$”
{
rewrite
“(.*)/(+)-[0-9]{10}.(js|gif|jp?g|png|css|swf)$” $1/$2.$3 last;
return 403;
}

            location /
            {

                    # set document root and index file
                    root     ;
                    index   index.php index.html index.htm;

                    # if file exists, set expire and return it
                    if (-f $request_filename)
                    {
                            expires 1y;
                            break;
                    }

                    # if directory exists return it right away
                    if (-d $request_filename)
                    {
                            break;
                    }

                    # rewrite everyting else to index.php
                    if (!-e $request_filename)
                    {
                            rewrite  ^  /index.php  last;
                            break;
                    }

            }
            # if the request starts with our frontcontroller, pass 

it on to fastcgi
location ~ ^/index.php
{

                    # set document root
                    root            ;

                    # fastcgi setup
                    fastcgi_pass    127.0.0.1:9000;
                    fastcgi_index   index.php;
                    fastcgi_param   SCRIPT_FILENAME 

$document_root$fastcgi_script_name;

                    fastcgi_param   QUERY_STRING 

$query_string;
fastcgi_param REQUEST_METHOD
$request_method;
fastcgi_param CONTENT_TYPE
$content_type;
fastcgi_param CONTENT_LENGTH
$content_length;

                    fastcgi_param   SCRIPT_NAME 

$fastcgi_script_name;
fastcgi_param REQUEST_URI
$request_uri;
fastcgi_param DOCUMENT_URI
$document_uri;
fastcgi_param DOCUMENT_ROOT
$document_root;
fastcgi_param SERVER_PROTOCOL
$server_protocol;

                    fastcgi_param   GATEWAY_INTERFACE       CGI/1.1;
                    fastcgi_param   SERVER_SOFTWARE 

nginx/$nginx_version;

                    fastcgi_param   REMOTE_ADDR 

$remote_addr;
fastcgi_param REMOTE_PORT
$remote_port;
fastcgi_param SERVER_ADDR
$server_addr;
fastcgi_param SERVER_PORT
$server_port;
fastcgi_param SERVER_NAME
$server_name;

                    # PHP only, required if PHP was built with 

–enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;

            }

            # Prevent files beginning with . from being viewed
            location ~ /\.
            {
                    deny  all;
            }

    }

Posted at Nginx Forum:

Found the solution.
Hope this helps someone else.

            [...]

            # Handle PHP scripts via fastcgi
            location ~ ^.+\.php$
            {
                    # set document root
                    root           ;

                    # test for file existence
                    # fallback to bootstrap to display 404
                    try_files $uri /index.php?$args;

                    # fastcgi setup
                    fastcgi_pass    127.0.0.1:9000;
                    # fastcgi_index index.php;
                    fastcgi_param   SCRIPT_FILENAME 

$document_root$fastcgi_script_name;

                    # include common fastcgi params
                    include /etc/nginx/fastcgi_params;
            }

            [...]

Posted at Nginx Forum: