Настройка вебсервера

Вчера решил снова завести себе сервер. Единственно, решил попробовать не Amazon, а что-то иное.

Выбор пал на DigitalOcean, из-за того, что стоимость сервера очень низкая, это еще при условии использования виртуализации KVM и жестких дисков SSD.

Мне требуется размещать только статические сайты, поэтому я выбрал самый дешевый тариф в $5 в месяц. При этом выделяется сервер с 512 мегабайтами памяти, 20 гигабайтами высокоскоростного жесткого диска. Регистрация очень простая и для размещения сервера требуется либо произвести оплату с помощью PayPal или зарегистрировать в аккаунте свою пластиковую карту.

Сервера можно размещать или в Нью-Йорке или в Амстердаме. Но как оказалось далее, в Амстердаме не удастся разместить сервера за $5 или $10, так как в этой зоне наблюдаются проблемы с выделением адресного пространства.

Зарегистрировал свой сервер в Нью-Йорке и был приятно удивлен, пинги до сервера стабильные и составляют порядка 160 миллисекунд.

При регистрации выбрал сервер на основе операционной системы Ubuntu 12.04 32bit. Выбор пал на 32 бита из-за ограничений в размере оперативной памяти. Запуск сервера был произведен уже спустя минуту после заказа. Довольно приятный аспект.

В отличие от Amazon, на сервере DigitalOcean по умолчанию доступ предоставляется только пользователю Root, и вход осуществляется по паролю. Поэтому первым делом нужно было закрыть данную дыру в безопасности. Чтобы в дальнейшем было проще, опишу всю последовательность действий по настройке сервера.

(root)# locale-gen ru_RU.UTF-8
(root)# update-locale LANG=ru_RU.UTF-8 LC_MESSAGES=POSIX
(root)# dpkg-reconfigure locales

(root)# adduser ubuntu
(root)# adduser ubuntu sudo
(root)# apt-get update
(root)# apt-get install vim
(root)# vim /etc/ssh/sshd_config

Здесь находим строки, снимаем при необходимости комментарий, и меняем значение с yes на no:

PermitRootLogin no
PasswordAuthentication no

Теперь, перед тем, как перезапустим сервис ssh, нам необходимо передать свои ключи на сервер (команды выполняются на локальной машине):

$ ssh-copy-id -i ~/.ssh/id_dsa.pub ubuntu@198.199.81.151

Примечание: в OSX утилита ssh-copy-id отсутствует по умолчанию, но ее легко установить с помощью homebrew.

После ввода пароля ключи попадают на сервер и теперь можно попробовать логинится на сервер под вновь созданным пользователем и уже без пароля.

Теперь нужно перезапустить сервис ssh и продолжать настройку (дальнейшие команды уже выполняются на сервере от имени созданного пользователя).

(ubuntu)$ sudo service ssh restart

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

Теперь настраиваем часовой пояс, ставим сервер точного времени и устанавливаем фаервол:

(ubuntu)$ sudo dpkg-reconfigure tzdata
(ubuntu)$ sudo apt-get install openntpd denyhosts ufw
(ubuntu)$ sudo ufw allow Apache
(ubuntu)$ sudo ufw allow OpenSSH
(ubuntu)$ sudo ufw enable
(ubuntu)$ sudo ufw status verbose

На экране должно появится примерно следующее:

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing)
New profiles: skip

To                         Action      From
--                         ------      ----
80/tcp (Apache)            ALLOW IN    Anywhere
22/tcp (OpenSSH)           ALLOW IN    Anywhere
80/tcp (Apache (v6))       ALLOW IN    Anywhere (v6)
22/tcp (OpenSSH (v6))      ALLOW IN    Anywhere (v6)

Это говорит о том, что теперь все порты сервера закрыты по умолчанию и разрешены соединения только с SSH и Web. Теперь переходим к установке и настройке веб-сервера апач.

(ubuntu)$ sudo apt-get install apache2
(ubuntu)$ sudo a2enmod headers
(ubuntu)$ sudo a2enmod rewrite
(ubuntu)$ sudo a2enmod expires
(ubuntu)$ sudo service apache2 restart
(ubuntu)$ cd /etc/apache2/sites-available/
(ubuntu)$ sudo cp default site.ru
(ubuntu)$ sudo vim site.ru

И приводим этот файл примерно к следующему виду (минимальные настройки, необходимые для работы сайта):

<VirtualHost *:80>
    ServerAdmin ubuntu@site.ru
    ServerName site.ru
    ServerAlias site.ru www.site.ru

    DocumentRoot /home/ubuntu/www/siteru
    <Directory /home/ubuntu/www/siteru>
            Options None
            Order allow,deny
            allow from all
    </Directory>

    ErrorLog /home/ubuntu/logs/siteru/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn
</VirtualHost>

Для того, чтобы при перезапуске Apache не появлялось предупреждений, необходимо в файл /etc/apache2/httpd.conf добавить строку (файл по умолчанию пустой):

ServerName localhost

Теперь необходимо создать директории для размещения своего сайта (для этого используется домашняя директория):

(ubuntu)$ cd; mkdir -p www/siteru; mkdir -p logs/siteru

Пришла пора активировать свой сайт и перезапускать веб-сервер:

(ubuntu)$ sudo a2ensite site.ru
(ubuntu)$ sudo service apache2 reload

Если ошибок при запуске не было, значит все нормально и можно проверять работу. Для этого достаточно в браузере набрать ip-адрес своего сервера, на что он должен будет показать простенькую веб-страницу.

Amazon S3 очень дешевый способ размещения своих сайтов, но он же имеет и ряд недостатков:

  1. Страницы сайта раздаются без сжатия, что значительно играет роль в скорости отдачи.
  2. Скорость загрузки страниц сайта на сервер на порядки меньше скорости загрузки с помощью rsync. Для сравнения, во время загрузки с использованием s3cmd я тратил порядка 2 минут на загрузку страниц, при использовании rsync у меня уходит порядка 2-3 секунд.
  3. Нет возможности задавать дополнительные заголовки файлам, как например Vary: Accept-Encoding или X-UA-Compatible: IE=Edge,chrome=1.
  4. Нет возможности управлять переадресацией со страниц сайта, к примеру задать 410 ошибку при удалении определенной страницы.

Без всего этого можно обойтись, при условии того, что S3 очень дешевый сервис. Но когда есть возможность использовать что-то лучше, за небольшую доплату, зачем упускать такую возможность?

При использовании Amazon S3, Page Speed для моего сайта оказался на уровне 83-84 балов из 100. Мне удавалось довести это значение до 99 путем использование предварительного сжатия, но после этого сайт не индексировался поисковыми системами.

Теперь же, после перехода на сервер от DigitalOcean, Page Speed стал ровно 100 балов из 100. На мой взгляд, оно того стоит. Посмотрим теперь, насколько стабильно будет работать сервер.