PHP via FastCGI in / and sub-directory location w/ different roots

Thilo-Alexander Ginkel thilo at ginkel.com
Thu Nov 7 10:37:22 UTC 2013


Hi there,

I am currently somewhat stuck getting the following setup up and running:

I have one PHP web application residing in /usr/share/a that I'd like to
have available at /. This works as expected.

I have a second PHP web app residing in /var/www/b/public, that I'd like to
have available at /b.

My current ngnix (1.2.1) configuration looks like this:

-- 8< --
server {
  listen       *:443 ssl;
  listen [::]:443 ;

  [...]

  root /usr/share/a;
  index  index.php;

  location ~ ^/b/.*\.php$ {
    rewrite         ^/b(/.*) $1 break;
    root  /var/www/b/public;
    include /etc/nginx/fastcgi_params;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
  }

  location ~ \.php$ {
    include /etc/nginx/fastcgi_params;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
  }

  location ~ ^/b/ {
    root  /var/www/b/public;
    index  index.php;
  }
}
-- 8< --

/etc/nginx/fastcgi_params:
-- 8< --
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_FILENAME   $request_filename;
fastcgi_param   SCRIPT_NAME                 $fastcgi_script_name;
fastcgi_param   REQUEST_URI                 $uri?$args;
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;

fastcgi_param   HTTPS                           $https;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param   REDIRECT_STATUS         200;
-- 8< --

I included the rewrite in location ~ ^/b/.*\.php$ because otherwise
nginx/php-fpm will look for the script /b/index.php in
/var/www/b/public/b/index.php, which has an extra "b/" in the path.

With the rewrite enabled, however, the PHP application guesses its own path
incorrectly issuing redirects to locations that leave out "/b'.

I would like to avoid symlinking /var/www/b into /usr/share/a.

Any ideas?

Thanks,
Thilo
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx/attachments/20131107/df73b861/attachment.html>


More information about the nginx mailing list