J’ai réussi à faire fonctionner le CMS ezPublish sous Nginx. Rien de particulier au niveau des règles de réécriture, hormis la distinction de Nginx entre break et last, qui dans le premier cas empêche l’exécution de l’interpréteur PHP-CGI. Ma configuration permet d’exécuter tous les scripts PHP existants à la racine. Dans le cas d’un fichier inexistant, la page d’erreur 404 ezPublish est affichée.

N’oubliez pas de fixer l’option ForceVirtualHost à true dans votre fichier site.ini pour bénéficier de la réécriture simplifiée des URL.

server {
   listen 80;
   server_name  ezpublish.bhuisgen.my.domain;
   root /Users/bhuisgen/Sites/ezpublish/www/html;
   index index.php;

   if (!-f $request_filename) {
       rewrite ^(.*)$ /404;
   }

   location ~ "^/[^/]*\.php$" {
      set $script "index.php";

      if ( $uri ~ "^/(.*\.php)" ) {
         set $script $1;
      }

      fastcgi_pass   unix:/opt/local/var/run/nginx/fcgi-php.sock;
      fastcgi_index  index.php;
      fastcgi_param  SCRIPT_FILENAME /Users/bhuisgen/Sites/ezpublish/www/html/$script;
      include        fastcgi_params;
   }

   location / {
      rewrite "^/var/storage/(.*)$" "/var/storage/$1" break;
      rewrite "^/var/([^/]+)/storage/(.*)$" "/var/$1/storage/$2" break;
      rewrite "^/var/cache/texttoimage/(.*)$" "/var/cache/texttoimage/$1" break;
      rewrite "^/var/([^/]+)/cache/texttoimage/(.*)$" "/var/$1/cache/texttoimage/$2" break;
      rewrite "^/design/([^/]+)/(stylesheets|images|javascript)/(.*)$" "/design/$1/$2/$3" break;
      rewrite "^/share/icons/(.*)$" "/share/icons/$1" break;
      rewrite "^/extension/([^/]+)/design/([^/]+)/(stylesheets|images|javascripts|javascript|flash?)/(.*)$" "/extension/$1/design/$2/$3/$4" break;
      rewrite "^/packages/styles/(.+)/(stylesheets|images|javascript)/([^/]+)/(.*)$" "/packages/styles/$1/$2/$3/$4" break;
      rewrite "^/packages/styles/(.+)/thumbnail/(.*)$" "/packages/styles/$1/thumbnail/$2" break;
      rewrite "^/favicon\.ico$" "/favicon.ico" break;
      rewrite "^/robots\.txt$" "/robots.txt" break;
      rewrite "^/var/cache/debug.html(.*)$" "/var/cache/debug.html$1" break;
      rewrite "^/var/([^/]+)/cache/public/(.*)$" "/var/$1/cache/public/$2" break;
      rewrite "^/var/([^/]+)/cache/debug\.html(.*)$" "/var/$1/cache/debug.html$2" break;
      rewrite "^/crossdomain\.xml$"  "/crossdomain.xml" break;
      rewrite "^/content/treemenu/?$" "/index_treemenu.php" last;
      rewrite "^(.*)$" "/index.php?$1" last;
   }
}