Начиналось всё с сервера, который находился дома и его производительность меня не устраивала, наверное потому что изначально эта ОС вообще была десктопом. Для увеличения этой самой производительности я установил nginx как фронтэнд для apache. Сайтов было всего 3-4, прописать конфиги проблем не составляло, поэтому никакой панели управления небыло. На данный момент куплен VPS, на который установлена панель управления ISPConfig 3. Причём с самого начала было точно определено что в любом случае перед apache будет установлен nginx. Не буду описывать все плюсы, которые мы получаем при его использовании. Итак, сейчас у вас должна быть установлена ISPConfig 3 на Fedora 14, всё настроено и отлажено.
Конфигурация Apache
В конфигах apache нам нужно изменить 80 порт на тот, на котором должен apache должен слушать входящие соединения от nginx. Обычно я переношу его на порт 8080, но у большинства на этом порту будет висеть панель управления ISPConfig 3, поэтому будет использовать порт 82.
|
Здесь заметьте, что в конфигах изначально может быть прописан порт 8080 для панели управления. Если мы сделаем так, как выше написал я, то получим уже не 8080, а 8280. Это обязательно нужно сразу же исправить. Комманда sed сделает бэкап оригинальных файлов *.vhost с расширением *.vhoste, эти файлы можем переместить.
|
Перезапустите apache и используя netstat посмотрите слушает ли он порт 82 вместо 80:
|
должны получить что-то подобное:
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 директорию:
|
Откройте два скопированных файла и измените :80 на :82. Чтоб удостовериться что всё сделали правильно, используйте grep:
|
Должны получить примерно следующее:
/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 архитектуры
|
Для x86_64 архитектуры
|
Устанавливаем mod_rpaf
|
Отключаем репозитарий CentALT, т.к. позже он будет нам мешать:
|
Получаем:
[CentALT] name=CentALT Packages for Enterprise Linux 5 - $basearch baseurl=http://centos.alt.ru/repository/centos/5/$basearch/ enabled=1 gpgcheck=0
... прописываем:
|
Конфигурация mod_rpaf
Создаём файл:
|
со следующим содержимым:
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
|
Редактируем основной конфиг
|
Делаем так:
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:
|
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:
|
#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; }
Создаём директорию для наших виртуальных хостов:
|
Далее опишу пример конфигурации виртуального хоста:
|
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:
|
Вот и все. Nginx будет обслуживать все ваши статические файлы, такие как изображения, архивы и т.д. При этом PHP будет направлен на обработку Apache. Заметьте, вам не обязательно создавать описание виртуального хоста для nginx, делайте это только для тех сайтов, с которых хотите отдавать статику через nginx. Если сайт не будет описан в виртуальных хостах nginx, то всё будет забираться у apache, включая статику.