[РЕШЕНО] Защита от ботов fail2ban+csf сервера nginx c друпалом на борту

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

Настроим наш nginx сервер для победы над спам ботами —>>

Установка CFS (ConfigServer Firewall)

1. Качаем архив:

wget http://www.configserver.com/free/csf.tgz

2. Распаковываем:

tar -xzf csf.tgz

3. Устанавливаем:

Если есть другие фаервольные скрипты, например UFW, то нужно их остановить. Правила в iptables удалятся автоматически.

ufw disable   cd csf   sh install.sh

Фаервол теперь установлен и теперь проверим все ли требуемы модули iptable доступны.

perl /usr/local/csf/bin/csftest.pl

Fail2ban будет работать, если при проверки везде OK.

Установка fail2ban

1. Устанавливаем модуль на друпал сайт:

https://www.drupal.org/project/fail2ban

Включаем syslog модуль.

2. Редактируем /etc/fail2ban/jail.conf, добавляем в конец файла:

[drupal-fail2ban] enabled = true port = http,https protocol = tcp filter = drupal-fail2ban action = csf-ip-deny[name=drupal] logpath = /var/log/messages maxretry = 5 findtime = 86400 bantime = 21600

3. Создаем фильтр /etc/fail2ban/filter.d/drupal-fail2ban.conf со следующим содержимым:

[Definition] failregex = \|user\|<HOST>\|.*\|Login attempt failed (.+)\.$ ignoreregex =

4. Создаем фильтр /etc/fail2ban/action.d/csf-ip-deny.conf со следующим содержимым:

# CSF / fail2ban integration from The Digital FAQ (digitalFAQ.com)   [Definition] actionstart = actionstop = actioncheck = actionban = csf -d <ip> Added by Fail2Ban for <name> actionunban = csf -dr <ip>   [Init] name = default   # Read more: http://www.digitalfaq.com/forum/web-tech/5692-fail2ban-csf-blocking.html#ixzz3Jfzkmx00

5. Запуск

Останавливаем сервер:

/etc/init.d/nginx stop

рестартим fail2ban:

service fail2ban restart

Запускаем сервер:

/etc/init.d/nginx start

Смотрим работу командой:

tail -f /var/log/fail2ban.log

должно быть примерно так:

2014-11-24 16:02:22,881 fail2ban.actions: WARNING [drupal-fail2ban] 110.85.100.178 already banned   2014-11-24 16:02:25,884 fail2ban.actions: WARNING [drupal-fail2ban] 110.85.100.178 already banned   2014-11-24 16:11:01,528 fail2ban.actions: WARNING [drupal-fail2ban] 91.200.12.41 already banned   2014-11-24 16:12:10,612 fail2ban.actions: WARNING [ssh] Ban 178.254.22.90   2014-11-24 16:22:11,384 fail2ban.actions: WARNING [ssh] Unban 178.254.22.90

наконец то стало легче дышать, скорость сайта возросла в 10-15 раз, боты прибиты, переходить на более дорогой тариф не надо!

—————————————————————————————————————————————–

Дополнение (для более тонкой настройки):

Обнаружение вражеской подсети:

1. Формат лог файла у fail2ban /var/log/fail2ban.log примерно такой:

...   2006-02-13 15:52:30,388 fail2ban.actions: WARNING [sendmail] Ban XXX.66.82.116   2006-02-13 15:59:29,295 fail2ban.actions: WARNING [sendmail] Ban XXX.27.118.100   2006-02-13 16:07:31,183 fail2ban.actions: WARNING [sendmail] Unban XXX.66.82.116   2006-02-13 16:14:29,530 fail2ban.actions: WARNING [sendmail] Unban XXX.27.118.100   2006-02-13 16:56:27,086 fail2ban.actions: WARNING [ssh] Ban XXX.136.60.164   2006-02-13 17:11:27,833 fail2ban.actions: WARNING [ssh] Unban XXX.136.60.164

2. Генерация простых отчетов:

Группировка ip-адресов:

awk '($(NF-1) = /Ban/){print $NF}' /var/log/fail2ban.log | sort | uniq -c | sort -n

Примерный вывод:

...   4 XXX.124.81.130   5 XXX.248.175.246   8 XXX.29.45.142

Определяем самую зловредную субсеть:

zgrep -h "Ban " /var/log/fail2ban.log* | awk '{print $NF}' | awk -F\. '{print $1"."$2"."}' | sort | uniq -c | sort -n | tail

Примерный вывод:

...   75 83.110.   90 219.95.   154 210.213.

Анализируем зловредную сеть, сколько раз эта зараза появлялась в лог файлах:

zgrep -c 210.213. /var/log/fail2ban.log*

Примерный вывод:

fail2ban.log:39   fail2ban.log.1.gz:129   fail2ban.log.2.gz:55   fail2ban.log.3.gz:78   fail2ban.log.4.gz:22

Зловредную сеть определили, а там уже можно и внести её в фаервол, определить страну (я например, весь Китай забанил) и т.д.

3. Бан подсети:

Доступа SSH:

iptables -I INPUT -p tcp -s XXX.XXX.XXX.XXX/XX --dport ssh -j REJECT --reject-with tcp-reset

Доступа SMTP:

iptables -I INPUT -p tcp -s XXX.XXX.XXX.XXX/XX --dport smtp -j REJECT --reject-with tcp-reset

Доступа HTTP:

iptables -I INPUT -p tcp -s XXX.XXX.XXX.XXX --dport http -j REJECT

Доступа FTP:

iptables -I INPUT -p tcp -s XXX.XXX.XXX.XXX --dport ftp -j DROP

и по аналогии так можно защитить другие службы.

Блокировка страны

Сервер должен включать модуль –with-http_geoip_module

проверяем:

nginx -V

должно быть, примерно, так:

root@server1:~# nginx -V nginx version: nginx/1.2.1 TLS SNI support enabled configure arguments: --prefix=/etc/nginx --conf-path=/etc/nginx/nginx.conf --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-pcre-jit --with-debug --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_realip_module --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-http_xslt_module --with-ipv6 --with-sha1=/usr/include/openssl --with-md5=/usr/include/openssl --with-mail --with-mail_ssl_module --add-module=/build/buildd-nginx_1.2.1-2.1-amd64-fMGfEu/nginx-1.2.1/debian/modules/nginx-auth-pam --add-module=/build/buildd-nginx_1.2.1-2.1-amd64-fMGfEu/nginx-1.2.1/debian/modules/nginx-echo --add-module=/build/buildd-nginx_1.2.1-2.1-amd64-fMGfEu/nginx-1.2.1/debian/modules/nginx-upstream-fair --add-module=/build/buildd-nginx_1.2.1-2.1-amd64-fMGfEu/nginx-1.2.1/debian/modules/nginx-dav-ext-module root@server1:~#

также устанавливаем базы данных:

apt-get install geoip-database libgeoip1

Обновляем базы на самые новые:

mv /usr/share/GeoIP/GeoIP.dat /usr/share/GeoIP/GeoIP.dat_bak

cd /usr/share/GeoIP/ wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz gunzip GeoIP.dat.gz

Если атака идет от определенной страны, то можно заблокировать доступ к серверу определенной стране, например Китаю:

vi /etc/nginx/nginx.conf

и вставляем в http {} блок:

[...] geoip_country /usr/share/GeoIP/GeoIP.dat; map $geoip_country_code $allowed_country { default yes; CN no; FM no; EH no; } [...]

Коды стран

и вставляем в конфиг нашего сайта (лежат в /etc/nginx/sites-available) в контейнер server {}:

[...] if ($allowed_country = no) { return 444; } [...]

Источник: http://www.drupal.ru/node/114079

[РЕШЕНО] настройка Nginx на Digital Ocean под Drupal

Настраиваю сервер Nginx для сайта c Domain Access на Диджитал Оушене.

Есть ли какие-нибудь особенности настройки его под Друпал для максимальной пользы?

———————————————————————————————————————-

Настроил, может кому пригодится, использовал:

каплю – Debian 7 64 php 5.4 NGINX

1. Перенос:

# использовал SCP:

https://www.digitalocean.com/community/articles/how-to-migrate-a-mysql-d…

Но можно и проще (?):

https://www.digitalocean.com/community/articles/how-to-use-sshfs-to-moun…

Вроде неплохая подборка видео по переносу:

http://www.youtube.com/playlist?list=PL91978F0CB6BC302B

2. Установка сервера:

https://www.digitalocean.com/community/articles/how-to-install-drupal-wi…

Написано под Ubuntu 13.04, я ставил в Debian 7, всё норм.

# Сначала ставим всё необходимое:

sudo apt-get update

sudo apt-get install mysql-server php5-mysql

sudo apt-get install nginx

# Запускаем сервер:

sudo service nginx start

# Устанавливаем PHP:

sudo apt-get install php5-fpm

# Настраиваем PHP:

открываем php.ini

sudo nano /etc/php5/fpm/php.ini

# Меняем на 0 (для безопасности):

cgi.fix_pathinfo=0

# Далее редактируем конфигурацию php5-fpm:

sudo nano /etc/php5/fpm/pool.d/www.conf

# В нём находим строку listen = 127.0.0.1:9000, и меняем 27.0.0.1:9000 на /var/run/php5-fpm.sock:

listen = /var/run/php5-fpm.sock

# Рестарт php5-fpm:

sudo service php5-fpm restart

# Загружаем друпал:

wget http://ftp.drupal.org/files/projects/drupal-7.25.tar.gz

7.25 – меняем на актуальную версию.

(я делал драшем)

# Распаковываем:

tar xzvf drupal-7.25.tar.gz

7.25 – меняем на актуальную версию.

## Создаем БД и юзера:

# Заходим:

mysql -u root -p

# Создаем БД:

CREATE DATABASE drupal;

вместо drupal – можно любое название

# создаем юзера:

CREATE USER drupaluser@localhost;

# Устанавливаем пароль нового юзера password

SET PASSWORD FOR drupaluser@localhost= PASSWORD("password");

# Даем юзеру привилегии:

GRANT ALL PRIVILEGES ON drupal.* TO drupaluser@localhost IDENTIFIED BY 'password';

# Обновляем MySQL:

FLUSH PRIVILEGES;

# Выходим из MySQL:

exit

# Копируем файлы:

Директория сервера в Ubuntu 13.04 находится в /usr/share/nginx/html/.

(У меня в Debian 7 в /usr/share/nginx/www/)

# Создаем директорию drupal:

sudo mkdir /usr/share/nginx/html/drupal

# Копируем файлы друпала из своей домашней директории:

cd ~ sudo mv drupal-7.25/* /usr/share/nginx/html/drupal/

## Настройка Друпала:

# Копируем default.settings.php и переименовываем в settings.php

sudo cp /usr/share/nginx/html/drupal/sites/default/default.settings.php /usr/share/nginx/html/drupal/sites/default/settings.php

# Даем права на запись:

sudo chmod a+w /usr/share/nginx/html/drupal/sites/default/settings.php

# Меняем права для директории:

sudo chmod a+w /usr/share/nginx/html/drupal/sites/default

# Устанавливаем php модуль:

sudo apt-get install php5-gd

# Рестартим

sudo service php5-fpm restart

## Настраиваем виртуальные хосты:

# Копируем дефолтный конфиг и переименовываем в drupal (конфиг для нашего сайта):

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/drupal

# Редактируем наш конфиг:

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

Как то так:

server { listen 80; root /usr/share/nginx/html/drupal; index index.php index.html index.htm; server_name 162.243.9.129; location / { try_files $uri $uri/ /index.php?q=$uri&$args; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html/drupal; } # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9$ location ~ \.php$ { #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;   }

Т.е.:

- поменяли root на /usr/share/nginx/html/drupal

- поменяли server_name из localhost на доменное имя твоего сайта или его IP

- поменяли “try_files $uri $uri/ /index.html;” на “try_files $uri $uri/ /index.php?q=$uri&$args;”

!!! Есть более интересный вариант, если установить

sudo apt-get install nginx-doc

то в директории /usr/share/doc/nginx-doc/examples/, уже есть готовый конфиг, заточенный под друпал:

cd /usr/share/doc/nginx-doc/examples/ gunzip drupal.gz

# Активируем конфигурацию:

sudo ln -s /etc/nginx/sites-available/drupal /etc/nginx/sites-enabled/drupal

# Удаляем дефолтную:

sudo rm /etc/nginx/sites-enabled/default

# Перегружаем сервер:

sudo service nginx restart

# Открываем IP сайта (или домен)/drupal/setup.php и устанавливаем друпал.
——————————————————————————————-

А вот здесь уже готовый конфиг, но немного сложноватый:

https://github.com/perusio/drupal-with-nginx/blob/D7/README.md

3. Настройка мультисайтинга:

https://www.digitalocean.com/community/articles/how-to-enable-multiple-s…

4. настройка DNS:

я просто добавил домены в ДНС на оушене и прописал у регистратора – ns1.digitalocean.com ns2.digitalocean.com ns3.digitalocean.com.

5. Кэширование:

http://www.echoditto.com/blog/more-drop-bucket-drupal-8-nginx-and-microc…

# Микрокэширование

в файле конфига твоего сайта на nginx добавляешь

location ~ \.php$ { set $no_cache ""; if ($request_method !~ ^(GET|HEAD)$) { set $no_cache "1"; } if ($no_cache = "1") { add_header Set-Cookie "_mcnc=1; Max-Age=2; Path=/"; add_header X-Microcachable "0"; } if ($http_cookie ~ SESS) { #checks an auth'd user set $no_cache "1"; } #... lots of fastcgi stuff to do the caching }

http://valic.me/article/how-configure-nginx-php-fpm-mysql-memcached-apc-…

http://www.accella.net/drupal-7-memcached-apc-nginx-php5-fpm-squeeze-opt…

# Сжатие gzip:

http://stackoverflow.com/questions/15999606/enable-gzip-compression-with…

я просто вот так раскомментировал в конфиге nginx /etc/nginx/nginx.conf:

## # Gzip Settings ## gzip on; gzip_disable "msie6"; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

6. Защита:

- связка nginx, logwatch, fail2ban и ufw http://habrahabr.ru/post/153589/

пока только fail2ban поставил, якобы из коробки работает, посмотрим:

- http://putty.org.ru/articles/fail2ban-ssh.html

Мэмкеш настроить пока не получилось (php 5.4).

Панель не ставил – но хорошие отзывы по веста.

7. Для внеклассного чтения подробные/детальные руководства/гайды:

Очень неплохое руководства в друпал-nginx группе: https://groups.drupal.org/node/388488

С картинками + защита от атак +SSL: http://dashohoxha.blogspot.ru/2012/10/using-nginx-as-web-server-for-drup…

Короткое, но достойное + APC: http://blog.celogeek.com/201209/202/how-to-configure-nginx-php-fpm-drupa…

PS: Кому что непонятно пишите в коментах, это позволит мне лучше расписать тему.

Источник: http://www.drupal.ru/node/106587

[РЕШЕНО] настройка Nginx на Digital Ocean под Drupal

Настраиваю сервер Nginx для сайта c Domain Access на Диджитал Оушене.

Есть ли какие-нибудь особенности настройки его под Друпал для максимальной пользы?

———————————————————————————————————————-

Настроил, может кому пригодится, использовал:

каплю – Debian 7 64 php 5.4 NGINX

1. Перенос:

# использовал SCP:

https://www.digitalocean.com/community/articles/how-to-migrate-a-mysql-d…

Но можно и проще (?):

https://www.digitalocean.com/community/articles/how-to-use-sshfs-to-moun…

Вроде неплохая подборка видео по переносу:

http://www.youtube.com/playlist?list=PL91978F0CB6BC302B

2. Установка сервера:

https://www.digitalocean.com/community/articles/how-to-install-drupal-wi…

Написано под Ubuntu 13.04, я ставил в Debian 7, всё норм.

# Сначала ставим всё необходимое:

sudo apt-get update   sudo apt-get install mysql-server php5-mysql   sudo apt-get install nginx

# Запускаем сервер:

sudo service nginx start

# Устанавливаем PHP:

sudo apt-get install php5-fpm

# Настраиваем PHP:

открываем php.ini

sudo nano /etc/php5/fpm/php.ini

# Меняем на 0 (для безопасности):

cgi.fix_pathinfo=0

# Далее редактируем конфигурацию php5-fpm:

sudo nano /etc/php5/fpm/pool.d/www.conf

# В нём находим строку listen = 127.0.0.1:9000, и меняем 27.0.0.1:9000 на /var/run/php5-fpm.sock:

listen = /var/run/php5-fpm.sock

# Рестарт php5-fpm:

sudo service php5-fpm restart

# Загружаем друпал:

wget http://ftp.drupal.org/files/projects/drupal-7.25.tar.gz

7.25 – меняем на актуальную версию.

(я делал драшем)

# Распаковываем:

tar xzvf drupal-7.25.tar.gz

7.25 – меняем на актуальную версию.

## Создаем БД и юзера:

# Заходим:

mysql -u root -p

# Создаем БД:

CREATE DATABASE drupal;

вместо drupal – можно любое название

# создаем юзера:

CREATE USER drupaluser@localhost;

# Устанавливаем пароль нового юзера password

SET PASSWORD FOR drupaluser@localhost= PASSWORD("password");

# Даем юзеру привилегии:

GRANT ALL PRIVILEGES ON drupal.* TO drupaluser@localhost IDENTIFIED BY 'password';

# Обновляем MySQL:

FLUSH PRIVILEGES;

# Выходим из MySQL:

exit

# Копируем файлы:

Директория сервера в Ubuntu 13.04 находится в /usr/share/nginx/html/.

(У меня в Debian 7 в /usr/share/nginx/www/)

# Создаем директорию drupal:

sudo mkdir /usr/share/nginx/html/drupal

# Копируем файлы друпала из своей домашней директории:

cd ~ sudo mv drupal-7.25/* /usr/share/nginx/html/drupal/

## Настройка Друпала:

# Копируем default.settings.php и переименовываем в settings.php

sudo cp /usr/share/nginx/html/drupal/sites/default/default.settings.php /usr/share/nginx/html/drupal/sites/default/settings.php

# Даем права на запись:

sudo chmod a+w /usr/share/nginx/html/drupal/sites/default/settings.php

# Меняем права для директории:

sudo chmod a+w /usr/share/nginx/html/drupal/sites/default

ИЛИ Есть классный скрипт (https://www.drupal.org/node/244924) который автоматически проставляет везде нужные права :

<pre>#!/bin/bash if [ $(id -u) != 0 ]; then printf "This script must be run as root.\n" exit 1 fi drupal_path=${1%/} drupal_user=${2} httpd_group="${3:-www-data}" # Help menu print_help() { cat <<-HELP This script is used to fix permissions of a Drupal installation you need to provide the following arguments: 1) Path to your Drupal installation. 2) Username of the user that you want to give files/directories ownership. 3) HTTPD group name (defaults to www-data for Apache). Usage: (sudo) bash ${0##*/} --drupal_path=PATH --drupal_user=USER --httpd_group=GROUP Example: (sudo) bash ${0##*/} --drupal_path=/usr/local/apache2/htdocs --drupal_user=john --httpd_group=www-data HELP exit 0 } # Parse Command Line Arguments while [ $# -gt 0 ]; do case "$1" in --drupal_path=*) drupal_path="${1#*=}" ;; --drupal_user=*) drupal_user="${1#*=}" ;; --httpd_group=*) httpd_group="${1#*=}" ;; --help) print_help;; *) printf "Invalid argument, run --help for valid arguments.\n"; exit 1 esac shift done if [ -z "${drupal_path}" ] || [ ! -d "${drupal_path}/sites" ] || [ ! -f "${drupal_path}/core/modules/system/system.module" ] && [ ! -f "${drupal_path}/modules/system/system.module" ]; then printf "Please provide a valid Drupal path.\n" print_help exit 1 fi if [ -z "${drupal_user}" ] || [ $(id -un ${drupal_user} 2> /dev/null) != "${drupal_user}" ]; then printf "Please provide a valid user.\n" print_help exit 1 fi cd $drupal_path printf "Changing ownership of all contents of "${drupal_path}":\n user => "${drupal_user}" \t group => "${httpd_group}"\n" chown -R ${drupal_user}:${httpd_group} . printf "Changing permissions of all directories inside "${drupal_path}" to "rwxr-x---"...\n" find . -type d -exec chmod u=rwx,g=rx,o= '{}' \; printf "Changing permissions of all files inside "${drupal_path}" to "rw-r-----"...\n" find . -type f -exec chmod u=rw,g=r,o= '{}' \; printf "Changing permissions of "files" directories in "${drupal_path}/sites" to "rwxrwx---"...\n" cd sites find . -type d -name files -exec chmod ug=rwx,o= '{}' \; printf "Changing permissions of all files inside all "files" directories in "${drupal_path}/sites" to "rw-rw----"...\n" printf "Changing permissions of all directories inside all "files" directories in "${drupal_path}/sites" to "rwxrwx---"...\n" for x in ./*/files; do find ${x} -type d -exec chmod ug=rwx,o= '{}' \; find ${x} -type f -exec chmod ug=rw,o= '{}' \; done echo "Done settings proper permissions on files and directories"

Копируешь код данный выше в файл и называешь его, нарример “fix-permissions.sh” и запускаешь: <pre>sudo bash fix-permissions.sh --drupal_path=your/drupal/path --drupal_user=your_user_name</pre> т.е. с нашими данными, это примерно так: <pre>sudo bash fix-permissions.sh --drupal_path=/usr/share/nginx/www/директория_нашего_сайта --drupal_user=www-data</pre>

# Устанавливаем php модуль:

sudo apt-get install php5-gd

# Рестартим

sudo service php5-fpm restart

## Настраиваем виртуальные хосты:

# Копируем дефолтный конфиг и переименовываем в drupal (конфиг для нашего сайта):

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/drupal

# Редактируем наш конфиг:

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

Как то так:

server { listen 80; root /usr/share/nginx/html/drupal; index index.php index.html index.htm; server_name 162.243.9.129; location / { try_files $uri $uri/ /index.php?q=$uri&$args; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html/drupal; } # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9$ location ~ \.php$ { #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;   }

Т.е.:

- поменяли root на /usr/share/nginx/html/drupal

- поменяли server_name из localhost на доменное имя твоего сайта или его IP

- поменяли “try_files $uri $uri/ /index.html;” на “try_files $uri $uri/ /index.php?q=$uri&$args;”

!!! Есть более интересный вариант, если установить

sudo apt-get install nginx-doc

то в директории /usr/share/doc/nginx-doc/examples/, уже есть готовый конфиг, заточенный под друпал:

cd /usr/share/doc/nginx-doc/examples/ gunzip drupal.gz

# Активируем конфигурацию:

sudo ln -s /etc/nginx/sites-available/drupal /etc/nginx/sites-enabled/drupal

# Удаляем дефолтную:

sudo rm /etc/nginx/sites-enabled/default

# Перегружаем сервер:

sudo service nginx restart

# Открываем IP сайта (или домен)/drupal/setup.php и устанавливаем друпал.
——————————————————————————————-

А вот здесь уже готовый конфиг, но немного сложноватый:

https://github.com/perusio/drupal-with-nginx/blob/D7/README.md

с этим (от perusio) конфигом используем сборку сервера из http://debian.perusio.net/unstable/

3. Настройка мультисайтинга:

https://www.digitalocean.com/community/articles/how-to-enable-multiple-s…

4. настройка DNS:

я просто добавил домены в ДНС на оушене и прописал у регистратора – ns1.digitalocean.com ns2.digitalocean.com ns3.digitalocean.com.

5. Кэширование:

http://www.echoditto.com/blog/more-drop-bucket-drupal-8-nginx-and-microc…

# Микрокэширование

в файле конфига твоего сайта на nginx добавляешь

location ~ \.php$ { set $no_cache ""; if ($request_method !~ ^(GET|HEAD)$) { set $no_cache "1"; } if ($no_cache = "1") { add_header Set-Cookie "_mcnc=1; Max-Age=2; Path=/"; add_header X-Microcachable "0"; } if ($http_cookie ~ SESS) { #checks an auth'd user set $no_cache "1"; } #... lots of fastcgi stuff to do the caching }

http://valic.me/article/how-configure-nginx-php-fpm-mysql-memcached-apc-…

http://www.accella.net/drupal-7-memcached-apc-nginx-php5-fpm-squeeze-opt…

# Сжатие gzip:

http://stackoverflow.com/questions/15999606/enable-gzip-compression-with…

я просто вот так раскомментировал в конфиге nginx /etc/nginx/nginx.conf:

## # Gzip Settings ## gzip on; gzip_disable "msie6"; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

6. Защита:

- связка nginx, logwatch, fail2ban и ufw http://habrahabr.ru/post/153589/

пока только fail2ban поставил, якобы из коробки работает, посмотрим:

- http://putty.org.ru/articles/fail2ban-ssh.html

Мэмкеш настроить пока не получилось (php 5.4).

Панель не ставил – но хорошие отзывы по веста.

7. Для внеклассного чтения подробные/детальные руководства/гайды:

Очень неплохое руководства в друпал-nginx группе: https://groups.drupal.org/node/388488

С картинками + защита от атак +SSL: http://dashohoxha.blogspot.ru/2012/10/using-nginx-as-web-server-for-drup…

PS: Кому что непонятно пишите в коментах, это позволит мне лучше расписать тему.

________________________________________________________________________________________________________________

<<<ПРОДОЛЖЕНИЕ ЗДЕСЬ>>>, т.к. сюда уже не вмещается.

Источник: http://www.drupal.ru/node/106587

анонимное кэширование nginx

Небольшая статья по кэшированию nginx для анонимных пользователей друпала(хабраюзеры могут поддержать)
http://habrahabr.ru/blogs/drupal/110958/

Источник: http://drupal.ru/node/54948

Локальный веб-сервер для разработчиков Drupal

Комплект:
1) php-5.2.4
2) MySQL-5.0.45
3) nginx-0.8.50
4) phpmyadmin-2.6.1
5) drupal-6.19

Требования:
1) Win XP, 2000, 98 (Win7 не тестировалась)
2) Не занятый диск N:

Установка:
1) Распаковать архив
2) Для запуска использовать start.bat
3) Для остановки stop.bat

Как работает:
Обращаю Ваше внимание, что для работы необходим диск N:, диск будет автоматически смонтирован при запуске и отключиться при остановке сервера.

В комплекте уже есть установленный Drupal 6, доступный по адресу d6.
login: admin
pwd: admin

phpmyadmin – доступен по адресу localhost.

Как добавить хосты? Всё просто, надо всего лишь создать папку в N:\home\ваш_сайт, в ней необходимо создать папку www.
Пример: N:\home\d6\www
И перезапустить сервер.

После запуска Ваш новый сайт автоматически будет добавлен в файл hosts.


Особенности:
В отличии от Denwer здесь используется веб-сервер nginx и php в режиме fast-cgi.

Создание такой сборки стало возможно после выхода сервера nginx для ОС Windows.

Немного о конфигурации:
Nginx настроен на автоматическое определение root-директоии, это тспользуеться для виртуальных хостов.
В конфигурации прописаны правила для Drupal, по рекомендации Сысоева.

php и MySQL были взяты из Denwer3, с конфигурацией составленной Котеровым.

Зачем это всё, если уже есть Denwer?
Целью данной сборки было тестирование работы Drupal под веб-сервером nginx и php fast-cgi. Подбор параметров и т.д.
Эта сборка не предназначена для конечных сайтов (понадобиться изменение конфигов).

Конструктивная критика приветствуется)

Загрузить

Оригинал http://drupal.by/node/555

Источник: http://www.drupal.ru/node/50305

How to! – nginx для мультисайтинга с кэшированием для анонимов.

Хочу рассказать вам, друзья, о том как сделать связку nginx+apache для друпала. Это будет не просто связка. Это будет очень универсальный, работающий в условиях мультисайтинга, доменов третьего уровня и нестандартных портов (например у меня 6969 и на нем висит виртуальный сервер) конфиг. Еще эта связка будет иметь мегакэширование страниц для анонимов – без всяких дополнительных модулей drupal firebug выдает время загрузки страници порядка 80ms (разумеется на виртуальном сервере в локальной сети).


Рабочая лошадка: ubuntu server 9.04

Условия: apache, php, mysql, php-apc, drupal уже имеются и все работает. Drupal лежит в /var/www/d6. На drupal’е через мультисайтинг висят сайты site.ru, site2.ru (из локальной сети у меня они имеют адрес следующего вида: http://localhost.site.ru:6969/, http://localhost.subsite.site.ru:6969/, я это к тому, что и в таких нестандартых условиях все будет работать как надо).

Установка: в репозиторях ubuntu nginx несвеж, а нам нужен первачек. Делаем так:

echo "deb-src http://ppa.launchpad.net/jdub/ppa/ubuntu hardy main" >> /etc/apt/sources.list echo "deb http://ppa.launchpad.net/jdub/ppa/ubuntu hardy main" >> /etc/apt/sources.list aptitude update aptitude install nginx


Конфингурация apache2:
В /etc/apache2/ports.conf правим порты на 8080.

NameVirtualHost *:8080 Listen 8080

Создаем /etc/apache2/sites-enabled/d6:

<VirtualHost *:8080> ServerName site.ru DocumentRoot /var/www/d6 ServerAlias *.site.ru </VirtualHost> <VirtualHost *:8080> ServerName site2.ru DocumentRoot /var/www/d6 ServerAlias *.site2.ru </VirtualHost>

Думаю здесь все ясно и в комментариях не нуждается.

Конфингурация nginx:
Создаем /etc/nginx/sites-enabled/d6:

# здесь лежит кэш proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=one:20m; proxy_temp_path /var/cache/nginx/temp; proxy_cache_valid any 10m;     server { server_name .site.ru .site2.ru; set $cached 0; listen *:80; #нужно чтобы отдавать красивую 500 ошибку с себя error_page 502 503 504 509 /500.html; #если где-то что-то забыли, то будет работать схема прозрачного проксирования error_page 404 = @nocached; expires epoch; root /var/www/d6; rewrite ^(/manager/.*)$ https://$http_host$1 permanent; #статику будем брать с frontend и если отсутствует, то скачивать location ~* ^.+\.(jpg|jpeg|gif|gz|zip|flv|rar|wmv|avi|css|swf|png|htc|ico|mpeg|mpg|txt|mp3|mov|js|ttf)$ { expires 1y; error_page 404 = @cached; } #кэшируем статику на себя location @fetch { proxy_pass http://127.0.0.1:8080; proxy_store on; proxy_temp_path /var/cache/nginx/temp; proxy_set_header Host mydomain; proxy_set_header If-Modified-Since ""; }   #для зарегистрированных проксируем прозрачно location @nocached { proxy_pass http://127.0.0.1:8080; proxy_redirect default; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }   #гостям проксируем и кэшируем location @cached { proxy_pass http://127.0.0.1:8080; proxy_redirect default; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_cache one; proxy_cache_valid 200 301 302 304 5m; proxy_cache_key "$request_method|$http_if_modified_since|$http_if_none_match|$host|$request_uri"; proxy_hide_header "Set-Cookie"; proxy_ignore_headers "Cache-Control" "Expires"; }   #иначе морда домена не будет работать location = / { return 404; }   location / { #если нет нашей куки if ($http_cookie !~ "DRUPAL_UID" ) { set $cached 1; } if ($request_method = POST) { set $cached 0; } if ($request_method != GET) { set $cached 0; } if ($cached = 1) { error_page 404 405 502 504 = @cached; break; } if ($cached = 0) { error_page 404 405 502 504 = @nocached; break; } } }

Все, товарищи. Перезапускаем apache и nginx, радуемся.

Источник вдохновения: http://habrahabr.ru/blogs/nginx/76315/

Послесловие: Все это хорошо только если большинство ваших пользователей анонимны. Меня в данном случаи радует в первую очередь то, что не важно как у вас сконфигурирован сам drupal, все будет кэшироваться и хорошо кэшировать. Конфиг универсален: в данном случаи мои сайты вертятся на установленой системе которая лежит в /var/www/d6, ни каких проблем не составит создать еще один конфиг скажем для /var/www/d7 – нужно будет только поменять адреса и доменные имена. Конфиг сделан “на глаз” хоть и протестирован, а что может из него вылезти я не знаю – прошу участия в его модернизации. Спасибо за внимание.

Источник: http://www.drupal.ru/node/48471

© 2009 Обзор CMS