Установка nginx на Fedora 14 [ISPConfig 3]

Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
 

FedoraНачиналось всё с сервера, который находился дома и его производительность меня не устраивала, наверное потому что изначально эта ОС вообще была десктопом. Для увеличения этой самой производительности я установил nginx как фронтэнд для apache. Сайтов было всего 3-4, прописать конфиги проблем не составляло, поэтому никакой панели управления небыло. На данный момент куплен VPS, на который установлена панель управления ISPConfig 3. Причём с самого начала было точно определено что в любом случае перед apache будет установлен nginx. Не буду описывать все плюсы, которые мы получаем при его использовании. Итак, сейчас у вас должна быть установлена ISPConfig 3 на Fedora 14, всё настроено и отлажено.

Конфигурация Apache

В конфигах apache нам нужно изменить 80 порт на тот, на котором должен apache должен слушать входящие соединения от nginx. Обычно я переношу его на порт 8080, но у большинства на этом порту будет висеть панель управления ISPConfig 3, поэтому будет использовать порт 82.

  • sed -ie 's/*:80/*:82/g' /etc/httpd/conf/sites-available/*.vhost

Здесь заметьте, что в конфигах изначально может быть прописан порт 8080 для панели управления. Если мы сделаем так, как выше написал я, то получим уже не 8080, а 8280. Это обязательно нужно сразу же исправить. Комманда sed сделает бэкап оригинальных файлов *.vhost с расширением *.vhoste, эти файлы можем переместить.

  • mkdir /root/httpd_vhost_backup/
  • mv /etc/httpd/conf/sites-available/*.vhoste /root/httpd_vhost_backup/

Перезапустите apache и используя netstat посмотрите слушает ли он порт 82 вместо 80:

  • service httpd restart
  • netstat -tunap | grep httpd

должны получить что-то подобное:

tcp 0 0 :::8080 :::* LISTEN 1213/httpd
tcp 0 0 :::82 :::* LISTEN 1213/httpd
tcp 0 0 :::8081 :::* LISTEN 1213/httpd

Теперь вы должны изменить шаблоны ISPConfig для Apache. Скопируйте их в conf-custom директорию:

  • cd /usr/local/ispconfig/server/
  • cp conf/apache_ispconfig.conf.master conf-custom/
  • # cp conf/vhost.conf.master conf-custom/

Откройте два скопированных файла и измените :80 на :82. Чтоб удостовериться что всё сделали правильно, используйте grep:

  • grep :82 -i /usr/local/ispconfig/server/conf-custom/*

Должны получить примерно следующее:

/usr/local/ispconfig/server/conf-custom/apache_ispconfig.conf.master:NameVirtualHost {tmpl_var name="ip_address"}:82
/usr/local/ispconfig/server/conf-custom/vhost.conf.master: :82>

Установка mod_rpaf

Если не устанавливать mod_rpaf, то все скрипты будут видеть только 127.0.0.1, или внешний IP вашего сервера. Соответственно mod_rpaf нужен для того, чтоб передать apache настоящий IP посетителя вашего сайта. Устанавливаем репозиторий пакетов CentALT.

Для i386 архитектуры

  • rpm -ihv http://centos.alt.ru/repository/centos/5/i386/centalt-release-5-3.noarch.rpm

Для x86_64 архитектуры

  • rpm -ihv http://centos.alt.ru/repository/centos/5/x86_64/centalt-release-5-3.noarch.rpm

Устанавливаем mod_rpaf

  • yum install mod_rpaf -y

Отключаем репозитарий CentALT, т.к. позже он будет нам мешать:

  • nano /etc/yum.repos.d/centalt.repo

Получаем:

[CentALT]
name=CentALT Packages for Enterprise Linux 5 - $basearch
baseurl=http://centos.alt.ru/repository/centos/5/$basearch/
enabled=1
gpgcheck=0

... прописываем:

  • enabled=0

Конфигурация mod_rpaf

Создаём файл:

  • nano /etc/httpd/conf.d/mod_rpaf.conf

со следующим содержимым:

LoadModule rpaf_module modules/mod_rpaf-2.0.so

RPAFenable On
RPAFsethostname Off
RPAFproxy_ips 127.0.0.1 192.168.0.1
RPAFheader X-Real-IP

В строке RPAFproxy_ips указываем IP всех интерфейсов, которые присутствуют на сервере.

Установка и конфигурация nginx

  • yum install nginx

Редактируем основной конфиг

  • nano /etc/nginx/nginx.conf

Делаем так:

user              nginx;
worker_processes  3;

error_log  /var/log/nginx/error.log;
#error_log  /var/log/nginx/error.log  notice;
#error_log  /var/log/nginx/error.log  info;

pid        /var/run/nginx.pid;
worker_rlimit_nofile  4096;

events {
 worker_connections  2048;
 use epoll;
}



http {
 index index.php index.html index.htm;
 root  /var/www/;
 error_page   502 503 504  /50x.html;

 server_names_hash_max_size 512;
 server_names_hash_bucket_size 128;

 include       /etc/nginx/mime.types;
 default_type  application/octet-stream;

 client_header_timeout   10m;
 client_body_timeout     10m;
 send_timeout            10m;
 connection_pool_size           512;
 client_header_buffer_size       1k;
 large_client_header_buffers     4 2k;
 request_pool_size               4k;
 client_body_temp_path /var/lib/nginx/body 1 2;

 gzip  on;
 gzip_http_version 1.0;
 gzip_min_length  1100;
 gzip_types text/plain text/css image/x-icon application/x-javascript application/javascript text/javascript application/atom+xml application/xml;
 gzip_buffers 16 8k;
 gzip_vary         on;
 gzip_disable "MSIE [1-6]\.(?!.*SV1)";
 gzip_proxied  any;
 gzip_comp_level 2;

 output_buffers  1 32k;
 postpone_output 1460;
 sendfile        on;
 #tcp_nopush     on;
 keepalive_timeout       75 20;
 tcp_nodelay        off;
 ignore_invalid_headers  on;

 server_tokens off;

 access_log    off;
 error_log     /var/log/nginx/error_log;

 #виртуальный хост nginx по умолчанию
 #эта конфигурация будет использоваться, если не будет соответствующих виртуальных хостов
server {
 listen  80 default;
 #вы можете просматривать статистику nginx используя lynx, или другой консольный браузер
 #по адресу http://your.external.interface.ip/nginx_status address
 location /nginx_status {
 stub_status on;
 access_log   off;
 allow 127.0.0.1;
 deny all;
 }
 #параметры по умолчанию для каждого виртуального хоста
 include /etc/nginx/proxy.conf;
 }
 include /etc/nginx/conf.d/*.conf;
 include /etc/nginx/sites-enabled/*;
}

Создаём proxy.conf:

  • nano /etc/nginx/proxy.conf
location / {
 proxy_pass         http://127.0.0.1:82/;
 proxy_redirect     default;
 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       64m;
 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;
}

Создаём proxy_fallback.conf:

  • nano /etc/nginx/proxy_fallback.conf
#proxy options can't be set inside if directive 
proxy_set_header   Host             $host;
proxy_set_header   X-Real-IP        $remote_addr;
proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
 if (!-f $request_filename) {
 break;
 proxy_pass http://127.0.0.1:82;
}

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

  • mkdir /etc/nginx/sites-enabled/

Далее опишу пример конфигурации виртуального хоста:

  • nano /etc/nginx/sites-enabled/example.com.conf
server {
#   listen 80;
 server_name www.example.com example.com;
 #подключаем параметры прокси сервера, общие для всех виртуальных хостов
 access_log off;
 include /etc/nginx/proxy.conf;
 location ~* ^.+.(jpeg|gif|jpg|JPG|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|swf|avi|mp3)$ {
 #принудительно заставляем браузер кэшировать локально статику в течении 1 дня
 expires 1d;
 root /var/www/clients/clientX/webX/web/;
 #access_log  /var/log/ispconfig/httpd/domain.com/access.log;
 access_log  off;
 #graceful fallback in case if static content doesn't exist
 include /etc/nginx/proxy_fallback.conf;
 }
}

Не забываем перезапустить apache и nginx:

  • service httpd restart
  • service nginx restart

Вот и все. Nginx будет обслуживать все ваши статические файлы, такие как изображения, архивы и т.д. При этом PHP будет направлен на обработку Apache. Заметьте, вам не обязательно создавать описание виртуального хоста для nginx, делайте это только для тех сайтов, с которых хотите отдавать статику через nginx. Если сайт не будет описан в виртуальных хостах nginx, то всё будет забираться у apache, включая статику.