CentOS: установка Apache HTTP + NGINX

 

nginx_logoПредполагается, что Apache HTTP уже установлен, согласно статье CentOS: установка Apache HTTP + suEXEC + mod_fcgid.

Установка выполняется на:

# uname -r; cat /etc/redhat-release
2.6.32-431.20.3.el6.x86_64
CentOS release 6.5 (Final)

Для установки 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/setevoy.org.ua.conf, меняем:

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

на:

<VirtualHost 127.0.0.1:8080>

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

# httpd -t
Syntax OK

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

server {

    listen 80;
    server_name setevoy.org.ua wwww.setevoy.org.ua;

    location ~ /.ht {
        deny all;
    }

    location ~* .(jpg|swf|jpeg|gif|png|css|js|ico)$ {
    root /var/www/vhosts/setevoy.org.ua;
    }

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

Ещё раз проверяем:

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

Останавливаем 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:

127.0.0.1 - - [06/Jul/2014:19:48:26 +0300] "GET / HTTP/1.0" 200 16781 "http://setevoy.org.ua/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36"

Во многих (да почти всех) мануалах говорится про репозиторий 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
# 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 ]

И проверяем логи:

37.***.***.56 - - [06/Jul/2014:19:49:10 +0300] "GET / HTTP/1.0" 200 16781 "http://setevoy.org.ua/wp-admin/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36"

Ссылки по теме

http://nginx.org

http://itblog.by

http://www.theadmin.ru

https://rtcamp.com


  • Ярослав
     

    Здравствуйте. Настроил сервер по Вашим статьям (CentOS: установка Apache HTTP + suEXEC + mod_fcgid и данной) Столкнулся с трудностью: не могу запустить phpMyadmin при обращении к его странице просто выводится в текстовом виде php код (при этом если сделать просто страничку с выводом phpinfo она благополучно выдает информацию о пхп. Догадываюсь что не прописаны какие-то пути

    в конфиге nginx если приведете пример исходя из настроек приведенных Вашей статье буду признателен. Хочу иметь доступ к phpMyadmin при обращении к ай-пи//phpmyadmin но при этом желательно что бы не было доступа при обращении вида доменноеимя//phpmyadmin Заранее спасибо!

    •  

      Забудьте про suEXEC. Установите NGINX + PHP-FPM – проще, надежнее, быстрее.
      https://rtfm.co.ua/debian-ustanovka-lamp-nginx-php-fpm-mariadb/

      • Ярослав
         

        Как быть если все сайты на WordPress с кучей плагинов от SEO до ротаторов баннеров и защиты? Насколько я знаю NGINX + PHP-FPM не подходит для динамических сайтов на WordPress.

        •  

          RTFM работает на WordPress, под NGINX + PHP-FMP на Debian.
          Но да, если сайтов много – то может быть немного геморроя с RewriteRules и .htaccess.
          Для htaccess есть конвертеры под NGINX, напрмиер:
          http://www.anilcetin.com/
          https://winginx.com/en/htaccess
          Не все выдают корректные правила, но я конвертил через какой-то из этих двух.
          Тем не менее – я думаю вам стоит потратить время, и переехать под PHP-FPM, что бы упростить себе жизнь в будущем.

          • Ярослав
             

            А как насчет вопросов безопасности не уступает связке suEXEC + mod_fcgid в плане изоляции сайтов на случай компрометации одного из них? Ну и вопрос phpMyAdmin там работает сразу после инсталяции или то же под вопросом.

            Буду признателен если подскажите как все-таки запустить phpMyAdmin на связке Apache HTTP + suEXEC + mod_fcgid + Nginx думаю многие пользователи повторив действия из Ваших статей столкнутся с вопросом запуска phpMyAdmin и им то же будет полезна эта информация

            Заранее спасибо!