вівторок, 12 серпня 2014 р.

Nginx і PHP-FPM у VirtualBox: архівна конфігурація вебсервера

Для переносного середовища розробки я розгортав вебсервер у віртуальній машині VirtualBox з Ubuntu. У нотатці використано старі пакунки PHP 5 та відповідні шляхи конфігурації.

Це історія тієї інсталяції. Для нового сервера потрібні підтримувані версії та актуальні пакунки. Ліцензійні умови VirtualBox і його додаткових компонентів слід перевіряти окремо: загальне твердження про безкоштовність усього набору було надто широким.

Офіційні джерела: VirtualBox та Ubuntu.

Початкове встановлення Nginx і PHP

apt-get install nginx
apt-get install php5-cli php5-common php5-mysql php5-gd php5-fpm php5-cgi \
  php5-fpm php-pear php5-mcrypt

У файлі /etc/php5/fpm/php.ini було задано:

cgi.fix_pathinfo = 0

У /etc/php5/fpm/pool.d/www.conf налаштовувалися розширення й Unix-сокет:

security.limit_extensions = .php .php3 .php4 .php5
listen = /var/run/php5-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
service php5-fpm restart

Рядок service php5-fpm restart у наведеному фрагменті — команда для термінала після збереження налаштувань, а не директива файлу www.conf.

Широкий перелік розширень збережено як частину старого прикладу. Документація PHP-FPM рекомендує обмежувати виконання потрібними PHP-розширеннями для зменшення ризику помилок конфігурації. Доступ до сокета також має відповідати фактичному користувачеві вебсервера.

Допоміжні засоби та DNS

У старій нотатці була команда з зайвою комою:

apt-get install mc, htop

Імена пакунків відокремлюються пробілами, тому відповідний варіант:

apt-get install mc htop
apt-get install bind9
apt-get install whois

mc — файловий менеджер; htop показує процеси й навантаження; whois використовується для запитів відомостей про домени. bind9 додавався для власного DNS-сервера, а не як обов'язкова частина кожного вебсервера. Збережені діагностичні шаблони:

dig название домена
nslookup название домена

Замість слів «название домена» потрібно вказати реальне доменне ім'я.

Apache, PHP-модулі та база даних

У моєму середовищі також встановлювалися Apache та модулі:

apt-get install apache2
a2enmod ssl
a2enmod rewrite
a2enmod suexec
a2enmod include
apt-get install libapache2-mod-php5
apt-get install php5-curl

Apache обрано для потреб конкретних сайтів. Саме використання rewrite не вимагає Apache: Nginx має власні механізми маршрутизації й переписування адрес.

Для передавання IP клієнта в тодішній схемі використовувався RPAF:

apt-get install libapache2-mod-rpaf
a2enmod rpaf

MySQL і Memcached встановлювалися такими командами:

apt-get install mysql-server mysql-client mysql-common
apt-get install memcached php5-memcached

Для роботи з сервером я використовував PuTTY як термінальний клієнт, а FileZilla — для передавання файлів. Передавання через SSH у FileZilla означає SFTP; FTP і SFTP — різні протоколи.

Збережений приклад Nginx перед Apache

server {
   listen *:80; 

   server_name НАЗВАНИЕ_ДОМЕНА;
   access_log /var/log/nginx/access.log;


   # Перенаправление на back-end
   location / {
   proxy_pass НАЗВАНИЕ_ДОМЕНА:8080/;
   proxy_set_header Host $host;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $remote_addr;
   proxy_connect_timeout 120;
   proxy_send_timeout 120;
   proxy_read_timeout 180;
   }


   # Статическиое наполнение отдает сам nginx
   # back-end этим заниматься не должен
   location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js|html|txt|exe|7z|rar|pdf)$ {
   root КОРНЕВОЙ_КАТАЛОГ;
  }

}

У цьому прикладі Nginx віддає статичні файли й передає інші запити backend на порт 8080. Значення-заповнювачі потрібно замінити; зокрема, proxy_pass потребує коректної адреси з протоколом. Це схема HTTP-проксіювання до Apache, яку слід відрізняти від прямого FastCGI-з'єднання Nginx із PHP-FPM.

Перевіряйте довірені проксі та обробку клієнтських заголовків. Синтаксис: офіційний модуль proxy Nginx.

Перегляд трафіку

apt-get install iptraf
iptraf
apt-get install darkstat

Початковий приклад /etc/darkstat/init.cfg:

# Turn this to yes when you have configured the options below.
START_DARKSTAT=yes

# Don't forget to read the man page.

# You must set this option, else darkstat may not listen to
# the interface you want
INTERFACE="-i eth0"

#DIR="/var/lib/darkstat"
PORT="-p 666"
#BINDIP="-b 127.0.0.1"
#LOCAL="-l 192.168.0.0/255.255.255.0"

# File will be relative to $DIR:
#DAYLOG="--daylog darkstat.log"

# Don't reverse resolve IPs to host names
#DNS="--no-dns"

#FILTER="not (src net 192.168.0 and dst net 192.168.0)"

# Additional command line Arguments:
# OPTIONS="--syslog --no-macs"

Запуск із тієї нотатки:

service darkstat start
http://ip-адрес_Вашего_сервера:666

Вебстатистика може розкривати відомості про мережу. Адресу прослуховування та доступ до неї потрібно обмежити відповідно до призначення сервера.

Немає коментарів:

Калькулятор K2: від запитання про ціну до готової комерційної пропозиції

«А скільки коштуватиме інша комплектація?» — природне запитання покупця. Якщо для відповіді менеджер щоразу відкриває таблицю, шукає коефіці...