Zend Framework on nginx
server { listen 80; ## listen for ipv4 listen [::]:80 default ipv6only=on; ## listen for ipv6 server_name localhost; access_log /var/log/nginx/localhost.access.log; error_log /var/log/nginx/localhost.error.log; root /var/www/localhost/public; try_files $uri @php_index; # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location @php_index { fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME /var/www/localhost/index.php; include fastcgi_params; }}
It's recommended to use try_files when ever possible.
I know it's a pretty old thread but it might help some people anyway.
Basically it redirects any 404 error to index.php, but if the file exists (type file) it will set the right root.
I did it from the top of my head. It might not be working right away, and you have to put the right path and fastcgi config. I also put everything back to index.php as it should work like that with Zend_Framework
error_page 404 = /index.php;location / { if (-f $request_filename) { root /var/www; }}location ~ \.php$ { fastcgi_pass unix:/tmp/php.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/index.php; include /etc/nginx/fastcgi_params;}
I don't know of any automatic/systematic way to convert the htaccess-file, you'll probably have to do it manually. The Nginx wiki is the best resource for nginx documentation.
Edit:I'm running Zend Framework on Nginx myself now and the config looks like this:
server { listen 80; server_name servername.com; root /var/www/zendapp/public; location / { index index.php; } # Deny access to sensitive files. location ~ (\.inc\.php|\.tpl|\.sql|\.tpl\.php|\.db)$ { deny all; } location ~ \.htaccess { deny all; } # Rewrite rule adapted from zendapp/public/.htaccess if (!-e $request_filename) { rewrite ^.*$ /index.php last; } # PHP scripts will be forwarded to fastcgi processess. # Remember that the `fastcgi_pass` directive must specify the same # port on which `spawn-fcgi` runs. location ~ \.php$ { include /etc/nginx/fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; } location = /50x.html { root /var/www/default; }}
As you can see, the rewrite rule itself is very simple.