Friday 06 May 2011 9:45:55 am
Now we need to configure Nginx to run with PHP over FastCGI.
Update the files listed below. You need to substitute local variables where noted.
In /etc/nginx/nginx.conf:
user www-data; worker_processes 4; pid /var/run/nginx.pid; events { worker_connections 2048; # multi_accept on; } http { ## # Basic Settings ## sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; server_tokens off; include /etc/nginx/mime.types; default_type application/octet-stream; ## # Logging Settings ## access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; ## # Gzip Settings ## gzip on; gzip_vary on; gzip_disable "msie6"; gzip_proxied any; gzip_comp_level 5; gzip_buffers 32 8k; gzip_http_version 1.1; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; ## # Virtual Host Configs ## include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }
In /etc/nginx/fastcgi_params:
fastcgi_connect_timeout 60; fastcgi_send_timeout 180; fastcgi_read_timeout 180; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on;
The above are standard settings to prevent PHP-FPM from choking, and you may want to experiment with tuning these to your particular environment. They serve as a good starting point for most installations.
In /etc/nginx/sites-available/default:
server { server_name YOUR.INTERNET.HOSTNAME; root YOUR_EZPUBLISH_ROOT; index index.php; location / { rewrite "^/var/storage/(.*)$" "/var/storage/$1" break; rewrite "^/var/([^/]+)/storage/(.*)$" "/var/$1/storage/$2" break; rewrite "^/var/(([^/]+/)?)cache/(texttoimage|public)/(.*)$" "/var/$1cache/$3/$4" 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|lib?)/(.*)$" "/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/$1cache/public/$3" break; rewrite "^/var/([^/]+)/cache/debug\.html(.*)$" "/var/$1/cache/debug.html$2" break; rewrite "content/treemenu/?$" "/index_treemenu.php" break; rewrite "ezjscore/call/?$" "/index_ajax.php" break; rewrite "^(.*)$" "/index.php?$1" last; } location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|swf|flv|eot|ttf|woff|svg)$ { access_log off; expires 30d; } location ~ "^/[^/]*\.php$" { set $script "index.php"; if ( $uri ~ "^/(.*\.php)" ) { set $script $1; } fastcgi_pass unix:/tmp/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$script; include fastcgi_params; } }
Replace YOUR.INTERNET.HOSTNAME and YOUR_EZPUBLISH_ROOT as necessary.
You can also enter these settings in a file with any name in /etc/nginx/sites-available and create a symlink to it in /etc/nginx/sites-enabled if you want to run multiple vhosts. The principles are the same as under Apache 2.
Special thanks to Boris Huisgen for providing the basic rewrite rules for eZ Publish under Nginx.