Мар 02 2013

NginX and Raspberry Pi Пока я между командировками и насыщенной работой писал так и не размещённый пост о практическом опыте перехода с Apache на NginX, ко мне приехал заказанный в середине прошлого года RaspberryPi. Разумеется, мне стало интересно развернуть NginX на нём, а не системнике.

По установке debian`а на этот девайс написано много и подробно, поэтому этот вопрос рассматривать не будем, и предположим, что на устройстве у нас уже есть развернутый и обновлённый Debian Wheezy.

Для начала входим в режим рута, набрав в консоли

sudo su

К сожалению, в настоящее время ещё нет репозитория NginX для Debian Wheezy, только для squeeze, поэтому свежей версии 1.3.13 мы не увидим, зато не будем заниматься правкой файла /etc/apt/sources.list и получением GPG-ключа, а просто поставим имеющийся в стандартном репозитории (archive.raspbian.org) NginX версии 1.2.1 и все необходимые зависимости командой:

apt-get update && apt-get install nginx php5-fpm php5-cgi php5-cli php5-common php5-mysql php5-gd php-pear php5-mcrypt mc


Теперь создадим пользователя веб-сервера и необходимые директории:

useradd www-data
groupadd www-data
usermod -g www-data www-data
mkdir /var/www
chmod -R 775 /var/www
chown -R www-data: /var/www

Теперь в любом любимом редакторе открываем файл /etc/nginx/sites-enabled/default и пишем что-то типа:

server {
listen 80; ## listen for ipv4; this line is default and implied
root /var/www;
index index.php index.htm;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}

Устраняем известную уязвимость связки PHP — Nginx:

Открываем файл /etc/php5/fpm/php.ini

Находим строку:

;cgi.fix_pathinfo = 1

и меняем её на:

cgi.fix_pathinfo = 0

Заодно там же устанавливаем кодировку и часовой пояс. Для Москвы и городов в её часовом поясе это выглядит так:

default_charset = "utf-8"
date.timezone = Europe/Moscow

Открываем конфиг nginx (/etc/nginx/nginx.conf) и правим:


user  www-data;
worker_processes  1; #устанавливается исходя из количества ядер

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    gzip                on; 
    gzip_proxied        any;
    gzip_min_length     1100;
    gzip_http_version   1.0;
    gzip_buffers        4 8k;
    gzip_comp_level     4; # Оптимальная степень сжатия
    gzip_types          text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    include /etc/nginx/conf.d/*.conf; # Стандартное расположение конфигов
    include /etc/nginx/sites-enabled/*; # Apache-подобное расположение
}

Обратите внимание, что в нашем случае мы можем размещать конфиги как в папке /etc/nginx/sites-available/, создавая на них симлинки в директорию /etc/nginx/sites-enabled/, так и в /etc/nginx/conf.d/, причём без создания симлинков, но с обязательным добавлением .conf в конце файла. На самом деле, и от этого условия мы можем избавиться, если напишем в конфигурационном файле выше «include /etc/nginx/conf.d/*;«.

Открываем конфиг FPM (mcedit /etc/php5/fpm/pool.d/www.conf) и пишем туда что-то типа:


[www]
user = www-data
group = www-data
listen = /var/run/php5-fpm.sock
pm = dynamic
pm.max_children = 4
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 2
pm.max_requests = 500
chdir = /

Перезапускаем PHP-FPM и nginx и радуемся

/etc/init.d/php5-fpm restart
service nginx restart

Сервер установлен и готов к работе. Теперь на него можно установить ProFTPd, MySQL, memcached и настроить виртуальные хосты, но про это как-нибудь в другой раз.

Автор: Johnny Тэги: , , , , ,

Блог саратовского админа

При использовании материалов сайта на других ресурсах прошу оставлять прямую ссылку на оригинал статьи.