В общем было решено установить Nginx как прокси-сервер для Apache, энджинск будет лопатить статику, а индеец, будет работать со скриптами.
Чтобы все это выглядело более понятно, прилагаю схему:
Все запросы приходят на сервер Nginx -он отдает статические данные (изображения (jpg, png, html и т.п.), далее он передает запрос на обработку скриптов WEB серверу Apache (PHP,cgi,pl и т.п.), скрипты выполняют запросы к MySQL и получив оттуда данные, возвращают их Nginx, тот, в свою очередь, отдает готовую страницу пользователям. Все просто.
Данный мануал подходит для всех версий Ubuntu и Debian
На этом с теорией все, переходим к практике.
Установка Nginx
В репозиториях Ubuntu/Debian лежит старая версия пакета 0.7.65, ставить все из репозиториев и довольствоваться тем что есть, это для слабоков, мы соберем более свежую версию, для этого будем компилить исходники, в данный момент доступна версия nginx 1.0.4, ее мы и будем ставить.
Существует 2 варианта установки nginx:
1) Установка поверх установленной ранее, более старой версии будет рассмотрен в данной статье.
2) Установка Nginx из исходных кодов в чистом виде.
Установка Nginx, поверх более старой версии
sudo su
Устанавливаем необходимые для компиляции пакеты и версию nginx из репозиториев:
aptitude install libpcre3-dev libcurl4-openssl-dev gcc nginx
Останавливаем демон:
/etc/init.d/nginx stop
Качаем исходники:
wget sysoev.ru/nginx/nginx-1.0.4.tar.gz
Распаковываем:
tar -zxvf nginx-1.0.4.tar.gz
Переходим в директорию с распакованными исходниками:
cd nginx-1.0.4
Собираем и устанавливаем:
./configure --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --pid-path=/var/run/nginx.pid \
--user=www-data \
--group=www-data \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_gzip_static_module \
--with-mail \
--with-mail_ssl_module
make
make install
Запускаем полученное:
/etc/init.d/nginx start
Переходим по адресу httр://ip_server и видим окно приветствия nginx набираем имя произвольной директории например httр://ip_server/nopage и видим страницу с ошибкой 404, в низу которой указана версия WEB сервера, которая ее сгенерировала, если там указана та версия, исходники которой вы выкачивали, значит все в норме.
Переходим к настройке конфигурационного файла
nano /etc/nginx/nginx.conf
user www-data;
worker_processes 2; # Обычно устанавливается по количеству ядер в процессоре
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
# multi_accept on;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 64;
access_log /var/log/nginx/nginx.access.log;
proxy_buffers 8 16k;
proxy_buffer_size 32k;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
tcp_nodelay on;
gzip on; #Использование сжатия статики (Пример: CSS)
gzip_proxied any;
gzip_min_length 1100;
gzip_http_version 1.0;
gzip_buffers 4 8k;
gzip_comp_level 4; #Степень сжатия (больше ставить смысла нет, нагрузка на ЦПУ растет, а файлы меньше не практически становятся)
gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Установка Apache-mpm-itk
Немного теории:Мы будем устанавливать Web сервер Apache, нам необходимо установить сборку Apache2-mpm-itk, ее отличие от обычной, заключается в возможности Apache, запускать виртуальные хосты сервера с правами разных пользователей, это позволяет, при грамотной расстановке прав доступа на директории, избежать перехода из корневой директории одного сайта в другую. Если кратко, то на обычной сборке apache все хосты работают от пользователя www-data, а эта, позволяет запускать от разных пользователей, не имеющих доступа в корневые директории соседей по серверу.
sudo su
aptitude install apache2-mpm-itk
Дожидаемся окончания установки, после завершения apache выдаст ошибку, такого содержания:
* Starting web server apache2 (98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
Которая говорит нам о том, что 80й порт занят и он запуститься не может-это нормально, на восьмидесятом порту у нас висит nginx. Нам необходимо перенести Apache на другой порт, традиционно его переносят на порт 8080 (хотя можно на любой не занятый выше 1024го порта).
Для начала поправим порты:
nano /etc/apache2/ports.conf
По умолчанию там указано
NameVirtualHost *:80
Listen 80
Мы делаем:
NameVirtualHost *:8080
Listen 127.0.0.1:8080
Во многих мануалах предлагается после переноса порта, зарубить к нему доступ через iptables-это НЕ правильно и является, по сути, костыльным решением. Для чего его блокировать, если можно совсем не выставлять, мы сделаем так, чтобы Apache начал принимать и обрабатывать запросы только от localhost и одновременно стал недоступным снаружи, вот по этому мы и добавляем в Listen 127.0.0.1:8080
Сделаем настройки, чтобы апач, меньше выдавал о себе информации
nano /etc/apache2/conf.d/security
Находим там строку:
ServerTokens OS
Меняем ее на:
ServerTokens Prod
Далее строку:
ServerSignature On
Меняем на:
ServerSignature Off
Сохраняем изменения, пробуем запустить Apache
/etc/init.d/apache2 start
Установка PHP5
aptitude install php5 libapache2-mod-php5 php5-mysql php5-snmp php5-gd php5-memcache php5-imagick php5-recode php5-xmlrpc php5-xsl php5-mcrypt php5-curl php-pear php5-imap -y
Устанавливаем MySQL
aptitude install mysql-server mysql-client
Указываем новый пароль и его подтверждение для пользователя root (это администратор MySQL, а не системный пользователь)
Настройка виртуального хоста Nginx
Теперь создадим первый виртуальный хост, для этого нам понадобится выполнить ряд действий:- 1-создать нового пользователя
- 2-создать виртуальный хост Nginx
- 3-создать виртуальный хост Apache
Создаем пользователя нашего тестового сайта example.org
sudo useradd example -b /home/ -m -U -s /bin/false
В домашней директории создадим каталоги для файлов сервера, логов и временных файлов.
sudo mkdir -p -m 754 /home/example/www
sudo mkdir -p -m 777 /home/example/tmp
sudo mkdir -p -m 754 /home/example/logs
Предоставим пользователю example права на эти директории:
sudo chown -R example: /home/example/www/
sudo chown -R example: /home/example/tmp/
sudo chown -R example: /home/example/logs/
Т.к. у нас Nginx работает от пользователя www-data, то он не сможет получить доступ к содержимому домашней директории пользователя example, но при создании была создана одноименная группа, в нее нам необходимо добавить пользователя www-data.
usermod -a -G example www-data
таким образом, будущем при создании нового виртуального хоста нам необходимо добавить пользователя www-data в группу с именем нового пользователя.
Лирическое отступление.
Если не добавить пользователя www-data в группу example, то после того, как любая CMS будет залита на сервер, сайт будет отображаться без графики (т.е. графические файлы выдаваться не будут, потому что не достаточно прав доступа). Для устранения этой проблемы необходимо добавить пользователя www-data в группу пользователя, от имени которого работает виртуальный хост и перезапустить nginx. Попробуйте на досуге, понимание этого приходит после первого коряво выглядящего дизайна ;) в дальнейшем вопросов не возникает.
Создаем виртуальный хост Nginx
sudo nano /etc/nginx/sites-available/example.org
И вставляем в него то, что указано ниже, в вашем случае пути необходимо указывать свои:
server {
listen 80;
server_name example.org www.example.org;
access_log /home/example/logs/nginx_access.log;
error_log /home/example/logs/nginx_error.log;
location ~* \.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|docx|xlsx)$ {
root /home/example/www/;
index index.html index.php;
access_log off;
expires 30d;
}
location ~ /\.ht {
deny all;
}
location / {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-for $remote_addr;
proxy_set_header Host $host;
proxy_connect_timeout 60;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_redirect off;
proxy_set_header Connection close;
proxy_pass_header Content-Type;
proxy_pass_header Content-Disposition;
proxy_pass_header Content-Length;
}
}
Сохраняем изменения и выходим.
Теперь нам необходимо создать символическую ссылку, для того чтобы наш виртуальный хост заработал:
sudo ln -s /etc/nginx/sites-available/example.org /etc/nginx/sites-enabled/
И перезапустим Nginx:
sudo /etc/init.d/nginx restart
Настройки виртуального хоста Apache
sudo nano /etc/apache2/sites-available/example.org
<VirtualHost *:8080>
DocumentRoot /home/example/www
ServerAdmin admin@example.org
ServerName example.org
ServerAlias www.example.org
ErrorLog /home/example/logs/apache_error.log
CustomLog /home/example/logs/apache_access.log combined<Directory />
#Order Deny,Allow
#Deny from all
Options -ExecCGI -Indexes -Includes +FollowSymLinks
AllowOverride All
<Limit GET POST>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>
AssignUserId www-data example
php_admin_value open_basedir "/home/example/:."
php_admin_value upload_tmp_dir "/home/example/tmp"
php_admin_value session.save_path "/home/example/tmp"</VirtualHost>
Также создадим символическую ссылку на файл example.org
sudo ln -s /etc/apache2/sites-available/example.org /etc/apache2/sites-enabled/
Перезапустим Apache:
/etc/init.d/apache2 restart
Теперь нам необходимо проверить работоспособность сервера, создадим в корневой директории сайта файлtest.php с содержимым:
<?php
phpinfo();
?>
Должно выдать нечто подобное:
Это говорит о том что PHP5 на нашем сервере работает, дальше остается наращивать функционал, под нужные вам задачи.
Если на сервере необходимо организовать доступ по FTP, то рекомендую прочитать статью по настройке FTP сервера vsFTPd
Комментариев нет:
Отправить комментарий