Tips / Nginx

Magento Nginx Configuration

Magento is an open-source platform that allows anyone to build an online, flexible and fully working eCommerce store. It has an intuitive administration interface, powerful addons/plugins and it’s search engine friendly. What else do you need to have the perfect e-commerce solution? Nginx. Nginx Magento configuration it’s pretty easy and quick to test.

I’ll assume you have Nginx and php-fpm configured to work with sockets, otherwise, you should need to change fastcgi_pass_unix to, that is the default port and interface php-fpm listen to. You may need to change with your own domain name and root directory to the real directory of your website.

server {
    listen   80;
    root   /var/www/;

    location / {
        index index.html index.php; 

## If missing pass the URI to Magento's front handler
        try_files $uri $uri/ @handler; 
        expires max; ## Enable max file cache

## These locations need to be denied
    location ^~ /app/                { deny all; }
    location ^~ /includes/           { deny all; }
    location ^~ /lib/                { deny all; }
    location ^~ /media/downloadable/ { deny all; }
    location ^~ /pkginfo/            { deny all; }
    location ^~ /report/config.xml   { deny all; }
    location ^~ /var/                { deny all; }

## Allow admins only to view export directory
## Set up the password for any username using this command:
## htpasswd -c /etc/nginx/htpasswd magentoadmin

    location /var/export/ { 
        auth_basic           "Restricted";
        auth_basic_user_file htpasswd; ## Defined at /etc/nginx/htpassword
        autoindex            on;

## Disable .htaccess and other hidden files
    location  /. { 
        return 404;

## Magento uses a common front handler 
    location @handler { 
        rewrite / /index.php;

## Forward paths like /js/index.php/x.js to relevant handler
    location ~ .php/ { 
        rewrite ^(.*.php)/ $1 last;

## php-fpm parsing
location ~ .php$ { 

## Catch 404s that try_files miss
        if (!-e $request_filename) { rewrite / /index.php last; } 

## Disable cache for php files
        expires        off;

## php-fpm configuration
        fastcgi_pass   unix:/tmp/php5-fpm.sock;
        fastcgi_param  HTTPS $fastcgi_https;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;

## Store code is located at Administration > Configuration > Manage Stores in your Magento Installation.
        fastcgi_param  MAGE_RUN_CODE default; 
        fastcgi_param  MAGE_RUN_TYPE store;

## Tweak fastcgi buffers, just in case.
fastcgi_buffer_size 128k;
fastcgi_buffers 256 4k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;

Remember to change and the document root path for your real ones.
Once done, reload nginx to apply the changes:

service nginx reload


If you are going to use Fooman Speedster you will need to add the following extra code to the server block.

rewrite ^/minify/([0-9]+)(/.*.(js|css))$ /lib/minify/m.php?f=$2&d=$1 last;
rewrite ^/skin/m/([0-9]+)(/.*.(js|css))$ /lib/minify/m.php?f=$2&d=$1 last;

location /lib/minify/ {
allow all;

Popular search terms:

  • enable keep alive nginx magento
  • magento configuration file
  • magento nginx php expires off
  • magento nginx rewrite rules

Esteban Borges

Linux Geek, Webperf Addict, Nginx Fan. CTO @Infranetworking