Настройка web сервера Debian на VPS: apache, nginx и всё..всё..всё

Тонкости администрирования VPS

Настройка web сервера Debian на VPS: apache, nginx и всё..всё..всё

admin No Comment
Debian

Важное замечание: Статья не претендует на руководство к действию. В ней я описываю те грабли действия, которые делал я. Допускаю, что далеко не все, описанное ниже, является истиной в последней инстанции, однако, буду рад, если информация окажется полезной.

Года два назад, посчитав, что немногочисленные хостинги у проверенных (и не очень) контор, суммарно стоят дороже чем самый простейший VPS у не менее проверенного немецкого Hetzner (был определенный опыт с обслуживанием сайтов на их обычных хостинг-планах), принял решение постепенно переносить сайты. По сути ничего не понимая в том, как и что должно работать, какие службы настаивать, как вообще весь этот зоопарк в виде php, apache, mysql и прочем многообразии правильно прокормить, все-таки прикупил такой конфиг:

VPS у Hetzner

VPS у Hetzner

Количество не очень посещаемых сайтов было не больше 15 на тот момент, и особо не задумывался  о нагрузке, да и вообще было просто интересно само понятие «администрирование удаленного сервера» , пусть и в таком виртуальном виде.

Какую операционную систему выбрать?

С Linux давно делал попытки познакомиться ближе. Но было это больше из интереса, ставил всякие ubuntu, knoppix, redhat. Смотрел как устроено, лазил по меню, запускал программы разные, ужасался убогому дизайну и крайней примитивности программ. Забегая вперед, поставил недавно kde для debian (дома на виртуалке), еще больше ужаснулся. Кто эти люди, которые решили что они могут клепать интерфейсы такого убогого китайского качества. Впрочем, ладно, допускаю, что есть и приличные графические оболочки. Гномы рулят (или нет).

Выбор пал на Debian. Для новичка, строки в предлагаемой хостером конфигурации образа  (LAMP image: Base system with SSH daemon and several services, tools and libraries (e.g. Apache, MySQL, PHP, Perl, Webmin, OpenSSL, FTP) платформа показалась неплохим началом, т.е. это по сути решение из коробки. Ни разу не оптимизированное, но решение. Все это было именно для Debian, поэтому последний и был выбран. Спустя 2 года могу смело сказать, что Debian — хорошеее решение. Документация в порядке, инфы в инете море, книги, форумы, все, что позволяет находить оптимальные (или не очень) решения.

После заказа пришло письмо с логином/паролем/ip.  Чему был по-детски рад.

Процесс установки пропущу. В дальнейшем на других vps приходилось ставить, но там легкая магия, описывать не считаю необходимым.

Как я настраивал SSH

Начитавшись многочисленных мануалов в сети, поковыряв официальную справку, посмотрев логи сервера, увидев там подозрительную активность на 22 порту, пришел к следующим конфигурационным строкам:

Файл /etc/ssh/sshd_config

1. Сменил порт с дефолтного 22-го (Port)

Port (например на 2233).

Проверено, что боты сканируют до 1000 порта, в своем большинстве. Впрочем, допускаю, что это частный случай

2. Изменил время ожидания авторизации (LoginGraceTime)

LoginGraceTime 15

3. Добавил

MaxStartups 1:50:1

4. Запретил вход root

PermitRootLogin no

5. Добавил

AllowUsers <em>здесь через пробел указываем список пользователей, которым разрешен вход</em>
 IgnoreUserKnownHosts no
 GatewayPorts no
 AllowTcpForwarding no
 KeepAlive yes

О повышении безопасности ssh и входу по ключу можно прочесть здесь.

Опция ForwardX11 для людей, которые используют Xwindow GUI и хотят автоматически перенаправлять сессии X11 на удаленную машину. Так как гуи ни разу не упал, можно спокойно выключить эту опцию.

ForwardX11 no

 Установка Apache

В большинстве инструкций про установку apache пишут крайне просто:

apt-get install apache2

Вот такой лаконичный ход. Однако я предпочитаю чтобы скрипты запускались под определенным пользователем, а не www-data, как в случае с установкой пакета apache2. Поэтому ставлю Apache MPM-ITK

Получаю ответ:

The following extra packages will be installed:
  apache2-utils apache2.2-bin apache2.2-common libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libcap2 libgcrypt11 libgnutls26
  libgpg-error0 libldap-2.4-2 libsasl2-2 libsasl2-modules libtasn1-3 openssl ssl-cert
Suggested packages:
  www-browser apache2-doc apache2-suexec apache2-suexec-custom rng-tools gnutls-bin libsasl2-modules-otp libsasl2-modules-ldap
  libsasl2-modules-sql libsasl2-modules-gssapi-mit libsasl2-modules-gssapi-heimdal ca-certificates openssl-blacklist
The following NEW packages will be installed:
  apache2-mpm-itk apache2-utils apache2.2-bin apache2.2-common libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libcap2
  libgcrypt11 libgnutls26 libgpg-error0 libldap-2.4-2 libsasl2-2 libsasl2-modules libtasn1-3 openssl ssl-cert
0 upgraded, 18 newly installed, 0 to remove and 0 not upgraded.
Need to get 4,484 kB of archives.
After this operation, 12.8 MB of additional disk space will be used.
Do you want to continue [Y/n]? Y

И в конце выдается такое веселое сообщение:

Setting up apache2-mpm-itk (2.2.16-6+squeeze11) ...
Starting web server: apache2apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName

По сути ничего криминального я тут не увидел, но исправить эту ошибку надо самостоятельно. Решается просто: нужно добавить в файл /etc/apache2/httpd.conf строку

ServerName 127.0.0.1

Обычно нужно именно это значение добавить, если не было какой то тонкой-тонкой настройки сети.

В конфиге файла apache2.conf добавляю

##### add for pmp-itk module
<IfModule mpm_itk_module>
StartServers 3
MinSpareServers 3
MaxSpareServers 3
MaxClients 10
MaxRequestsPerChild 5
</IfModule>

По поводу значений, все достаточно индивидуально и зависит от ряда факторов: железо, настройки и т.п. Здесь я привел рабочий пример.

Также добавил (если у вас будет фронтэндом nginx то смысла в этих строках нет)

ServerSignature Off
ServerTokens Prod

Поскольку apache будет выступать в роли бэкэнда, a nginx как фронтэнд, нужно освободить порт apache на, например, 8080. В свою очередь, на 80 порту будет работать nginx.

В файл /etc/apache2/ports.conf добавляю

NameVirtualHost 127.0.0.1:8080
Listen 127.0.0.1:8080

 

Установка nginx в качестве фронтэнда

Ввиду того, что в репозиториях Дебиана мягко говоря версии nginx не очень свежие (обновление: для wheezy почти что самая распоследняя на март 2014 года), был добавлен репозиторий nginx. Подробнее тут http://nginx.org/ru/linux_packages.html#stable

В моем случае в файл /etc/apt/sources.list были добавлены строки

deb http://nginx.org/packages/debian/ squeeze nginx
deb-src http://nginx.org/packages/debian/ squeeze nginx

а также ключ

wget http://nginx.org/keys/nginx_signing.key -O- |apt-key add -

Не забыть обновить репозиторий:

apt-get update

далее стандартно выполнить

apt-get install nginx

Nginx у меня при установке забавно хрюкнул ошибками, связанными с тем, что порт, на котором он захотел заработать (80) уже был занят apache. Не страшно. Поправим конфигурацию («линуксоиды» наверно на каждую такую ошибку отвечают «поправь конфиг, х*рня же»).

Я создал 2 папки

/etc/nginx/sites-enabled  — для конфигурационных файлов сайтов
/etc/nginx/sites-available  — для включенных сайтов (здесь будут симлинки)

Кроме того, можно создать файл /etc/nginx/conf.d/proxy.conf с содержимым

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;

Сделано это для того, чтобы не копировать одни и те же значения в конфигурационных файлах сайтов. Впрочем, тут каждый решает, как ему удобнее.

Установка libapache2-mod-rpaf

apt-get install libapache2-mod-rpaf

Ставим php

apt-get install php5

обновлено: не забываем установить GD

apt-get install php5-gd

Ставим mysql

apt-get install mysql-server

Ставим phpmyadmin (если он нужен)

apt-get install phpmyadmin

В настройках указываем пароль root . Сервер apache, и я лично оставляю не заполненным пароль phpmyadmin — он генерируется сам.

Настройка phpmyadmin

При первом входе в phpmyadmin внизу появляется красивое примечание

При cookie-аутентификации, в конфигурационном файле необходимо задать парольную фразу установив значение директивы $cfg['blowfish_secret'].

Лечится легко (опять лечим, хвала священному линуксу, это видимо для тех кто любит тра_аться заниматься подобными вещичками)

идем в папку phpmyadmin/var/lib/phpmyadmin/blowfish_secret.inc.php

или просто выполняем

cat /var/lib/phpmyadmin/blowfish_secret.inc.php | grep cfg

Копируем строку в конец файла /etc/phpmyadmin/config.inc.php

Вуаля-*ля

 

 

Оставить ответ

cможет принять любую посещаемость благодаря кешированию WP Super Cache