Давно мечтал настроить сервер nginx для друпала с специально заточенной под Друпал конфигурацией Perusio (António P. P. Almeida), человека который хорошо разбирается в nginx и друпале и пожалуй это лучшая конфигурация из доступных.
Почему конфигурация Perusio? Что она дает?
Основные фичи:
- Использование пары серверных директив для рерайта доменов, обычно для переадресации www.example.com в example.com или наоборот. Как рекомендуется для nginx на странице Wiki Pitfalls.
- Поддержка чистых URL.
- Контроль доступа к cron.php. Его можно запустить только с IP, который ты пропишешь. Это для без драшевой версии.
- Поддержка мультисайтинга.
- Поддержка Boost модуля.
- Поддержка виртуальных хостов (файл конфигурации example.com.conf).
- Поддержка Sitemaps RSS лент.
- Поддержка для Filefield Nginx Progress модуля для полосы загрузки (upload progress bar).
- Использование non-capturing регулярных выражений для всехдиректив, которые не перезаписываются, что требуется для использования URI компонентов.
- Поддержка IPv6 и IPv4.
- Поддержка использования приватных файлов в друпале.
- Поддержка hot link protection (защита от показа изображений на других сайтах используя ссылку на твой сайт) imagecache генерируемых изображений.
- Заканчивание expensive 404s , что обычно Друпал управляет используя апачевский default.htaccess.
- Возможность использования Апачи как бэкенд для работы с PHP. Имеется ввиду использование Nginx как reverse proxy.
- Поддержка Advanced Help модуля.
- Поддержка Advanced Aggregation модуля.
- Поддержка микрокэширования и для анонимных и для аутентифицированных пользователей.
- Поддержка escaped URI.
- Поддержка ETag.
- Поддержка для drupal 8.
- Поддержка для file_force модуля.
+ SSL
+ меры безопасности
Но её не так просто установить. На digitalocean (далее DO) этого не удалось, т.к. под свою конфигурацию perusio использует свою сборку nginx, которая хорошо у меня встала только на testing ветку debian, о чем пишет и сам perusio: "This is packaged for Debian unstable or testing". Недавно я заметил небольшое движен продвинутых пользователей от DO в сторону подобного сервиса VULTR.
Его даже называют убийцей DO. Так вот у него можно ставить дистрибутив с любой кастомного образа + цены у них дешевле + бесплатная защита от DDoS.
Итак начнем.
1. Регистрация.
Регистрируемся на VULTR.com.
2. Закачка образа.
Переходим в раздел ISO, закачиваем образ: в поле "Remote URL:" вставляем ссылку на testing Debian http://ftp.ie.debian.org/debian-cd-weekly/amd64/iso-cd/debian-testing-am..., нажимаем кнопку Upload и вуа-ля образ закачался.
3. Установка образа.
Переходим на вкладку "Deploy" и выбираем "Custom" в разделе "Operating System" и выбираем наш образ, остальные опции на этой странице на твой вкус и жмем "Place order"
и ждем пока проинсталлит.
Когда закончит инсталяцию, то придет письмо: Vultr.com: Subscription Activated.
Вместо "Installing" появится ссылка "Manage", нажимаем её.
4. Установка системы.
Нажимаем "View console"
В консоле увидим начало установки системы, устанавливаем систему.
Когда дойдет до шага установки софта "Software selection", оставляем звездочку только "SSH server" и "standart system utilities".
!!!! На последнем шаге "Finish the installation" нажимаем "<Continue>", закрываем окно консоли, останавливаем сервер (кнопка "Stop"), переходим на вкладку "Custom ISO" и удаляем образ "Remove ISO".
5. Теперь можно зайти по SSH на наш сервер.
Заходим не из под root (не пустит), а из под пользователя.
Когда зайдем, то меняем пользователя на root:
~$ su
6. Закоменнтим CD источник для пакетов nano /etc/apt/sources.list
:
# deb cdrom:[Debian GNU/Linux testing _Jessie_ - Official Snapshot amd64 CD Binary-1 20150413-06:58]/ jessie main
и добавим репозиторий perusio:
deb http://debian.perusio.net unstable/
deb-src http://debian.perusio.net unstable/
Добавляем ключ:
apt-key adv --recv-keys --keyserver keys.gnupg.net add 4D722217
Обновляем источники:
aptitude update
Устанавливаем nginx:
aptitude -t unstable install nginx
проверяем версию, модули nginx:
nginx -V
должно быть так:
built by gcc 4.9.1 (Debian 4.9.1-19)
TLS SNI support enabled
configure arguments: --conf-path=/etc/nginx/nginx.conf --with-cc-opt=-fPIC --with-ld-opt=-pie --with-pcre-jit --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-debug --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --with-http_flv_module --with-http_geoip_module --with-http_gzip_static_module --with-http_realip_module --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-ipv6 --with-file-aio --with-http_secure_link_module --with-http_mp4_module --with-http_image_filter_module --with-http_spdy_module --with-http_auth_request_module --add-module=/home/appa/C/nginx/nginx-1.7.9/modules/nginx-upstream-fair --add-module=/home/appa/C/nginx/nginx-1.7.9/modules/nginx-upload-progress-module --add-module=/home/appa/C/nginx/nginx-1.7.9/modules/lua-nginx-module --add-module=/home/appa/C/nginx/nginx-1.7.9/modules/ngx_http_delay_module --add-module=/home/appa/C/nginx/nginx-1.7.9/modules/ngx_devel_kit --add-module=/home/appa/C/nginx/nginx-1.7.9/modules/ngx_cache_purge
А теперь наконец-то пришло время начать установку конфигурации Perusio!
Установка конфигурации Perusio
-
Переместим старую директорию
/etc/nginx
в/etc/nginx.old
. -
Клонируем гит репозиторий с гитхаба:
git clone https://github.com/perusio/drupal-with-nginx.git /etc/nginx
Редактируем конфигурационный файл
sites-available/example.com.conf
соответственно свои требованиям. Заменяешь example.com твоим доменом. -
Настраиваем PHP FPM в директории
/etc/php5/fpm
.-
Клонируем гит репозиторий:
git://github.com/perusio/php-fpm-example-config
. -
Проверяем
tcp
ветку, если она тебе подходит больше:git checkout -b tcpЕсли тебе больше подходят
unix
сокеты , то пропускаешь этот шаг и сразу переходишь к следующему. -
Меняем содержимое файлов
php-fpm.conf
иpool.d/www.conf
как тебе нравится. Добавь любой pool какой хочешь, если потребуется. -
Скопируй файлы в директорию назначения:
cp php5-fpm.conf /etc/php5/fpm
cp -a pool.d /etc/php5/fpm
-
(Пере)запускаем
php5-fpm
с помощьюservice php5-fpm restart
илиservice php5-fpm start, если первый запуск
. -
Проверяем, что unix сокеты правильно созданы и прослушиваются.
netstat --unix -l
или TCP сокеты:
или sudo netstat -t -l -p
Тогда покажет PHP CGI сокеты.
Имей ввиду, что по-умолчанию тип сокета UNIX и в конфиге настраиваем на прослушивание
unix:/var/run/php-fpm.sock
usingphp-fpm
и также ты должен соответственно настроитьupstream_phpcgi.conf
.
Соответственно в /etc/nginx/nginx.conf комментим/раскомментим строки:
include upstream_phpcgi_tcp.conf;
или
include upstream_phpcgi_unix.conf; -
Клонируем гит репозиторий:
-
Создаем директорию
/etc/nginx/sites-enabled
и включаем виртуальный хост. - Перезагружаем конфиг Nginx:
-
/etc/init.d/nginx reload
- Проверяем, что наш сайт работает в браузере.
-
Удаляем директорию
/etc/nginx.old
. - Пока всё.
Настройка SSL
Одна из особенностей конфигурации perusio, что по-умолчанию настроен и включен SSL. В свете последних тенденций (больший ранк в поисковиках, полный переход на https) думаю это правильно.
Я покупал Comodo сертификат у SSLs.com, недорого и всё норм работает.
Покупка сертификата
Перед покупкой надо будет сгенерить приватный ключ и CSR файл, т.к. CSR файл потребуется в дальнейшем.
openssl req -new -newkey rsa:2048 -nodes -keyout example_com.key -out example_com.csr
Это даст тебе два файла:
- example_com.key -- твой приватный ключ. Далее пригодится.
- example_com.csr -- твой CSR файл.
Теперь можно покупать сертификат, следуем шагам на сайте SSLs.com, они вышлют маил с PositiveSSL Certificate. Он содержит архив с:
- Корневой CA сертификат - AddTrustExternalCARoot.crt
- Промежуточный CA сертификат - COMODORSAAddTrustCA.crt
- Промежуточный CA сертификат - COMODORSADomainValidationSecureServerCA.crt
- Твой PositiveSSL сертификат - www_example_com.crt
Установка Commodo SSL сертификата
-
Собираем сертификаты в один файл:
cat www_example_com.crt COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt > ssl-bundle.crt
-
Создаем директорию и сохраняем файл в:
mkdir -p /etc/ssl/certs/ mv ssl-bundle.crt /etc/ssl/certs/
-
и под приватный ключ также:
mkdir -p /etc/nginx/ssl/private/
mv example_com.key /etc/ssl/private/
-
Соответственно в sites-available/example.com.conf меняем:
ssl_certificate /etc/ssl/certs/ssl-bundle.crt;
ssl_certificate_key /etc/ssl/private/example_com.key;
- Рестартим Nginx.
Не забываем оттестить SSL на https://www.ssllabs.com/ssltest/ и исправить все ошибки.
Настройка DNS сервера
В vultr в отличие от digitalocean DNS нужно самому настраивать, тем лучше.
1. Устанавливаем Bind9.
2. Конфигурируем.
Сохраняем текущие настройки Bind9.
Редактируем /etc/bind/named.conf.options и заменяем содержимое следующим:
directory "/var/cache/bind";
auth-nxdomain no;
listen-on-v6 { any; };
statistics-file "/var/cache/bind/named.stats";
rrset-order {order cyclic;};
allow-transfer { 127.0.0.1; };
};
logging {
channel b_query {
file "/var/log/bind9/query.log" versions 2 size 1m;
print-time yes;
severity info;
};
category queries { b_query; };
};
3.Создаем лог директорию для Bind9.
4.Редактируем /etc/bind/named.conf для конфигурации расположения твоего файла доменной зоны:
5.Создаем файл доменной зоны в /etc/bind/zones/your-domain-name.com.db. Вставляем записи DNS по следующему шаблону:
$TTL 86400
@ IN SOA ns1.your-domain-name.com. root.your-domain-name.com. (
2014100801 ; Serial
43200 ; Refresh
3600 ; Retry
1209600 ; Expire
180 ) ; Minimum TTL
; Nameservers
IN NS ns1.your-domain-name.com.
IN NS ns2.your-domain-name.com.
IN NS ns3.your-domain-name.com.
; Root site
IN A 123.456.78.90
; Hostname records
* IN A 123.456.78.90
sub1 IN A 123.456.78.91
sub2 IN A 123.456.78.92
; Aliases
www IN CNAME your-domain-name.com.
webmail IN CNAME ghs.google.com.
; MX records
@ IN MX 1 aspmx.l.google.com.
@ IN MX 3 alt1.aspmx.l.google.com.
@ IN MX 3 alt2.aspmx.l.google.com.
@ IN MX 5 aspmx2.googlemail.com.
@ IN MX 5 aspmx3.googlemail.com.
@ IN MX 5 aspmx4.googlemail.com.
@ IN MX 5 aspmx5.googlemail.com.
; SPF records
@ IN TXT "v=spf1 ip4:199.195.140.194 include:_spf.google.com ~all"
6.Рестартим Bind9:
/etc/init.d/bind9 restart
7.Всё, теперь только меняешь имена серверов у твоего доменного регистратора на твои собственные.
Полная версия с картинками и обновлениями (сюда не вмещаются): НАСТРОЙКА СЕРВЕРА NGINX С КОНФИГУРАЦИЕЙ PERUSIO ПОД DRUPAL
Комментарии
вот блин, проглядел я это... протрахался давече весь вечер, но запустил как-то на стабильной wheezy 7.8 и nginx 1.2.1 из репозитория. Пришлось кучу всего закомментить, но как-то работает. Ну всёравно я бы не стал ради этого переинсталлировать весь сервак
да, и спасибо тебе ttenz, а то я так бы и думал что "вот у всех работает а у меня как обычно непонятно почему".
да, и спасибо тебе ttenz, а то я так бы и думал что "вот у всех работает а у меня как обычно непонятно почему".
я рад, если кому-то помогло. я на DO, на стаб дебиане куски брал некоторые, а здесь нашел где можно воплотить полностью.
а, ну тем более тогда
Из дебиан стейбл всегда можно получить тестинг или сид парой комманд, накатывать из образа его совершенно не обязательно. Соответственно и получить в итоге можно на любом дедике/виртуалке.
Но использовать это в продакшене дело весьма опасное.
видимо на DO не все так просто.
"Digital Ocean — лоукостер на рынке облачных VPS провайдеров. Пользуется технологией виртуализации KVM. Хорош по соотношению цена/качество и бла-бла-бла, вы сами всё это знаете.
Но есть в нём и несколько минусов, одним из которых является ограничение в поддерживаемых операционных системах. Официальная позиция хостера состоит в том, что место на дисках в дроплетах (образах виртуальных машин) может быть расширено из панели управления без необходимости переустановки системы, поэтому загрузчик туда лучше не ставить. В связи с этим, libvirt не читает загрузчик внутри образа, а использует предустановленное в панели управления ядро с хостовой машины.
Поддержку загрузки пользовательских ядер они обещают сделать со дня на день… уже чуть больше года. "
http://habrahabr.ru/post/189564/
можно ещё на стабильном смешивать пакеты с помощью APT Pinning, но я не пробывал.
тогда в /etc/apt/preferences
Pin: release a=lenny-backports
Pin-Priority: 300
Package: *
Pin: release a=testing
Pin-Priority: 200
Package: *
Pin: release a=unstable
Pin-Priority: 100
Package: *
Pin: release a=experimental
Pin-Priority: 50
и соответственно в source.list добавить соответственные репы.
Последний вариант, кстати, наиболее разумный. Т.к. нужно-то только пару пакетов обновить из тестинг...
а можно ли чуть поподробнее? я можно сказать чайник а хочется!
Выше была ссылка на документацию по этому вопросу https://wiki.debian.org/AptPreferences
А какие именно пакеты надо с более новыми версиями - так это зависимости для nginx из репозитория Perusio. С помощью, например, aptitude можно посмотреть.
спасибо, почитал про pinning. Сделал несколько экспериментов, и, честно говоря, нихрена не понял.
добавил в sources.list
deb http://debian.perusio.net unstable/
deb-src http://debian.perusio.net unstable/
deb http://ftp.ru.debian.org/debian jessie main contrib non-free
убрал всё, что понаписал в preferences, проверил, что кандидат на установку - нужная мне версия
# apt-cache policy nginx
nginx:
Установлен: (отсутствует)
Кандидат: 1.9.0-peursio.1.0
Таблица версий:
1.9.0-peursio.1.0 0
500 http://debian.perusio.net/ unstable/ Packages
1.6.2-5 0
500 http://ftp.ru.debian.org/debian/ jessie/main amd64 Packages
1.6.2-5~bpo70+1 0
100 http://cdn.debian.net/debian/ wheezy-backports/main amd64 Packages
1.2.1-2.2+wheezy3 0
500 http://cdn.debian.net/debian/ wheezy/main amd64 Packages
500 http://security.debian.org/ wheezy/updates/main amd64 Packages
ну и нажал
# apt-get install nginx
всё установилось, и nginx, и зависимости... вот теперь сижу и думаю - как же обновляться? Я не хочу весь jessie тянуть! Понимаю, что нужно это нежелание как-то это описать в preferences, но не могу понять как.
кажись так:
Package: *
Pin: release n=jessie
Pin-Priority: 300
вроде всё ровно:
# apt-get -s upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
А почему без testing не запустилось?
Я недавно ставил конфиги на debian 7, после нескольких правок все запустилось.
Мои форки конфигов:
https://github.com/Plazik/drupal-with-nginx
https://github.com/Plazik/php-fpm-example-config
честно не помню, вроде не хватало библиотек для perusio-сборки сервера nginx.
а здесь без правок, в этом и фишка.
у меня вроде всё запустилось без правок конфигов с использованием pinning со сборкой nginx из репозитория perusio.
а это без танцов с бубном, как именно я и хотел.
Там не все, что есть нужно для каждого сайта.
Конфиг все равно надо под себя настраивать.
ну у меня продакш, я по-науке
короче, все молодцы
сейчас на вультре не хилые скидки, пользуйтесь
подводных пока не увидел, типа it-patrola на заре развития.
а неподводные - полностью самостоятельная настройка сервера.
поставил на debian 8, php 5.6, opcache, apt-pinning.
полет норм.
В php 5.5 и выше он же встроен.
я в смысле, что его включал.
«OpCache is compiled by default on PHP5.5+. However it is disabled by default. In order to start using OpCache in PHP5.5+ you will first have to enable it.»
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
Не знаю, я его специально не включал, но он включен.
неплохой обзор-сравнение LONODE, DO и VULTR - http://blog.due.io/2014/linode-digitalocean-and-vultr-comparison/