Конфигурация nginx 0.7+

Пример конфигурационного файла для одного виртуального сервера:

server {
# слушаем порт 80
  listen 80;

# перечисляем через пробел имена этого сервера
  server_name core.freewheel.ru;

# путь к корню сервера
  root /my/path/to/core.freewheel.ru;

# пути к логам
  access_log /my/path/to/core-access.log combined;
  error_log /my/path/to/core-access.log info;

# подключаем шаблон настроек сервера, в нем самое интересное
  include _servers_template;

# разрешаем себе посмотреть статус сервера
  location = /nginx_status {
        stub_status on;
        access_log  off;
        allow 127.0.0.1;
        deny all;
  }

# включаем сжатие для тех браузеров, которые его понимают
  gzip on;

# определяем минимальную версию протокола HTTP, для которой отдаем архивы
  gzip_http_version 1.0;

# устанавливаем максимальный уровень сжатия
  gzip_comp_level 9;

# разрешаем проксировать сжатые файлы
  gzip_proxied any;

# и определяем типы файлов (все, которые хорошо сжимаются)
  gzip_types   text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript image/x-icon;
}

А теперь собственно основной файл настроек (_servers_template), использующийся для всех виртуальных серверов в неизменном виде:

index index.php index.html;

location / {

# стили, скрипты и XML>-файлы
  location ~* ^.+\.(css|js|xml)$ {

# вот для этого и делались заранее архивированные .gz версии
# css и js файлов. Nginx не будет тратить время и сжимать их каждый раз
# заново, а просто отдаст уже готовые архивы, если браузер клиента может
# их принять
        gzip_static on;
        expires   1y;
  }

# несуществующие файлы html и папки отправляем на бэкенд
  if (!-e $request_filename ) {
        rewrite ^/(.*)$ /index.php ;
  }

# проксируем все запросы к PHP-файлам на FCGI бэкенд
  location ~* \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include    _fastcgi_params;
  }

# картинки
  location ~* ^.+\.(bmp|gif|jpg|jpeg|ico|png|swf|tiff)$ {
        expires   1y;
  }

# файлы
  location ~* ^.+\.(bz2|dmg|gz|gzip|rar|tar|zip)$ {
        expires 1y;
  }

# другие статические файлы
  location ~* ^.+\.(pdf|txt)$ {
        expires 1y;
  }
}

Обычно nginx собирается без модуля статического сжатия, поэтому при его сборке надо указать опцию --with-http_gzip_static_module — без этого gzip_static не заработает, и серверу придется сжимать файлы каждый раз заново. Также надо иметь в виду, что указанная конфигурация приведена для версии 0.7+.