I'm in the process of moving a wiki I administer (practicalplants.org) to a new server running Nginx. I'm accustomed to Apache; this is my first time working with Nginx and I'm having trouble adapting the rewrites and aliases I had set up in Apache. The directory layout is as follows

/html               (server root)
    /html/w         (mediawiki)
    /html/community (vanilla)
    /html/blog      (wordpress)
/sso                (Zend Framework SSO solution)

As you can see, the sso solution has it's own publicly accessible application root directory, which I'm attempting to set as the root for the location directive, but it seems like the following try_files still attempts to fall back to the server root.

Here's my config:

server {
  server_name practicalplants.org;

  root /var/www/v-practicalplants/html;
  access_log /var/log/nginx/practicalplants.org-access.log;
  error_log /var/log/nginx/practicalplants.org-error.log;

  include /etc/nginx/biowikifarm_listen80_443.conf;
  include /etc/nginx/biowikifarm_generics.conf;
  include /etc/nginx/biowikifarm_generic_php.conf;

  disable_symlinks off;

  location = / {
    # Redirect domain-only access to wiki:
    rewrite "^[/]?$" /wiki/ permanent;

  location /wiki {
    #rewrite "^/wiki[/]?([^?]*)(?:\?(.*))?" /w/index.php?title=$1&$args last;
    try_files $uri $uri/ /w/index.php?title=$uri&$args;
  location /w/media {
    location ~ ^/w/media/thumb/(archive/)?[0-9a-f]/[0-9a-f][0-9a-f]/([^/]+)/([0-9]+)px-.*$ {
      try_files $uri @thumb_w;
  location @thumb_w {
    rewrite ^/w/media/thumb/[0-9a-f]/[0-9a-f][0-9a-f]/([^/]+)/([0-9]+)px-.*$ /w/thumb.php?f=$1&width=$2;
    rewrite ^/w/media/thumb/archive/[0-9a-f]/[0-9a-f][0-9a-f]/([^/]+)/([0-9]+)px-.*$ /w/thumb.php?f=$1&width=$2&archived=1;
    include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME  $document_root/w/thumb.php; fastcgi_pass php5-fpm-sock;

  location /sso {
    root /var/www/v-practicalplants/sso/public;
    try_files $uri $uri/ /index.php

This config gives me a 404 if I navigate to /sso

Is there something obviously wrong here?


You need to use alias instead of root here.

Your existing configuration tries to load /var/www/v-practicalplants/sso/public/sso/index.php, which is probably not what you want. Regardless of which location it's in, root always specifies the document root, i.e. the location of /.

Use alias instead to specify the location of the location.

location /sso/ {
    alias /var/www/v-practicalplants/sso/public;

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.