Debian Jessie: Настройка WEB сервера (Apache2/Nginx/PHP-FPM)

Это статья из цикла стетей моего небольшого HowTo по Debian Jessie.

Чуть раньше я коротенько описал процесс установки и базовой настройки всех необходимых компонентов для WEB сервера:
Debian Jessie: Настройка apache2 + libapache2-mod-php5
Debian Jessie: Установка и настройка Nginx
Debian Jessie: Установка и настройка PHP5-FPM

Из этих компонентов мы сложим несколько вариантов настройки WEB сервера:
1. Nginx -> Apache2 -> libapache2-mod-php5
2. Nginx -> PHP5-FPM
3. Nginx -> PHP5-FPM в chroot

Поехали …

Начнем с подготовки отдельного раздела (точнее сказать — отдельный logic volume, у нас же LVM) для пользователей с сайтами. Почему желательно делать отдельный LV? Потому что мы сможем менять его размер по мере необходимости (увеличивать/уменьшать), а также сможем использовать более строгие опции монтирования.

Корневую директорию для пользователей с сайтами я сделал /srv/www:

gw:~$ sudo mkdir /srv/www

Теперь создаем отдельный LV, размер прикидываем по размеру сайтов + некоторый запас:

gw:~$ sudo lvcreate -L 10G -n lv_www vgraid1

Создаем в в новом LV lv_www файловую систему, я сделал ext4:

gw:~$ sudo mkfs.ext4 -L WWW /dev/vgraid1/lv_www

Добавляем запись в /etc/fstab для монтирования LV lv_www:

/dev/mapper/vgraid1-lv_www  /srv/www  ext4  rw,noatime,nodiratime,nosuid,nodev,noexec    1 2

Монторуем раздел:

gw:~$ sudo mount -a

Проверка что примонтировался:

gw:~$ mount |grep www
/dev/mapper/vgraid1-lv_www on /srv/www type ext4 (rw,nosuid,nodev,noexec,noatime,nodiratime,data=ordered)
gw:~$

Сюда будут розмещены сайты пользователей. Можно конечно прямо в данной директории /srv/www понасоздавать директорий для сайтов, но я хочу чтобы каждый сайт был максимально изолирован от операционной системы и друг от друга. Поэтому для каждого сайта создам отдельного позователя с хомяком в /srv/www и шелом /bin/false.

Ближе к делу, первый по порядку пример …
1. Nginx -> Apache2 -> libapache2-mod-php5

Короткое ТЗ. Для теста настроим пользователя compcom с домашней директорией /srv/www/compcom и сайтом comp.com (alias www.comp.com)
Создадим пользователя compcom с домашней директорией /srv/www/compcom:

gw~$ sudo useradd --comment "comp.com www user" --home-dir /srv/www/compcom --create-home --shell /bin/false compcom

Создадим в домашней директории данного пользователя директории для сайта и логов:

gw~$ sudo mkdir /srv/www/compcom/{htdocs,logs}

Создаем тестовый php файлик для проверки корректной работы php в данном VirtualHost:

gw~$ sudo vim /srv/www/compcom/htdocs/index.php

и вписываем туда следующее:

<?php
echo "compcom virtualhost";
phpinfo();
?>

Поскольку мы от рута создавали директории, следует рекурсивно исправить владельца директории /srv/www/compcom на compcom:

gw~$ sudo chown -R compcom.compcom /srv/www/compcom

Тут напомню, что apache2 у нас уже настроен и запущен, если нет — идем сюда для настройки.

Создаем конфиг VirtualHost-а в apache2. Для этого копируем дефолтный конфиг:

gw~$ sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/010-comp_com.conf

Открываем его для редактирования:

gw~$ sudo vim /etc/apache2/sites-available/010-comp_com.conf

И исправляем его до следующего вида:

<VirtualHost *:8080>
    ServerName comp.com
    ServerAlias www.comp.com

    ServerAdmin webmaster@comp.com
    DocumentRoot /srv/www/compcom/htdocs

    <IfModule mpm_itk_module>
       AssignUserID compcom compcom
       MaxClientsVHost 150
       NiceValue 10
    </IfModule>

    <Directory "/srv/www/compcom/htdocs">
           Options -Indexes +FollowSymLinks
           AllowOverride All
       Require all granted
        </Directory>

    ErrorLog /srv/www/compcom/logs/apache2-error.log
    CustomLog /srv/www/compcom/logs/apache2-access.log combined
</VirtualHost>

Для включения данного конфига в конфигурацию apache2 делаем следующее. Переходим в директорию /etc/apache2/sites-enabled:

gw~$ cd /etc/apache2/sites-enabled

И создаем симлинк на только что созданый конфиг:

gw~$ sudo ln -s ../sites-available/010-comp_com.conf

Смотрим что вышло:

gw~$ ls -l
total 0
lrwxrwxrwx 1 root root 35 Apr 27 07:38 000-default.conf -> ../sites-available/000-default.conf
lrwxrwxrwx 1 root root 38 Apr 27 08:32 010-comp_com.conf -> ../sites-available/010-comp_com.conf
gw~$

Проверяем конфиг:

gw:~$ sudo apachectl configtest
Syntax OK
gw:~$

Перезапускаем apache2:

gw~$ sudo systemctl restart apache2.service

Поскольку в нашей конфигурации apache2 запущен на localhost в качетве бекэнда, а основным web сервисом является nginx — то нужно добавить простейший конфиг для nginx для проксирования запросов с Интернет в Apache2 ( 0.0.0.0:80 (nginx) -> 127.0.0.1:8080 (apache2) ).

Добавим вот такой конфиг виртуалхоста nginx /etc/nginx/sites-available/comp_com.conf:

server {
   listen 80;
   server_name www.comp.com comp.com;

   access_log /var/log/nginx/comp_com-access.log;
   error_log /var/log/nginx/comp_com-error.log;

   # To Apache Back-end
   location / {
        proxy_pass http://127.0.0.1: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 60;
        proxy_send_timeout 120;
        proxy_read_timeout 180;
   }
   
   # Static Files
   location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js|html|txt)$ {
        root /srv/www/compcom/htdocs;
        expires max;
   }
}

включим данный конфиг:

gw:~$ cd /etc/nginx/sites-enabled
gw:/etc/nginx/sites-enabled$ sudo ln -s ../sites-available/comp_com.conf

Обязательно проверяйте корректность конфига:

gw:~$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
gw:~$

Перезапустим nginx:

gw:~$ sudo systemctl restart nginx.service

Если DNS резолвит домен comp.com на наш веб сервер, то можно пробовать браузером зайти на URL http://www.comp.com Если веб-сервер настроен правильно мы увидим вывод файлика index.php … длинный такой перечень настроек php, его модулей и тд.
Если DNS еще не перестроен на новый веб-сервер, а так часто бывает когда сайт в реальности работает на другом сервере, а текущий сервер подготавливается для дальнейшей миграции сайта, то для теста можно добавить руками в локальный /etc/hosts своего компьютера запись вида (напомню что мой веб-сервер имеет ip адрес 91.100.100.91):

# IP сервера     Доменное имя сайта
91.100.100.91   comp.com www.comp.com

И после этого проверить работоспособность сайта http://www.comp.com с помощью браузера. С первым случаем разобрались. Если чтото не заработало, внимательно проверяем конфиги и смотрим логи nginx и apache2.

2. Nginx -> PHP5-FPM
Напоминаю, что ранее я коротенько описал процесс установки и базовой настройки:
Debian Jessie: Установка и настройка Nginx
Debian Jessie: Установка и настройка PHP5-FPM

На этот раз потренируемся на домене pools.net (alias www.pools.net) Владельцем данного сайта будет пользователь poolsuser с домашней директорией /srv/www/poolsuser.
Создадим пользователя poolsuser, не забываем про домашнюю директорию /srv/www/poolsuser:

gw~$ sudo useradd --comment "pools.net www user" --home-dir /srv/www/poolsuser --create-home --shell /bin/false poolsuser

Создадим в домашней директории данного пользователя директории для сайта и логов:

gw~$ sudo mkdir /srv/www/poolsuser/{htdocs,logs}

Создаем тестовый php файлик для проверки корректной работы php-fpm:

gw~$ sudo vim /srv/www/poolsuser/htdocs/index.php

и вписываем туда следующее:

<?php
echo "poolsuser virtualhost";
phpinfo();
?>

Поскольку мы от рута создавали директории, следует рекурсивно исправить владельца директории /srv/www/compcom на compcom:

gw~$ sudo chown -R poolsuser.poolsuser /srv/www/poolsuser

Теперь настроим отдельный pool в php-fpm для данного юзера. Для этого создаем конфиг /etc/php5/fpm/pool.d/poolsuser.conf:

gw~$ sudo vim /etc/php5/fpm/pool.d/poolsuser.conf

И вставляем туда следующее:

[poolsuser]
user = poolsuser
group = poolsuser

listen = 127.0.0.1:9001
listen.allowed_clients = 127.0.0.1

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

access.log = /var/log/php-fpm/$pool-access.log
access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"
slowlog = /var/log/php-fpm/$pool-slow.log
request_slowlog_timeout = 5

chdir = /

php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f webmaster@pools.net
php_admin_value[error_log] = /var/log/php-fpm/$pool-error.log
php_admin_flag[log_errors] = on
php_admin_value[memory_limit] = 64M
php_flag[display_errors] = off

Перезапускаем сервис php-fpm:

gw~$ sudo systemctl restart php5-fpm.service

Проверим что php-fpm теперь «слушает» 127.0.0.1:9001 :

gw~$ sudo netstat -lnp |grep 9001
tcp  0   0 127.0.0.1:9001   0.0.0.0:*  LISTEN  18361/php-fpm.conf)
gw:~$

Слушает — отлично!
Теперь нужно настроить nginx. Создаем конфиг /etc/nginx/sites-available/pools_net.conf и добавляем туда вот что:

server {
   listen 80;
   server_name pools.net www.pools.net;

   access_log /var/log/nginx/pools_net-access.log;
   error_log /var/log/nginx/pools_net-error.log;

   root /srv/www/poolsuser/htdocs;

   index index.php;

   # Forbidden for .txt/.log files for all, exclude localhost
   location ~* \.(txt|log)$ {
    allow 127.0.0.0/8;
    deny all;
   }

   # Forbidden for hidden files for all
   location ~ (^|/)\. {
    deny all;
   }

   location / {
    # This is cool because no php is touched for static content.
    # include the "?$args" part so non-default permalinks doesn't break when using query string
    try_files $uri $uri/ /index.php?$args;
   }

   location ~ \.php$ {
    include fastcgi.conf;
    fastcgi_intercept_errors on;
    fastcgi_pass 127.0.0.1:9001;
   }

   # Static Files
   location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js|html|txt)$ {
        root /srv/www/poolsuser/htdocs;
    expires max;
   }
}

включим данный конфиг в nginx:

gw:~$ cd /etc/nginx/sites-enabled
gw:/etc/nginx/sites-enabled$ sudo ln -s ../sites-available/pools_net.conf

Обязательно проверяйте корректность конфига:

gw:~$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
gw:~$

Перезапустим nginx:

gw:~$ sudo systemctl restart nginx.service

Если DNS резолвит домен pools.net на наш веб сервер, то можно пробовать браузером зайти на URL http://www.pools.net Если веб-сервер настроен правильно мы увидим вывод файлика index.php … длинный такой перечень настроек php, его модулей и тд.
Если DNS еще не перестроен на новый веб-сервер, а так часто бывает когда сайт в реальности работает на другом сервере, а текущий сервер подготавливается для дальнейшей миграции сайта, то для теста можно добавить руками в локальный /etc/hosts своего компьютера запись вида (напомню что мой веб-сервер имеет ip адрес 91.100.100.91):

# IP сервера     Доменное имя сайта
91.100.100.91   comp.com www.pools.net

И после этого проверить работоспособность сайта http://www.pools.net с помощью браузера. Если резолв проходит верно но чтото не заработало, внимательно проверяем конфиги и смотрим логи nginx и php-fpm.

3. Nginx -> PHP5-FPM в chroot
Напоминаю, что ранее я коротенько описал процесс установки и базовой настройки:
Debian Jessie: Установка и настройка Nginx
Debian Jessie: Установка и настройка PHP5-FPM

Вариант с chroot хоть и наиболее морочный в настройке, зато и наиболее безопасный. Потренируемся на домене secure.me (alias www.secure.me) Владельцем данного сайта будет пользователь secureuser с домашней директорией /srv/www/secureuser.
Создадим данного пользователя:

gw~$ sudo useradd --comment "secure.me www user" --home-dir /srv/www/secureuser --create-home --shell /bin/false secureuser

Создадим в домашней директории данного пользователя директорию в которую php-fpm будет chroot-ится:

gw~$ sudo mkdir /srv/www/secureuser/wwwchroot

Теперь нам нужно воссоздать в данной директории все необходимые директории и файлы необходимые для нормальной работы php-fpm в chroot окружении. Поехали по одному …
Директория с системными настройками — etc:

gw~$ sudo mkdir /srv/www/secureuser/wwwchroot/etc

Вот листинг всех необходимых файлов в директории etc:

gw:~$ sudo ls -l /srv/www/secureuser/wwwchroot/etc/
total 36
-rw-r--r-- 1 root root   37 Apr 24  2015 group
-rw-r--r-- 1 root root    9 Feb 24  2015 host.conf
-rw-r--r-- 1 root root   64 Apr 24  2015 hosts
-rw-r--r-- 1 root root 2071 May  8  2015 localtime
-rw-r--r-- 1 root root   80 May  8  2015 networks
-rw-r--r-- 1 root root  497 Feb 24  2015 nsswitch.conf
-rw-r--r-- 1 root root   82 Apr 24  2015 passwd
-rw-r--r-- 1 root root   59 Apr 24  2015 resolv.conf
-rw-r--r-- 1 root root   12 Feb 23  2015 timezone
gw:~$

А вот содержимое данных конфигов:
/srv/www/secureuser/wwwchroot/etc/group

root:x:0:
www-data:x:33:
secureuser:x:1005:

/srv/www/secureuser/wwwchroot/etc/host.conf

multi on

/srv/www/secureuser/wwwchroot/etc/hosts

127.0.0.1   localhost
91.100.100.91   secure.me www.secure.me

/srv/www/secureuser/wwwchroot/etc/localtime
Это бинарный файл, он просто копируется из директории /etc

gw~$ sudo cp /etc/localtime /srv/www/secureuser/wwwchroot/etc/

/srv/www/secureuser/wwwchroot/etc/networks

default     0.0.0.0
loopback    127.0.0.0
link-local  169.254.0.0
localnet    192.168.1.0

/srv/www/secureuser/wwwchroot/etc/nsswitch.conf
Проще скопировать из директории /etc, менять ничего не нужно:

gw~$ sudo cp /etc/nsswitch.conf /srv/www/secureuser/wwwchroot/etc/

/srv/www/secureuser/wwwchroot/etc/nsswitch.conf
Проще скопировать из директории /etc:

gw~$ sudo cp /etc/passwd /srv/www/secureuser/wwwchroot/etc/

и удалить все строки кроме вот этих:

root:x:0:0:root:/root:/bin/bash
secureuser:x:1005:1005:secure.me www user:/srv/www/secureuser:/bin/false

/srv/www/secureuser/wwwchroot/etc/resolv.conf

nameserver 127.0.0.1
domain secure.me
search secure.me

/srv/www/secureuser/wwwchroot/etc/timezone

Europe/Kiev

Следующия необходимая директория htdocs — там собственно и будет расположен сайт. Создаем:

gw~$ sudo mkdir /srv/www/secureuser/wwwchroot/htdocs

Создаем тестовый php файлик для проверки корректной работы php-fpm:

gw~$ sudo vim /srv/www/secureuser/wwwchroot/htdocs/index.php

и вписываем туда следующее:

<?php
echo "secureuser in chroot";
phpinfo();
?>

Также в chroot нам нужна библиотека libnss_dns, создаем директорию lib и воссоздаем путь к библиотеке:

gw~$ sudo mkdir -p /srv/www/secureuser/wwwchroot/lib/x86_64-linux-gnu

И копируем саму библиотеку:

gw~$ sudo cp /lib/x86_64-linux-gnu/libnss_dns* /srv/www/secureuser/wwwchroot/lib/x86_64-linux-gnu/

Содержимое должно получиться вот таким:

gw~$ sudo ls -l /srv/www/secureuser/wwwchroot/lib/x86_64-linux-gnu/
total 24
-rw-r--r-- 1 root root 22952 May  8  2015 libnss_dns-2.19.so
lrwxrwxrwx 1 root root    18 May  8  2015 libnss_dns.so.2 -> libnss_dns-2.19.so

Следующая директория которая может понадобиться в chroot окружении — tmp, создаем:

gw~$ sudo mkdir /srv/www/secureuser/wwwchroot/tmp

Еще нам нужны 2 директории с полным содержимым в /usr/share

gw~$ sudo mkdir -p /srv/www/secureuser/wwwchroot/usr/share/php
gw~$ sudo mkdir /srv/www/secureuser/wwwchroot/usr/share/php5

предлагаю смонтировать их с основной системы, а не копировать:

gw~$ sudo mount -o bind /usr/share/php /srv/www/secureuser/wwwchroot/usr/share/php
gw~$ sudo mount -o bind /usr/share/php5 /srv/www/secureuser/wwwchroot/usr/share/php5

Не забываем добавить настройки в /etc/fstab для автомонтирования при загрузке системы:

/usr/share/php  /srv/www/secureuser/wwwchroot/usr/share/php  none bind 0 0
/usr/share/php5 /srv/www/secureuser/wwwchroot/usr/share/php5 none bind 0 0

Поскольку я храню сессии на диске, нужно создать директорию для сессий:

gw~$ sudo mkdir -p /srv/www/secureuser/wwwchroot/var/lib/php5/sessions

А также нужно помнить что логи php-fpm не могут быть записаны в глобальный лог, такчто нужна директория для логов:

gw~$ sudo mkdir /srv/www/secureuser/wwwchroot/var/log

Фух … теперь роздача слонов! Ой, тоесть прав 🙂

gw~$ sudo chown -R secureuser.secureuser /srv/www/secureuser/wwwchroot/htdocs
gw~$ sudo chown -R secureuser.secureuser /srv/www/secureuser/wwwchroot/tmp
gw~$ sudo chown -R secureuser.secureuser /srv/www/secureuser/wwwchroot/var/lib/php5/sessions
gw~$ sudo chown -R secureuser.secureuser /srv/www/secureuser/wwwchroot/var/log

Теперь настроим отдельный pool в php-fpm для данного юзера. Создаем конфиг /etc/php5/fpm/pool.d/secureuser.conf:

gw~$ sudo vim /etc/php5/fpm/pool.d/secureuser.conf

И вставляем туда следующее:

[secureuser]

user = secureuser
group = secureuser

listen = 127.0.0.1:9002
listen.allowed_clients = 127.0.0.1

pm = dynamic
pm.max_children = 13
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 11

access.log = /var/log/php-fpm/$pool_access.log
access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"
slowlog = /var/log/php-fpm/$pool_slow.log
request_slowlog_timeout = 3
request_terminate_timeout = 10s

prefix = /srv/www/secureuser
chroot = /srv/www/secureuser/wwwchroot
chdir = /htdocs

catch_workers_output = yes
security.limit_extensions = .php .php3 .php4 .php5
 
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f webmaster@secure.me
php_flag[display_errors] = off
php_admin_value[error_log] = /var/log/$pool_error.log
php_admin_flag[log_errors] = on
php_admin_value[memory_limit] = 128M

Перезапускаем сервис php-fpm:

gw~$ sudo systemctl restart php5-fpm.service

Проверим что php-fpm теперь «слушает» 127.0.0.1:9002 :

gw~$ sudo netstat -lnp |grep 9002
tcp  0   0 127.0.0.1:9002   0.0.0.0:*  LISTEN  14323/php-fpm.conf)
gw:~$

Слушает — отлично!
Теперь нужно настроить nginx. Создаем конфиг /etc/nginx/sites-available/secure_me.conf и добавляем туда вот что:

server {
   listen 80;
   server_name secure.me www.secure.me;

   access_log /var/log/nginx/secure_me-access.log;
   error_log /var/log/nginx/secure_me-error.log;

   root /srv/www/secureuser/wwwchroot/htdocs;

   index index.php;

   # Block Bots and other ...
   include includes/ban.conf;

   # Disable access log for robots.txt, favicon and apple-touch-icon.png
   include includes/disable_some_static_logs.conf;

   # Very rarely should these ever be accessed outside of your lan
   location ~* \.(txt|log)$ {
    allow 127.0.0.0/8;
    deny all;
   }

   # Some bots like it ...
   location ~* (administrator|bin|cgi|components|download|phpmyadmin|pma|sqlite) {
    return 403;
   }

   # Some bots like it ...
   location ~ (^|/)\. {
    return 403;
   }

   location / {
    # This is cool because no php is touched for static content.
    # include the "?$args" part so non-default permalinks doesn't break when using query string
    try_files $uri $uri/ /index.php?$args;
   }

   location ~ \.php$ {
    include fastcgi_params;
    root /srv/www/secureuser/wwwchroot;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_intercept_errors on;
    fastcgi_param SCRIPT_FILENAME /htdocs$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_script_name;
    fastcgi_param DOCUMENT_ROOT /htdocs;
    fastcgi_pass 127.0.0.1:9002;
   }

   # Static Files
   location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js|html|txt)$ {
        root /srv/www/secureuser/wwwchroot/htdocs;
    expires max;
   }

}

включим данный конфиг в nginx:

gw:~$ cd /etc/nginx/sites-enabled
gw:/etc/nginx/sites-enabled$ sudo ln -s ../sites-available/comp_com.conf

Обязательно проверяйте корректность конфига:

gw:~$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
gw:~$

Перезапустим nginx:

gw:~$ sudo systemctl restart nginx.service

Основной фишкой chroot варианта является изолированность на уровне php директории /srv/www/secureuser/wwwchroot от основной системы. В случае если какеры взломают ваш сайт, дальше директории chroot они выйти не смогут, а значит взлом одного сайта не повлечет за собой слив содержимого всей системы вместе с клиентской инфой.

Если DNS резолвит домен secure.me на наш веб сервер, то можно пробовать браузером зайти на URL http://www.secure.me Если веб-сервер настроен правильно мы увидим вывод файлика index.php … длинный такой перечень настроек php, его модулей и тд.
Если DNS еще не перестроен на новый веб-сервер, а так часто бывает когда сайт в реальности работает на другом сервере, а текущий сервер подготавливается для дальнейшей миграции сайта, то для теста можно добавить руками в локальный /etc/hosts своего компьютера запись вида (напомню что мой веб-сервер имеет ip адрес 91.100.100.91):

# IP сервера     Доменное имя
91.100.100.91   secure.me www.secure.me

И после этого проверить работоспособность сайта http://www.secure.me с помощью браузера. Если резолв проходит верно но чтото не заработало, внимательно проверяем конфиги и смотрим логи nginx и php-fpm.

Хай щастить!

  • Трэкбэки отключены
  • Комментов (0)
  1. Комментов пока нет

Why ask?