Пример конфигурационного файла для одного виртуального сервера:
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+.