Сегодня пришла в моцк мысль О_о - написать мини статейку, чтобы кашу после 3-х дней мытарств переварить, о личном опыте настройки связки:
CentOS 5.4 с установкой
nginx-0.8.21-1.el5 +
php-5.2.11-2.el5 +
httpd-2.2.14-1.el5 +
mysql-server-5.0.86-1.el5 и всё это должно работать под управлением
ISPmanager-Lite 4.3.32 Итак, после установки в панеле VDS выбранной системы CentOS 5.4 с уже установленными пакетами php, httpd, mysql-server, и разумеется без nginx устанавливаем панель ISPmanager-Lite:
Пользовался программой SSH Explorer в которой есть встроенный SFTP, хорошая прожка, рекомендую!
1. Первым делом удалим пакеты установленные вместе с системой, чтобы установка панели прошла удачно, иначе возможны сбои, и потом геморроя не оберешься.
yum remove httpd
yum remove php
yum remove phpmyadmin
yum remove mysql-server
yum remove php-mysql
yum remove sendmail
yum remove iptables system
Теперь ставим панель:
wget
http://download.ispsystem.com/install.shsh install.sh
Установка будет идти довольно продолжительно, периодически запрашивая подтверждения на дальнейшие действия. В списке устанавливаемых конфигураций. Выбирайте рекомендуемые, самая первая строчка, или последнюю, где можно будет выбрать что надо устанавливать а что и пропустить.
После установки панели проверяем её, заходим по адресу https://ваш_IP_сервера/manager/
Там сразу незабываем подкорректировать настройки:
Настройки сервера -> Настройки PHP ставим памяти побольше ))
2. Теперь устанавливаем Nginx
ВНИМАНИЕ! (устанавливать Nginx строго рекомендую по методу который описан ниже под заголовочком
Рекомендовали: там приведена цитата)
Для начала установим репозиторий:
rpm -ihv
http://download.fedora.redhat.com/pub/epel...-5-3.noarch.rpmТеперь займемся обновлением ПО. Удалим или обновим свой старый php
yum remove php
теперь установим новый
yum install php php-devel php-fpm php-mcrypt php-mssql php-gd php-mysql
с установкой модулей php тут можно незаморачиваться. А установить требуемое с панели ISP/
Обновим mysql и apache
yum update mysql
yum update httpd
Устанавливаем nginx
yum install nginx
Для того, чтобы связать ISPManager и nginx очищаем кэш пакетов ISPManager
/usr/local/ispmgr/sbin/pkgctl -D cache
и рестартим ISP
killall -9 -r ispmgr
Идем в пункт Возможности(Features) панели ISPManager и там устанавливаем Nginx.
p.s. хотя можно попробовать активировать его из шелла:
/usr/local/ispmgr/sbin/pkgctl activate nginx
Перегружаем сервак с панели VDS.
Теперь нам потребуется модуль mod_rpaf, т.к. по умолчанию связка nginx+apache для всех IP адресов получаемых через $_SERVER['REMOTE_ADDR'] будет показывать адрес вашего сервера.
yum install mod_rpaf
В файле rpaf.conf располагающемся в /etc/httpd/conf.d/
Прописываем:
LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname Off
RPAFproxy_ips 127.0.0.1 xx.xx.xx.xx
RPAFheader X-Real-IP
где xx.xx.xx.xx – IP адрес вашего сервера. Если на сервере несколько адресов IP, то прописываем их по аналогии через пробел. Перегружаем сервак.
Теперь привожу собственные настройки nginx.conf (/etc/nginx/) и httpd.conf (/etc/httpd/conf/)
Перед изменениями сохраните эти файлы где нибудь., чтобы в случае чего можно было их вернуть
В httpd.conf изменяем параметр Listen на
Listen 127.0.0.1:8080
Таким образом наш апач будет работать на сервере локально.
В nginx.conf черт ногу сломит, по инету полазил и собрал свой конфиг:
user nginx;
worker_processes 4;
timer_resolution 100ms;
worker_rlimit_nofile 8192;
worker_priority -5;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 2048;
use epoll;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
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 /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
server_tokens off;
gzip on;
gzip_static on;
gzip_comp_level 5;
gzip_min_length 1024;
keepalive_timeout 65;
limit_zone myzone $binary_remote_addr 10m;
include /etc/nginx/conf.d/*.conf;
server {
listen 188.40.161.8:80;
server_name ******** www.********.ru;
rewrite ^(/manager/.*)$ https://$host$1 permanent;
location ~* ^/(webstat/|awstats|webmail/|myadmin/|manimg/) {
proxy_pass http://127.0.0.1:8080;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
location / {
proxy_pass http://127.0.0.1:8080;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
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 10m;
}
location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar)$ {
root /var/www/seaterror/data/www/********;
access_log /var/www/httpd-logs/********.access.log;
error_page 404 = @fallback;
}
location @fallback {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
}
client_max_body_size 16m;
где, ******** - это домен вашего сайта.
На оптимальность непретендуется! Это отсебячина. Тут я надеюсь на помощь и подсказки от знающих гуру )))
Теперь самое интересное.
При создании: Доменных имен и WWW доменов из панели ISPManager.
В конфиги прописываются параметры:
в nginx.conf -
proxy_pass
http://_ваш_IP_сервера:8080;proxy_redirect
http://_ваш_IP_сервера:8080;Мне лично кажется что это неправильно, так как апач будет работать и по этим адресам, меняем эти строчки на:
proxy_pass
http://127.0.0.1:8080;proxy_redirect off;
Это делаем во всех записях! Смотрите пример моего конфига, там можно прописать и дополнительные настройки.
В httpd.conf в самом конце находим записи
NameVirtualHost ваш_IP_сервера:8080
<VirtualHost ваш_IP_сервера:8080>
Как видим таже самая ватрушка, апач работает на внешнем IP, меняем на локалку 127.0.0.1
NameVirtualHost 127.0.0.1:8080
<VirtualHost 127.0.0.1:8080>
Так же аналогичные строки заменяем во всем конфиге!
Теперь вопрос к ГУРУ, это я правильно сделал и понял или в этом кроется ошибка?
Сервак нормально перегрузился после этого всего, хотя по проверке конфигов:
service httpd configtest
[warn] module ispmgr_module is already loaded, skipping
[warn] The Alias directive in /usr/local/ispmgr/etc/ispmgr.inc at line 3 will proba bly never match because it overlaps an earlier Alias.
[warn] The Alias directive in /usr/local/ispmgr/etc/ispmgr.inc at line 4 will proba bly never match because it overlaps an earlier Alias.
[warn] The Alias directive in /usr/local/ispmgr/etc/ispmgr.inc at line 5 will proba bly never match because it overlaps an earlier Alias.
[warn] The Alias directive in /usr/local/ispmgr/etc/ispmgr.inc at line 6 will proba bly never match because it overlaps an earlier Alias.
[warn] NameVirtualHost 127.0.0.1:8080 has no VirtualHosts Syntax OK
Видим проблемы с панелью, вроде ненравится наши правки настроек конфигов на локалку ((
При этом панель ISP работает вроде нормально, в Сервисах только процесс http отображается как вырубленный, наверное из-за локалки О_о
а на
service nginx configtest
the configuration file /etc/nginx/nginx.conf syntax is ok
configuration file /etc/nginx/nginx.conf test is successful
Тут вроде всё ОК
Сервак стоит, пока тестирую, что обнаружу отпишусь ))
Очень надеюсь на комментарии специалистов, поправок и предложений в оптимизации сервера.
Проблемы все же есть ((
В панеле периодически выкидывает ошибку:
Внутренняя ошибка Can't fork in cache_quota
при этом процессы вылетают
видимо превышен кеш о_о где бы это поправить?
Рекомендовали:(Sys(3)X)
В репозиториях не всегда свежие пакеты, к тому же некоторые модули nginx лучше отключить перед установкой - например модуль perl. Иногда наблюдали проблемы из-за него.
Скачать можно нашу версию (последняя - 0.8.20) с отключенным модулем, а также с исправленным init-файлом и cpbw патчем:
http://dl.dropbox.com/u/252944/scripts/SRPMS/nginx-0.8.20-1.src.rpm
Установка:
rpmbuild --rebuild nginx-0.8.20-1.src.rpm
Далее соберётся rpm файл на основе архитектуры сервера, в конце Вам будет выдана ссылка на него (он будет лежать в папке /usr/src/redhat/RPMS/*/nginx-0.8.20*) (
прим. в моем случае путь был такой: /usr/src/redhat/RPMS/x86_64/nginx-0.8.20-1.x86_64.rpm ))
Выполняем:
rpm -ivh ПУТЬ_ДО_ПАКЕТА
Установка завершена.
Теперь по настройкам в Nginxworker_processes 4;
Вполне хватит 1-2 в режиме прокси.
в формате логов log_format main можно ещё добавить директиву $server_name - в этом случае в логах будет указываться имя вирт. хоста.
Примерно так:
log_format main '$remote_addr - $remote_user [$time_local] $server_name "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
client_max_body_size 10m;
Это максимальный размер файла, который можно передать по HTTP. Иногда параметр требует увеличения.
Цитата(Radon @ 5.11.2009, 12:13) *
location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar)$ {
Список расширений, обрабатываемых nginx'om. Можно заменить на:
jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi
|wav|bmp|rtf|js|swf|avi|mp3
Также, логировать запросы к картинкам не обязательно, можно поставить
access_log off;
Замечания учел, Nginx переустановил этим способом, пришлось дополнительно проинсталить:
yum install zlib-devel
yum install pcre-devel
yum install openssl-devel
yum install gcc
После добавления доменов с панели ISP, снова лезем в настройки и подстраиваем в соответствии с первым топиком + советы ниже
З,Ы, создание юзера в панеле почему то вышиб апач, перегружаем его:
service httpd restart
и на всякий случай
service nginx restart
Проверяем конфиги:
service httpd configtest
service nginx configtest
все вроде ОК ))
После всех манипуляций ребутнул сервак, теперь вроде стоит, будем тестировать и смотреть что получилось ))
Сообщение отредактировал seaterror - 10.11.2009, 15:04