Tag Archives: Config

Установка модуля для Nginx на линуксе (debian)

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

Сходу столкнулся с проблемой: на nginx нужно добавить модуль который по умолчанию не включен (image_filter). На фряхе для этого достаточно было бы сделать make config и отметить нужный модуль, но не на линуксе. Дебиану нужно для этого скачать исходники, вручную их поправить, собрать и установить. А потом еще смотреть что бы не обновить nginx со старым набором модулей.

# получаем исходники
apt-get source nginx
# переходим в папку (у вас может отличаться т.к. включает версию)
cd nginx-1.4.4
# открываем для редактирование файл с конфигом билда
nano debian/rules
# ищем строку ./configure и где то среди прочих параметров добавляем эту строку:
--with-http_image_filter_module \
# сохраняем и выходим с файла

# компилируем модуль
dpkg-buildpackage -us -uc -nc
# устанавливаем
dpkg -i nginx_0.7.65-1ubuntu2_amd64.deb

На этапе выполнения команды

dpkg-buildpackage -us -uc -nc

возникла ошибка:

dpkg-checkbuilddeps: Unmet build dependencies: debhelper (>= 7.0.50~) libssl-dev (>= 0.9.7) libpcre3-dev zlib1g-dev

Не хватает зависимостей. Непонятно почему дебиану не поставить их самостоятельно или спросить нужны они или нет. Но ладно, ставим сами:

apt-get install libssl-dev debhelper  libpcre3-dev zlib1g-dev

Пробуем заново

dpkg-buildpackage -us -uc -nc

Снова получаю ошибку

./configure: error: the HTTP image filter module requires the GD library.
You can either do not enable the module or install the libraries.

make[1]: *** [override_dh_auto_build] Error 1
make[1]: Leaving directory `/root/nginx-1.4.4'

Окей, ставим GD. Здесь еще надо отметить что нужна не libgd2-noxpm, а версия libgd2-noxpm-dev.

Ставим:

 apt-get install libgd2-noxpm-dev

Опять возвращаемся к

dpkg-buildpackage -us -uc -nc

На этот раз очередная ошибка

make[2]: Entering directory `/root/nginx-1.4.4'
make[2]: *** No rule to make target `build', needed by `default'. Stop.
make[2]: Leaving directory `/root/nginx-1.4.4'
dh_auto_build: make -j1 returned exit code 2
make[1]: *** [override_dh_auto_build] Error 2
make[1]: Leaving directory `/root/nginx-1.4.4'
make: *** [build] Error 2
dpkg-buildpackage: error: debian/rules build gave error exit status 2

После этого я удалил папку с исходниками и повторил поцедуру заново (зависимости то уже стоят) и в итоге получил такое

dpkg-deb: building package `nginx' in `../nginx_1.4.4-1~wheezy_amd64.deb'.
dpkg-deb: building package `nginx-debug' in `../nginx-debug_1.4.4-1~wheezy_amd64.deb'.
dpkg-genchanges >../nginx_1.4.4-1~wheezy_amd64.changes
dpkg-genchanges: including full source code in upload
dpkg-source --after-build nginx-1.4.4
dpkg-buildpackage: full upload (original source is included)

Из этого сообщения нам нужно скопировать название файла итогового.  И это nginx_1.4.4-1~wheezy_amd64.deb

Перехоим на директорию выше и устанавливаем модуль:

cd ../
dpkg -i nginx_1.4.4-1~wheezy_amd64.deb

Вроде все поставилось: Setting up nginx (1.4.4-1~wheezy) …

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

А вот еще по базовой настройке nginx, php-fpm, mysql без особых модулей можно почитать здесь. Написано хорошо и понятно.

Правильное подключение ssl сертификата на сайт.

Недавно столкнулся с такой проблемой, что у меня с браузером ФФ 25 сайт по https открывается без проблем, а у нескольких коллег выдает предупреждение о недоверенном сертификате. При чем в остальных браузерах у всех все было нормально.

В итоге проблема оказалась в том, что сертификат был подписан промежуточным центром сертификации, который был не во всех браузерах. Для решения этой проблемы нужно всего лишь слить содержимое файла *.crt и *.ca-bundle (которые выдаются обычно вместе).

Сделать это можно примерно такой командой:

cat www.example.com.crt bundle.crt > www.example.com.chained.crt

И затем прописываем в конфигурации этот файл:

server {
    listen              443 ssl;
    server_name         www.example.com;
    ssl_certificate     www.example.com.chained.crt;
    ssl_certificate_key www.example.com.key;
    ...
}

Еще одной новой фишкой nginx стала возможность задать в одной секции server настройки как для http так и для httpS. Это можно делать указанием слова ssl в строке listen. Для этого порта затем будет использовать ssl. И это избавляет от необходимости дублировать конфиг если у вас сайт доступен по обеим портам.

Пример конфига с работой по 80 (http) и 443 (https) портам:

server {
    listen              80;
    listen              443 ssl;
    server_name         www.example.com;
    ssl_certificate     www.example.com.chained.crt;
    ssl_certificate_key www.example.com.key;
    ...
}

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

*****.com использует недействительный сертификат безопасности. К сертификату нет доверия, так как отсутствует цепочка сертификатов издателя. (Код ошибки: sec_error_unknown_issuer)