Используем nginx, как frontend к apache

Имеется apache22, и дабы не загружать его, а как следствие и сам сервер, такой ерундой, как отдача статических файлов jpg, jpeg, gif, png, ico, bmp, swf, js, решено было пустить в бой веб-сервер nginx, именно для отдачи статически. Иными словами всё по-прежнему будет делать apache(сохраняем его мощь), за исключением выдачи картинок, флэша и javascript. Это уменьшит нагрузку на веб-сервер в целом. Будем думать что Apache22 уже у вас установлен, если нет, то здесь в статье описано, как это сделать.

Далее устанавливаем nginx:
cd /usr/ports/www/nginx
make config

Выбираем опции:
Options for nginx 1.1.
[ ] DEBUG Enable nginx debugging
[ ] DEBUGLOG Enable debug log (—with-debug)
[ ] FILE_AIO Enable file
[ ] IPV6 Enable IPv6
[ ] GOOGLE_PERFTOOLS Enable google perftools module
[X] HTTP_MODULE Enable HTTP module
[ ] HTTP_ADDITION_MODULE Enable http_addition module
[X] HTTP_CACHE_MODULE Enable http_cache module
[ ] HTTP_DAV_MODULE Enable http_webdav module
[ ] HTTP_FLV_MODULE Enable http_flv module
[ ] HTTP_GEOIP_MODULE Enable http_geoip module
[X] HTTP_GZIP_STATIC_MODULE Enable http_gzip_static module
[X] HTTP_IMAGE_FILTER_MODULE Enable http_image_filter module
[ ] HTTP_PERL_MODULE Enable http_perl module
[ ] HTTP_RANDOM_INDEX_MODULE Enable http_random_index module
[X] HTTP_REALIP_MODULE Enable http_realip module
[X] HTTP_REWRITE_MODULE Enable http_rewrite module
[ ] HTTP_SECURE_LINK_MODULE Enable http_secure_link module
[ ] HTTP_SSL_MODULE Enable http_ssl module
[X] HTTP_STATUS_MODULE Enable http_stub_status module
[ ] HTTP_SUB_MODULE Enable http_sub module
[ ] HTTP_XSLT_MODULE Enable http_xslt module
[ ] MAIL_MODULE Enable IMAP4/POP3/SMTP proxy modul
[ ] MAIL_IMAP_MODULE Enable IMAP4 proxy module
[ ] MAIL_POP3_MODULE Enable POP3 proxy module
[ ] MAIL_SMTP_MODULE Enable SMTP proxy module
[ ] MAIL_SSL_MODULE Enable mail_ssl module
[ ] WWW Enable html sample files
[ ] CACHE_PURGE_MODULE 3rd party cache_purge module
[ ] ECHO_MODULE 3rd party echo module
[ ] HEADERS_MORE_MODULE 3rd party headers_more module
[ ] HTTP_ACCEPT_LANGUAGE 3rd party accept_language module
[ ] HTTP_ACCESSKEY_MODULE 3rd party http_accesskey module
[ ] HTTP_AUTH_PAM_MODULE 3rd party http_auth_pam module
[ ] HTTP_AUTH_REQ_MODULE 3rd party http_auth_request module
[ ] HTTP_EVAL_MODULE 3rd party eval module
[ ] HTTP_FANCYINDEX_MODULE 3rd party http_fancyindex module
[ ] HTTP_GUNZIP_FILTER 3rd party http_gunzip_filter modul
[ ] HTTP_MOGILEFS_MODULE 3rd party mogilefs module
[ ] HTTP_MP4_H264_MODULE 3rd party mp4/h264 module
[ ] HTTP_NOTICE_MODULE 3rd party notice module
[ ] HTTP_PUSH_MODULE 3rd party push module
[ ] HTTP_REDIS_MODULE 3rd party http_redis module
[ ] HTTP_RESPONSE_MODULE 3rd party http_response module
[ ] HTTP_SUBS_FILTER_MODULE 3rd party subs filter module
[ ] HTTP_UPLOAD_MODULE 3rd party upload module
[ ] HTTP_UPLOAD_PROGRESS 3rd party uploadprogress module
[ ] HTTP_UPSTREAM_FAIR 3rd party upstream fair module
[ ] HTTP_UPSTREAM_HASH 3rd party upstream hash module
[ ] HTTP_UPSTREAM_KEEPALIVE 3rd party upstream keepalive modul
[ ] HTTP_ZIP_MODULE 3rd party http_zip module
[ ] CHUNKIN_MODULE 3rd party chunkin module
[ ] DEVEL_KIT_MODULE 3rd party devel_kit module
[ ] GRIDFS_MODULE 3rd party gridfs module
[ ] LUA_MODULE 3rd party lua module
[ ] MEMC_MODULE 3rd party memc (memcached) module
[ ] PASSENGER_MODULE 3rd party passenger module
[ ] POSTGRES_MODULE 3rd party postgresql module
[ ] REDIS2_MODULE 3rd party redis2 module
[ ] SLOWFS_CACHE_MODULE 3rd party slowfs_cache module
[ ] SRCACHE_MODULE 3rd party srcache module
[ ] SUPERVISORD_MODULE 3rd party supervisord module
[ ] SYSLOG_SUPPORT 3rd party syslog support
[ ] UDPLOG_MODULE 3rd party udplog (syslog) module
[ ] XSS_MODULE 3rd party xss module

устанавливаем:
make BATCH=yes -C/usr/ports/www/nginx install clean
rehash

Далее добавляем nginx в автозапуск, для этого в /etc/rc.conf дописываем:
nginx_enable=»YES»

Подправим конфиг апача, заставим слушать его другой номер порта. Посадим апач, например, на порт 8080 (просто произвольно выбрал)
ee /usr/local/etc/apache22/httpd.conf

ищем строку:
Listen 80

и меняем её на:
Listen 8080

и дописываем в самом конце конфига (это необходимо для mod_rpaf apache22, его мы установим чуть ниже в этой статье):
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1
RPAFheader X-Forwarded-For

Закрываем конфиг.
Далее правим конфиг nginx:
cp /usr/local/etc/nginx/nginx.conf /usr/local/etc/nginx/nginx.conf_bkp
ee /usr/local/etc/nginx/nginx.conf

до следующего состояния:

# количество рабочих процессов
worker_processes 3;
# приоритет рабочих процессов
# отрицательное число означает более высокий приоритет.
# Возможный диапазон от -20 до 20.
worker_priority -5;
timer_resolution 100ms;
#worker_rlimit_nofile 8192;
error_log /var/log/nginx-error.log;

events {
worker_connections 1024;
# kqueue - «эффективный метод обработки соединений используемый во FreeBSD 4.1+»
use kqueue;
}

http {
include mime.types;
default_type application/octet-stream;
#access_log /var/log/nginx-access.log main;
sendfile off;
tcp_nopush on;
tcp_nodelay on;
output_buffers 2 64k;

client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
keepalive_timeout 2m;

gzip on;
gzip_min_length 1000;
gzip_proxied any;
gzip_types text/plain text/xml application/xml application/x-javascript text/javascript text/css text/json;
gzip_disable "msie6";
gzip_comp_level 8;

upstream backend {
# а это наш apache
server 127.0.0.1:8080;
}

server {
listen 80;
server_name localhost;

#charset koi8-r;
#access_log /var/log/host.access.log main;

client_max_body_size 101M;

# расширения файлов которые будем отдавать, не прибегая к помощи apache
location ~* \.(jpg|jpeg|gif|png|ico|bmp|swf|js)$ {
# директория, где лежат файлы, для выдачи веб-сервером
root /usr/local/www;
}

location ~ /\.ht {
deny all;
}

location / {
proxy_pass http://backend/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;

proxy_connect_timeout 120;
proxy_send_timeout 120;
proxy_read_timeout 180;
}

#error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/local/www/nginx-dist;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
location = /stat {
stub_status on;
access_log off;
# allow xx.xx.xx.xx;
# deny all;
}

}

}

Вот теперь то ставим модуль RPAF:
cd /usr/ports/www/mod_rpaf2
make install clean
rehash

Раскомментируем строку(надо убрать знать # в начале строки) в /usr/local/etc/apache22/httpd.conf :
LoadModule rpaf_module libexec/apache22/mod_rpaf.so

выполняем (чтобы apache22 перечитал свой конфиг httpd.conf):
apachectl graceful

запускаем сам nginx:
/usr/local/etc/rc.d/nginx start

проверить что статические файлики стали отдаваться nginx’ом можно попробовав зайти на http://ip-сервера/wrt.jpg
где:
ip-сервера -это там где только что производили настройку по статье
wrt.jpg -не существующий jpg файлик на вашем сервере
получите ответ сервера

команды, freebsd, настройка, установка, сервер, server, ubuntu

значит, картинку попытался отдать наш, только что установленный, nginx.
Всё, таким образом, мы, благодаря разработке Игоря Сысоева (nginx), уменьшили нагрузку на веб-сервер.

Добавить комментарий