3 заметки с тегом

nginx

Настраиваем HTTPS-сервер на Raspberry Pi

16 декабря 2014, 23:49

Сегодня покажу как установить сертификат для веб сервера nginx от StartSSL.

Первое, что необходимо, это с помощью панели управления на сайте StartSSL создать приватный ключ и сертификат.
У нас появятся 2 файла: ssl.key и ssl.crt
Загружаем эти файлы на наш сервер.

Расшифровываем личный ключ с помощью пароля, который мы вводили при создании ключа, и помещаем его в папку с конфигами nginx командой:

$ openssl rsa -in ssl.key -out /etc/nginx/conf/ssl.key

Защитим свой ключ от посторонних глаз:

$ chmod 600 /etc/nginx/conf/ssl.key

Загрузим Root CA и Class 1 Intermediate Server CA сертивикаты:

$ wget http://www.startssl.com/certs/ca.pem
$ wget http://www.startssl.com/certs/sub.class1.server.ca.pem

Создадим единый сертификат из сертификатов которые мы получили и помещаем его в папку с конфигами nginx:

$ cat ssl.crt sub.class1.server.ca.pem ca.pem > /etc/nginx/conf/ssl-unified.crt

Добавляем следующие недостающие строчки в конфиг nginx:

$ nano /etc/nginx/sites-available/default
server {
        listen 443 ssl;
        .....

        # SSL
        ssl_certificate /etc/nginx/conf/ssl-unified.crt;
        ssl_certificate_key /etc/nginx/conf/ssl.key;
        ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers  "RC4:HIGH:!aNULL:!MD5:!kEDH";
        add_header Strict-Transport-Security 'max-age=604800';
        .....
        location ~ \.php$ {
                .....
                fastcgi_param HTTPS on; # Для php-fpm
                include fastcgi_params;
        }
}

ssl_certificate и ssl_certificate_key указывают на файл сертфиката и файл приватного ключа для него.
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 Указывает поддерживаемые протоколы.
ssl_ciphers «RC4:HIGH:!aNULL:!MD5:!kEDH» Указывает используемые шифры.
add_header Strict-Transport-Security 'max-age=604800' Strict-Transport-Secutiry — заголовок, указывающий браузеру на то, что сайт доступен только по https.

Сохраняем конфигурационный файл и перезагружаем nginx:

$ /etc/init.d/nginx reload

Проверяем в браузере доступность вашего сайта по https протоколу, если все сделали правильно, до сайт должен загрузиться.
После этого можно проверить на уязвимости с помощью онлайн сервиса.
В моем случае получились следующие показатели:

После показателей появятся рекомендации по улучшению надежности.

nginx   raspberry pi   SSL

Установка Nginx и PHP на Raspberry Pi

31 августа 2014, 20:10

Это первая из двух частей по установке сервера на raspberry pi, в этой части мы будем устанавливать nginx и php. В следующей части мы будем устанавливать и настраивать MySQL. Перед установкой можете почитать статью по выбору сервера, но самым оптимальным для raspberry pi будет выбор nginx его мы и будем устанавливать.

Установка Nginx

Для начала введите в терминале команду, чтобы убедиться, что все пакеты не требуют обновления или обновите их если есть обновления.

sudo apt-get update && sudo apt-get upgrade

Теперь введите следующую команду, чтобы установить nginx:

sudo apt-get install nginx

Ждем успешной установки сервера, после чего нам нужно будет запустить его следующей командой:

sudo /etc/init.d/nginx start

Если все прошло удачно, то вы увидите следующее сообщение:

Теперь введите в браузере адрес Raspberry Pi и вы должны увидеть стандартную страницу nginx:

Nginx установлен и работает, далее мы будем устанавливать php.

Установка PHP

Для установки php нужно установить пакет php-fpm следующей командой:

sudo apt-get install php5-fpm

После установки все готово для работы, но нужно внести несколько изменений в nginx для работы php.

Настройка nginx и php

По умолчанию nginx настроен на выдачу только статических html страничек, чтобы открыть файл настроек введите следующую команду:

sudo nano /etc/nginx/sites-available/default

Листайте вниз конфигурационный файл, пока в блоке server не найдете следующие строки:

#listen 80;  ## listen for ipv4;  this line is default and implied
#listen [::]:80 default_server 
ipv6only=on;  ## listen for ipv6

Раскоментируйте 2 строки удалением символа # в начале строки, в результате у вас должно получиться:

listen 80;  ## listen for ipv4;  this line is default and implied
listen [::]:80 default_server ipv6only=on;  ## listen for ipv6

Это позволяет прослушивать 80 порт для IPv4 и IPv6 запросов.
Далее нужно изменить имя нашего сервера (не забудьте изменить на свой адрес):

# Make site accessible from http://localhost/
server_name www.kropochev.com ;

Найдите список index файлов:

index index.html index.htm;

И замените его на следующую строчку:

index index.php index.html index.htm;

Это разрешит nginx обрабатывать страницу index.php и она будет иметь приоритет над index.html
Далее нужно указать как обращаться с php файлами, найдите следующие строки:

#location ~ \.php$ {
# fastcgi_split_path_info ^(.+\.php)(/.+)$;
# # NOTE: You should have "cgi.fix_pathinfo = 0;"  in php.ini
#
# # With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php5-fpm:
# fastcgi_pass unix:/var/run/php5-fpm.sock;
# fastcgi_index index.php;
# include fastcgi_params;
#}

Раскоментируйте некоторые линии, чтобы получилось следующее:

location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# NOTE: You should have "cgi.fix_pathinfo = 0;"  in php.ini

# # With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;

# # With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}

Чтобы сохранить файл нажимаем ctrl+x и подтверждаем действие.
Чтобы применить настройки выполним команду:

sudo /etc/init.d/nginx reload

Тестирование PHP

Осталось проверить работоспособность нашего сервера для этого в каталоге:

cd /usr/share/nginx/www

Создадим файл index.php:

sudo nano index.php

И вставим следующую строку в редакторе:

<?php phpinfo();  ?>

Сохраняем и выходим из редактора.
Теперь если открыть в браузере адрес raspberry pi то мы должны увидеть следующую страницу:

Если вы видите аналогичную страницу, значит вы установили и настроили nginx правильно. Если при установке у вас возникли вопросы, задавайте их в комментариях.
В следующей статье мы будем устанавливать MySQL на Raspberry Pi.

nginx   php   raspberry pi

Сравнение веб серверов для Raspberry Pi

25 августа 2014, 23:30

Перед установкой сервера наверно каждый задумывается над тем, какой установить, особенно если железо слабое. Сегодня мы сравним производительность на Raspberry Pi.

Тест

Тестовый стенд состоял из ноутбука, Raspberry Pi и маршрутизатора между ними. Интернет был отключен и постороннего трафика в сети не наблюдалось.

На ноутбуке была установлена утилита Siege, так как это отличный инструмент для тестирования.
Тестировал я статический контент, текст и картинки, тест php возможно сделаю в будущем.

Тестовый контент

Эксперимент будем проводить на следующем контенте:

  • загрузка html маленького размера 177 байт,
  • загрузка html большого размера 95,881 байт,
  • загрузка PNG 849 байт,
  • загрузка JPG 179,000 байт.

Я запускал эти тесты с 200 одновременными подключениями в течении 2х минут следующей командой:

siege -b -t2m -c200 192.168.1.100 [filename]

Тестировал следующие сервера:

  • Apache,
  • Nginx,
  • Monkey HTTP,
  • Lighttpd.

Все настройки были из коробки.
Посмотрим какой сервер самый быстрый?

Загрузка html страниц маленького размера

Первый тест показывает, как много запросов выполнено за 2 минуты. Это является хорошим показателем скорости, потому что, если сервер не справляется, он не будет обрабатывать запросы. Я выполнил 2 раза, при 100 одновременных подключений, и при 200.

Apache 26724 26624
Lighttpd 32963 31807
Monkey 39423 39310
Nginx 40391 39449

Nginx и Monkey намного опережают Apache в этом тесте
Победитель: Nginx

Загрузка html страниц большого размера

В этом тесте у нас довольно большой HTML-файл, содержащий текст. Вот результаты:

Apache 698 152
Lighttpd 625 563
Monkey 2060 2007
Nginx 3912 3886

Было ясно что цифры будут меньше, но все равно Nginx впереди всех, на втором месте его догоняет Monkey, а вот Apache с его 152 запросами явно нелегко, хотя если поиграть с настройками, статистика возможно изменится, но у нас все в равных условиях.
Победитель: Nginx

Загрузка PNG картинок

В этом тесте мы увидим как сервер будет обрабатывать совсем маленькие файлы по 849 байт:

Apache 32275 32840
Lighttpd 40838 41497
Monkey 51130 51065
Nginx 44461 45010

Monkey абсолютный победитель, как при 100 одновременных запросов, так и при 200.
Победитель: Monkey

Загрузка JPG картинок

Попробуем нагрузим наш сервер большой картинкой (178 Кб):

Apache 1467 1390
Lighttpd 1503 1357
Monkey 1442 1338
Nginx 1451 1396

По графику видно, что Apache вырывается из оутсайдеров, но при 100 одновременных запросов побеждает Lighttpd, а при 200 Nginx.
Победитель: Lighttpd при 100 запросах, Nginx при 200.

Доступность при нагрузке

Этот тест является очень хорошим показателем общей производительности. Если веб-сервер обрывает соединения это явный признак, что он перегружен.

При 100 одновременных подключений, все они показывают себя довольно хорошо:

Маленький текст Большой текст Маленькая PNG Большая JPG
Apache 100 100 100 98.39
Lighttpd 100 100 100 99.93
Monkey 100 99.95 100 99.65
Nginx 100 100 100 97.55

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

Маленький текст Большой текст Маленькая PNG Большая JPG
Apache 99.98 21.53 100 98.39
Lighttpd 99.95 100 99.93 99.41
Monkey 99.88 98.87 99.97 98.60
Nginx 99.89 98.38 99.92 97.55

Apache проваливает этот тест, а остальные 3 сервера показывают почти одинаковые показатели, но Lighttpd, немного опережает.
Победитель: Lighttpd

Передача данных

Этот тест показывает объем переданных данных в Мб. Ниже представлены 3 графика:

Победитель: Monkey для текста, Apache для картинок

Время ответа

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

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

Многопоточность

Этот тест показывает, сколько одновременных пользователей смогли бы получить данные:

Можно заметить, что при загрузке текстовых страниц мы снова видим победителя Nginx, а вот с изображениями первенство выхватывает Apache.
Победитель: Apache

Пропущенные запросы

Очень важных показатель, отображающий общее количество отклоненных запросов:

Победитель: Lighttpd

Итог

Победитель: Nginx
В целом, самый быстрый и надежный сервер — это Nginx. Я это говорю т. к. он наиболее зрелый по сравнению с Monkey, которая идет по пятам. Но если дела обстоят с большими объемами изображений, то у Apache нет конкурентов, я думаю, если его настроить, то показателям он приблизится к Nginx, но не каждый будет так глубоко углубляться и проводить после этого тесты. Поэтому в следующей статье мы будем устанавливать Nginx сервер на Raspberry Pi. Удачи!