Установка Apache HTTPNGINX

Пред­по­ла­га­ет­ся, что Apache HTTP уже установлен
Для уста­нов­ки NGINX под­клю­чим его род­ной репозиторий:

# rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
Retrieving http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
warning: /var/tmp/rpm-tmp.K7nOMw: Header V4 RSA/SHA1 Signature, key ID 7bd9bf62: NOKEY
Preparing… ########################################### [100%]
1:nginx-release-centos ########################################### [100%]

Про­ве­ря­ем:

# yum repolist | grep nginx

nginx nginx repo 56

Уста­нав­ли­ва­ем NGINX:

# yum -y install nginx --enablerepo="nginx"

Про­ве­ря­ем:

# yum list installed | grep nginx
nginx.x86_64 1.6.0-1.el6.ngx @nginx
nginx-release-centos.noarch

Редак­ти­ру­ем файл /etc/nginx/nginx.conf, уста­нав­ли­ва­ем:

user nginx; # поль­зо­ва­тель, под кото­рым будет рабо­тать nginx;
worker_processes 1; # кол-во про­цес­сов nginx, по кол-ву ядер/процессоров;pid /var/run/nginx.pid;events {
worker_connections 1024; # макс. кол-во одно­вре­мен­но обслу­жи­ва­е­мых соеди­не­ний, счи­та­ет­ся макс. кли­ен­тов = worker_processes * worker_connections
}

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;
error_log /var/log/nginx/error.log;

# немно­го тюнинга
sendfile on;
tcp_nopush on;
server_tokens off;
keepalive_timeout 65;

# сжа­тие неко­то­рых дан­ных перед отправкой
gzip on;
gzip_static on;
gzip_comp_level 5;
gzip_min_length 1024;

# огра­ни­чи­ва­ем кол-во под­клю­че­ний с одно­го IP ко всем сайтам;
# что бы уста­но­вить раз­лич­ные огра­ни­че­ния для каж­до­го отдель­но­го вир­ту­ал­хо­ста - пере­не­си­те limit_conn perip в блок server каж­до­го конфига;
limit_zone myzone $binary_remote_addr 2m;
limit_conn perip 5;

# для Apache
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;

# под­клю­чем дирек­то­рию для фай­лов кон­фи­гу­ра­ции виртуалхостов
include /etc/nginx/conf.d/*.conf;

# опи­сы­ва­ем сер­вер по-умолчанию
server {
listen 80 default;

location ~ /.ht {
deny all;
}

location / {
proxy_pass http://127.0.0.1:8080;
}

error_page 404 /404.html;
location = /404.html {
root /usr/share/nginx/html;
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
}

 

Уби­ра­ем ненуж­ный теперь кон­фиг сер­ве­ра по-умолчанию:

# mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bkp

Про­ве­ря­ем синтаксис:

# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Редак­ти­ру­ем /etc/httpd/conf/httpd.conf, меня­ем:

Listen 80

На

Listen 127.0.0.1:8080

Редак­ти­ру­ем файл вир­ту­ал­хо­ста /etc/httpd/conf.d/test.t.conf, меня­ем:

<VirtualHost 77.***.***.20:80>

на:

<VirtualHost 127.0.0.1:8080>

Про­ве­ря­ем конфиг:

# httpd -t
Syntax OK

Созда­ём файл кон­фи­гу вир­ту­ал­хо­ста для NGINX/etc/nginx/conf.d/test.t.conf:

server {
listen 80;
server_name test.t www.test.t;
access_log /var/www/user1/logs/test.t.nginx.access.log combined;
error_log /var/www/user1/logs/test.t.nginx.error.log error;
client_max_body_size 50m;
location ~* \.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|wav|bmp|rtf|swf|js|html|htm|)$ {
root /var/www/user1/site/test.t;
}
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_header Set-Cookie;
}
}

Созда­дим лог файлы

touch /var/www/user1/logs/test.t.nginx.access.log

touch /var/www/user1/logs/test.t.nginx.error.log

Оста­нав­ли­ва­ем Apache:
# service httpd stop
Stopping httpd: [ OK ]

И запус­ка­ем NGINX:

# service nginx start
Starting nginx: [ OK ]

Запус­ка­ем Apache:

# service httpd start
Starting httpd: [ OK ]

Про­ве­ря­ем порты:

# netstat -anp | grep -E "nginx|httpd"
tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 4597/httpd
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 4584/nginx

И отдель­но – уста­но­вим mod_rpaf, что бы в логе Apache отоб­ра­жа­лись кор­рект­ные IP, а не 127.0.0.1:

Во мно­гих (да почти всех) ману­а­лах гово­рит­ся про репо­зи­то­рий CentALT, кото­рый сей­час отда­ёт 403 при любом запро­се. Пото­му – уста­но­вим вручную.

Ста­вим набор ути­лит http-devel и ком­пи­ля­тор gcc:

# yum -y install httpd-devel gcc

Пере­хо­дим в дирек­то­рию src:

cd /usr/local/src

Кача­ем архив и уста­нав­ли­ва­ем mod_rpaf:

# wget http://drupion.com/sites/default/files/mod_rpaf-0.6.tar_.gz
# tar zxvf mod_rpaf-0.6.tar_.gz

если не разар­хи­ви­ру­ет­ся то:

(wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz

Если ска­чать не полу­ча­ет­ся, про­сто добавь­те в /etc/hosts:
178.236.176.177 stderr.net)
# cd mod_rpaf-0.6
# apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c

Ждём появ­ле­ния:

Libraries have been installed in:
/usr/lib64/httpd/modules

Всё уста­но­ви­лось.

Созда­ём файл /etc/httpd/conf.d/mod_rpaf.conf с таким содержимым:

LoadModule rpaf_module modules/mod_rpaf-2.0.so

# mod_rpaf configuration

RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1
RPAFheader X-Forwarded-For

 

Пере­за­пус­ка­ем Apache:

# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]

 

Мониторинг сервера nginx

В кон­фи­ге nginx (любо­го из сай­тов через кото­рый будем смот­реть ста­ти­сти­ку) про­пи­сы­ва­ем секцию

location = /stat
{
stub_status on;
access_log off;
allow 127.0.0.1;

allow xxx.xxx.xxx.xxx; (указываем IP адрес с которого производится просмотр статистики)

deny all; }

Пере­за­пус­ка­ем nginx и теперь ста­ти­сти­ку рабо­ты мож­но смот­реть по адре­су http://sidmid.ru/stat

Active connections – Коли­че­ство всех откры­тых соеди­не­ний. Это  не коли­че­ство поль­зо­ва­те­лей кото­рые под­клю­чи­лись к сай­ту, один поль­зо­ва­тель для одно­го про­смот­ра стра­ни­цы может открыть мно­же­ство одно­вре­мен­ных соеди­не­ний к серверу.
Server accepts handled requests – Этот пара­метр пока­зы­ва­ет, три значения:

  • Пер­вый — это коли­че­ство всех при­ня­тые соединений.
  • Вто­рой — это коли­че­ство всех пре­рван­ных соеди­не­ний. Обыч­но пер­вые 2 зна­че­ния одинаковы.
  • Тре­тий — это коли­че­ство обра­ба­ты­ва­ю­щих­ся запро­сов (как пра­ви­ло, дан­ный пара­метр боль­ше чем вто­рое значение).
  • Раз­де­лив тре­тье чис­ло на вто­рое, вы полу­чи­те коли­че­ство запро­сов на каж­дое соеди­не­ние обра­ба­ты­ва­е­мых в Nginx.

Reading – Коли­че­ство счи­та­ных заго­лов­ков запро­са в nginx.
Writing – Nginx чита­ет тело запро­са, обра­ба­ты­ва­ет запрос, или пишет ответ на клиента.
Waiting – Keep-Alive соеди­не­ния, на самом деле актив­но  – (чте­ние + запись). Эта вели­чи­на зави­сит от keepalive-timeout. Это зна­че­ние мож­но про­игно­ри­ро­вать. Хотя, вы може­те про­пи­сать при­ну­ди­тель­но дан­ное зна­че­ние в нуле­вое ожи­да­ние, уста­но­вив keepalive_timeout=0;

status nginx может рабо­тать с гра­фи­че­ски­ми инстру­мен­та­ми (cacti или RRDTool).

Мониторинг сервера apache

Рас­ском­мен­ти­ру­ем в фай­ле /etc/httpd/conf/httpd.conf

ExtendedStatus On

и доба­вим в виртуалхост:

<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Location>

теперь ста­ти­сти­ку рабо­ты nginx мож­но смот­реть по адре­су  http://simple.com/server-status