Если у вас есть посещаемый сайт и свой сервер или vps, возможно вам стоит заменить apache на более легкий сервак.
Я выбрал nginx. Есть 2 варианта его использования:
1) В качестве прокси на пути к апачу. В этом случае он отдает всю статику самостоятельно, а пхп запросы отсылает апачу. Апач их обрабатывает и отдает назад результат.
2) В качестве полноценного сервера, без апача
Рассмотрим 2й вариант.
-
Итак, для работы nginx необходимо собрать пхп в режиме fastcgi.
Скачиваем пхп (я качал 4.4.7, потому что я этой версии доверяю больше). Распаковываем, заходим в папку (через консоль)./configure --prefix=/opt/php --enable-fastcgi --with-mysql=/usr --enable-mbstring
...
make
..
make install--prefix=/opt/php --enable-fastcgi --with-mysql=/usr --enable-mbstring
Самая простая нужная нам сборка пхп. По пунктам:
--prefix= - отвечает за то в какую папку будет установлен пхп. Нужно (если нужно), чтобы не устанавливать поверх старого.
--enable-fastcgi - включаем режим fastcgi
--with-mysql=/usr - необходимо для нормального подключения к бд (версий 4.x)
--enable-mbstring - чтобы друпал не ругался на отсутствие поддержки юникода.
Возможно вам придется добавить еще что-нибудь. Пересобрать несложно - Для запуска пхп можно использовать утилиту spawn-fcgi из пакета lighttpd.
Для этого необходимо скачать lighttpd, аналогично распаковать, зайти в папку../configure
..
make
..В этом случае make install мы не делаем, ибо незачем
Потом копируем собранный spawn-fcgi собранных программ (ну путь у себя смотрите)cp src/spawn-fcgi /usr/bin/spawn-fcgiПосле этого запускаем пхп
/usr/bin/spawn-fcgi -f /opt/php/bin/php -a 127.0.0.1 -p 8888-f - пишем путь до собранного пхп (до бинарника)
-a - по какому айпи слушать (127.0.0.1 менять не надо)
-p - по какому порту - Скачиваем nginx, распаковываем, заходим в папку.
./configure
..
make
..
make installПри ./configure может выдать ошибку "the HTTP rewrite module requires the PCRE library". Что с этим делать читаем в мануалах к nginx.
При конфигурировании сборки без параметров nginx будет установлен в каталог /usr/local/nginx/.
Настраиваем nginx (файл nginx.conf, находится в папке nginx/conf/)
См. прикрепленный файл.
В приведенной конфигурации есть любопытных моментов
1) /OUR_WWW_FILES - необходимо заменить на полный путь файлам друпала на сервере
2) тут слушается порт 81 (использовал для тестов)
После успешной установки запускаем nginx с правами пользователя root:
/usr/local/nginx/sbin/nginx
Команда
ps ax -o pid,ppid,user,%cpu,vsz,wchan,command|egrep '(nginx|PID)'
покажет запущен у нас nginx или нет.
ну и соответственно example.ru:81 покажет нормально он у нас работает или нет
Вообще, желательно вдумчиво прочитать мануалы по nginx. Удачной установки
Вложение | Размер |
---|---|
nginx.txt | 1.61 КБ |
Комментарии
Есть 2 варианта его использования:
а мне больше нравится вариант 3.
все пути к картинкам, видео и другой статике задаются в виде http://media.домен.ру/ и их отдаёт nginx без участия апача.
домен.ру работает на апаче без nginx - кэшированием занимается цмс(это правильно)
этот вариант проще в настроке и более расширяем - остаётся возможность использовать любые модули апача, не мучаясь с nginx.
можно и так, однако вы не совсем правы насчет кеширования. Nginx не кеширует
Когда пользователь запрашивает что-то апач держит процесс с начала скачки юзером, до конца. А если у юзера слабый канал, то скачка может идти долго. И все это время будет висеть процесс апача (довольно тяжелый кстати). А если, nginx в роли прокси, то апач работает ровно столько, сколько надо для обработки пхп. В это время висит процесс nginx
канал слабый? ну и что. проблем-то. я ж и говорю - весомую статику отдавать с отдельного субдомена через nginx
а какой бы слабый ни был канал у пользователя - текст отдастся быстро(к тому же сначала прогружается текст, а потом картинки с флэшами). а если апач будет отдавать nginx-у, а он юзеру-это ж сколько ресурсов просто на переключение процессов уйдёт? хрен редьки не слаще, как говорится
Каждому свое
Я например не собираюсь использовать апач вообще. Пока не придумал, чего я не могу сделать с помощью nginx
mod_security под Apache.
Под Nginx'ом ничего подобного нет и не предвидится.
И это единственное, что меня держит от полного отказа от Apache
А конфиг вы сами составляли или позаимствовали где? Просто столько вариантов этих конфигов, а подробного описания что и какая директива дает и надо ли ее ставить не найдешь особо
Подробная документация есть на сайте nginx, причем в оригинале на русском
cwer, спасибо за статью! Ты меня опередил - я только собирался описать опыт установки друпала на nginx с поддержкой clean url. Вообще мне понравилось как работает этот вебсервер, видел как работает на хостах с очень высокой нагрузкой (правда не под друпалом).
axel, было бы за что
я пока только для тестов ставил. Возможно что-то упустил или что-то неправильно. Вроде работает
Я уже вижу эту статью в подшивке
Персонаж ползает на коленях, бьется головой об пол. Пол издает глухие звуки, череп звонко звенит. До ушей Axel доносятся завывания - "Book! Подшивка! Дай!" и еще бормотания.
Да будет вики!
Категоризацию в стиле book прикрутить к основному сайту можно тоже, или с вики скрестить? Маразмус, но был уже тут раздел book когда-то, повторять в чистом виде эту штуку больше не хочется.
судя по .htaccess для друпала требуется mod_expires, хотя по моему опыту нормально работает и при отключенном, возможно какие--то функции и не пашут, пока это критично не было, но вдруг? как у nginx с поддержкой модулей - аналогов апачевских?
и вообще, что делать с .htaccess? у себя я без проблем его удалил, переписав в настройки виртуалхоста, но если придется переписывать правила для mod_rewrite - сам не потяну (а у меня один сайт интегрирован с пхпбб, там конфиг тяжелый, в основном rewrite команды)
ЗЫ. с выходом релиза Boost задумался о nginx, эта связка дала бы кучу плюсов но...
насчет mod_expires не знаю, а тот конфиг, что я написал включает поддержку ЧПУ для друпала)
насчет пхпбб не знаю. Может стоит попросить или нанять кого-то переписать реврайты
Результат-то есть? "Вроде шустрее стало", да? Или может даже тестирование "до" и "после" было?
Не было, как-то не складывается у меня с тестированием
я вообще новичок в этих делах совсем (пхп например собирал первый раз), так что извините
но я вижу друпал.ру на апаче. Может axel поставит nginx и сделает тесты
Здесь скорее не в "шустрее" фишка, а в меньшем потреблении памяти.
Сейчас пустил nginx под нагрузку, пока пациент чувствует себя хорошо и забирает метров на 300 меньше оперативки чем апач
Сайт работает по ощущениям быстрее
Правда пришлось перекомпилить пхп (забыл поддержку gd)
300М - по сравнению с чем? абсолютные значения как-то малоинтересны
Из гига оперативки сейчас свободно 500, а раньше около 200, или меньше
я обычно ставил nginx только как фронтенд к апачу, а прямо так не пробовал - интересно - как в нем работают short-url и все остальное что требует друпал?
ну и еще - компилировать из сырцов уже не обязательно - на дворе 21-й век - пользуйтесь готовыми бинарниками yum install или apt-get install )
ЧПУ работает нормально
насчет компилирования. Даже мне было не лень набрать три команды (с учетом того, что при компилировании можно выбрать различные конфигурации, это все таки нужно)
ну может я хочу его из порта для фряхи собрать? вообще, все публикуют, а вот для фряхи ключей не дают((((
линукс раздувается так, что скоро станет 2-й виндой....
А под фряхой и готовый пакет есть
Кстати, если кто не заметил, drupal.ru сейчас работает на nginx Правда boost пришлось по этому поводу отключить. Осталось найти время и перевести модреврайтовские инструкции буста в правила nginx.
тесты не делал?)
сравнение потребляемой памяти, быстродействие?:)
Axel, при всем уважении - почему на друпал.орг буки есть, а на друпал.ру нет?
Все, что нужно - легкое включение материалов (статей блога и записей форума) в иерархию определенного рода. Фиг с ним, не нужно на первое время светить этот бук на главной, хватит и ссылки в меню пользователя.
Мой основной аргумент - ЛЕГКОСТЬ добавления документов в иерархию. Все. Викисты пусть занимаются вики. Мне вот лично не будет лень перелопатить весь друпал.ру и собрать статьи в иерархию подшивки book. Но меня ломает и будет ломать кидать тексты в вики, потому что это требует на порядок больше времени и усилий.
Axel. В порядке эксперимента? НУ ПАЖАЛУСТА....
P.s. В качестве контраргументов лучше привести то, что было с book до того, когда она исчезла. Некому было работать с ней? Или были проблемы с производительностью? Или была запутанная иерархия? Я буду стараться избегать этих проблем, если они будут описаны в качестве "так делать не рекомендуется".
Спасибо
Я в отдельном топике приведу аргументы, почему на drupal.ru не хочу ставить book для документации. Хотя для других целей он вероятно будет задействован.
Вот ещё интересная на мой взгляд статейка по применениям nginx: http://blog.kovyrin.net/2006/04/17/typical-nginx-configurations/
IIS Рулит
Поставил nginx+php-fastcgi. Подскажите плиз как включить Clean URLs ?
В записи прилеплен файл с моей настройкох nginx. Там есть поддержка чпу
сам nginx вроде урлы теперь обрабатывет нормально, но как включить clean urls в самом друпале ? Run test не прокатывает -> радио батон в админке задейзеблен
таблица variable
clean_url s:1:"1";
да вот что-то не помогло
хм. использовал пример конфига. только вместо fastcgi перенапраляю пхп запрос на апач локалхостный.
на выходе получается, что все картинки которые формируются друпалом имеют ссылку http://127.0.0.1/files/la-la-la.jpg
ага - и Imagecache перестает работать
Это лечится. В конфиге nginx, там где переправляем запросы апачу:
proxy_pass ....;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
еще вопрос по nginx
иногда вылетает "502 bad gateway", но беда не в этом - беда в том что по нажатии "обновить" - он в течении некоторого интервала упорно выдает из кеша страничку об ошибке не пытаясь еще раз перепослать запрос - как можно или уменьшить этот интервал или сделать что бы он это не кешировал
Напишите пожалуйста подробнее как сделать так, чтобы ЧПУ работали на друпале, что и где надо прописать? (брал vds с установленным nginx и теперь не могу разобраться)
Напишите пожалуйста подробнее как сделать так, чтобы ЧПУ работали на друпале, что и где надо прописать? (брал vds с установленным nginx и теперь не могу разобраться)
Интересный момент - точно также у меня работает сервер, и тянет несколько сайтов без проблем. Но потом возникает проблема поставить Imagecache. Все, тупик. Если нет Апача, то найти как заставить Nginx работать с Imagecache не получается. Есть какие-то варианты (точнее один) конфигов, но у меня он не сработал.
Я имею в виду вот этот
location ~/files/imagecache/.*\.(jpg|jpeg|gif|png)$ {
if (!-f $request_filename) {
rewrite ^/(.*)$ /index.php?q=$1;
}
}
Если есть вариант, как заставить nginx нормально обрабатывать и выдавать результаты работы Imagecache, поделитесь пожалуйста!
А я хочу поставить и наладить nginx как прокси, чисто для освобождения памяти. Настроил и поставил. НО не до конца. Не происходит обработка php. Ну и соответственно работу мускуля тоже в итоге не могу проверить...
Вот мой конфиг nginx.conf:
worker_processes 1; #Количество процессов
#error_log logs/error.log;
error_log logs/error.log notice; #Формат записи в лог ошибок
#error_log logs/error.log info;
pid logs/nginx.pid; #Место расположение PID файла
events {
worker_connections 1024; # Максимальное количество рабочих процессов.
}
http { # Начало секции фронт-энда.
include mime.types; # Подключаем mime-типы для опознания контента.
default_type application/octet-stream; # Тип по умолчанию, если mime не опознан.
# Логирование. Полезно для дебага.
#log_format main '$remote_addr - $remote_user [$time_local] $request '
# '"$status" $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
# Лог доступа. Полезно для дебага.
#access_log logs/access.log main;
sendfile on; # Включить возможность отдавать файлы напрямую.
#tcp_nopush on; # Ээ.. Забыл, вернее не знаю
#keepalive_timeout 0;
keepalive_timeout 65; # Тут думаю понятно
#gzip on; #Включить/выключить принудительное сжатие страниц gzip
#######################################################################
# localhost // Секция для локалхоста.
########################################################################
server { # Инициализация
listen 80; # На каком порту слушать
server_name localhost; # имя сервера. возможно указывать несколько алиасов, перечисляя через запятую.
#charset koi8-r;
#access_log logs/host.access.log main;
location / { # Указываем куда будет отдаватся запрос далее.
proxy_pass http://127.0.0.1:8081/; # Перебрасываем на локалхост:8081
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
} # Закончилось.
# Поскольку NginX будем использовать в качестве промежуточного сервера \
# то все динамические страницы будут обрабатыватся самим apache, а \
# статические отдаем напрямую самим nginx
location ~* ^.+.(doc|xls|exe|pdf|ppt|txt)$ {
root /opt/www/localhost/htdocs/; # откуда будут братся статические файлы.
}
error_page 500 502 503 504 /50x.html; # Обработка ошибок
location = /50x.html {
root html; # Директория /usr/local/nginx/html Если апач не отвечает, то \
# будет использоватся данная страница ошибки.
}
# Запретим все попытки доступа к .htaccess и .htpasswd
location ~ /.ht {
deny all;
}
}
#######################################################################
# /localhost
########################################################################
########################################################################
# dnevnikdrupal
########################################################################
server {
listen 80;
server_name dnevnikdrupal;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://127.0.0.1:8082/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
# Static files location
location ~* ^.+.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|wav|bmp|rtf|js)$ {
root /opt/www/dnevnikdrupal/htdocs/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~ /.ht {
deny all;
}
}
#######################################################################
# /dnevnikdrupal
########################################################################
########################################################################
# test
########################################################################
server {
listen 80;
server_name test;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://127.0.0.1:8083/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
# Static files location
location ~* ^.+.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|wav|bmp|rtf|js)$ {
root /opt/www/test/htdocs/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~ /.ht {
deny all;
}
}
#######################################################################
# /test
########################################################################
########## HTTPS #####################
# HTTPS server
#
#server {
# listen 443;
# server_name localhost;
# ssl on;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_timeout 5m;
# ssl_protocols SSLv2 SSLv3 TLSv1;
# ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
########## /HTTPS #####################
}
И... конфигурационная часть отвечающая за виртуалхосты в апаче:
<VirtualHost *:8081>
ServerName localhost
ServerAlias localhost
ServerAdmin admin@localhost
DocumentRoot "/opt/www/localhost/htdocs"
#ScriptAlias /mailman/ "/usr/local/mailman/cgi-bin/"
#Alias /pipermail/ "/usr/local/mailman/archives/public/"
<Directory "/opt/www/localhost/htdocs">
Options All
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
NameVirtualHost *:8082
<VirtualHost *:8082>
ServerName dnevnikdrupal
ServerAlias dnevnikdrupal
ServerAdmin admin@dnevnukdrupal
DocumentRoot "/opt/www/dnevnikdrupal/htdocs"
<Directory "/opt/www/dnevnikdrupal/htdocs">
Options All
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
NameVirtualHost *:8083
<VirtualHost *:8083>
ServerName test
#ServerAlias www.arp.org.ua
ServerAdmin admin@test
DocumentRoot "/opt/www/test/htdocs"
<Directory "/opt/www/test/htdocs">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Как мне подкорректировать nginx, чтобы php обрабатывался именно Apache2 ? Через fastcgi не хочу.
День добрый!
Будьте добры, подскажите как правильно откорректировать конфиг чтобы работали чистые ссылки
ЗЫ используется нгинкс без апача
listen 80;
listen localhost:80;
server_name localhost;
access_log /var/www/vhosts/localhost/log/localhost-access.log;
location / {
root /var/www/vhosts/localhost/www;
index index.html index.htm index.php;
}
location ~ \.php$ {
root /var/www/vhosts/localhost/www/php;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param script_FILENAME /var/www/vhosts/localhost/www/php$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
location ~* \.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|wav|bmp|rtf|js)$ {
root /var/www/vhosts/localhost/www/php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/nginx-default;
}
}
Много вопросов про чистые ссылки. Вот ответ http://brainstorm.name/drupal-and-nginx-rewrites
Ответ дурной.
Прежде чем пиарить свой блог, почитал бы для начала документацию к nginx
http://sysoev.ru/nginx/docs/faq.html
Прежде чем утверждать что блог мой, почитал бы кто его автор. Документацию Сысоева с успехом читаю. И я просто ответил на конкретный вопрос, потому что некоторые так и не научились пользоваться поиском.