Настройка сервера в режиме Apache + Nginx
Наконец то получился 100% рабочий мануал по настройке сервера в таком режиме, но есть загвоздки о которых напишу в конце.
Итак, в качестве ОС сервера у меня всегда ubuntu 10.04, я к ней безумно привык и меня она устраивает. Ставлю всегда в минимальной версии.
В качестве домена будет выступать
serberg.ru , сам тестовый сервер пока что имеет IP 159.253.18.138.
Начнемс.
Устанавливаем все что может понадобится, сервер у меня от части стриминговый, так что я ставлю некоторые примочки:
sudo apt-get update
apt-get install mc
apt-get install nano
apt-get install gcc++
apt-get install libpcre3 libpcre3-dev
apt-get install openssl
apt-get install libssl-dev
Итак,
приступим к установке Nginx:
Жирным выделяю команды в консоли - через тире комментарий к ней
cd /tmp - переходим в папку tmp
wget http://sysoev.ru/nginx/nginx-0.8.54.tar.gz - качаем Nginx пакет
tar xvf nginx-0.8.54.tar.gz - распаковываем его
cd nginx-0.8.54 - переходим в папку
Конфигурируем и устанавливаем:
./configure
make
make install
Обычно ошибок не возникает. Запускаем nginx командой:
sudo /usr/local/nginx/sbin/nginx
Переходим по адресу
http://159.253.18.138/ и видим что Nginx заработал по соответствующему приветственному окну.
Остановим пока что nginx убив процесс.
killall -KILL nginx
Стоит отметить что установленный Nginx базируется в папке /usr/local/
nginx/ и конфигурационные файлы лежат в папке /usr/local/nginx/
conf.
Ок. Пока что Nginx оставим и приступим к настройке Apach + PHP + PhpMyAdmin
sudo apt-get install apache2 apache2-doc apache2-mpm-prefork apache2-utils apache2-suexec - ставим апач с плюшками
После перехожу по адресу в браузере
http://159.253.18.138/ и вижу что теперь меня привествует апач "
It works!". Это хорошо, но позже исправим.
Устанавливаем PHP модулями командой:
sudo apt-get install php5 php-pear libapache2-mod-php5 libapache2-mod-ruby libapache2-mod-auth-mysql php5-mysql libapache2-mod-python php5-dev php5-cgi php5-mcrypt php5-gd php5-cli php5-common php5-curl php5-idn php5-imagick php5-imap php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl libapache2-mod-evasive
Установка дополнительных пакетов для gd:
sudo apt-get install libpng12-dev libjpeg62-dev libxpm-dev libfreetype6-dev
Ставим мод паф для взаимодействия и правильной передачи IP между нгинксом и апачем:
sudo apt-get install libapache2-mod-rpaf
Подключение модулей:
sudo a2enmod php5
sudo a2enmod mod-evasive
sudo a2enmod ssl
sudo a2enmod rewrite
sudo a2enmod suexec
sudo a2enmod include
a2enmod rpaf
До кучи можно перезапустить апач:
/etc/init.d/apache2 force-reload
Редактируем конфиг хостов:
sudo nano /etc/apache2/sites-available/default
Изменяем параметр:
AllowOverride None на
AllowOverride All
Сохраняем нажав
Ctrl + O и закрываем нано
Ctrl + X.
Перезапускаем апач:
sudo service apache2 restart
Установка MySQL сервера:
sudo apt-get install mysql-server
В процессе установки, будет запрошен ввод пароля для root MySql сервера. Введите его дважды.
Установка phpMyAdmin:
sudo apt-get install phpmyadmin
Во время установки у Вас спросят какой тип сервер установлен apache2 или lighttpd, выбираем пробелом
apache2 и жмем Enter.
Создаем папки для домена:
sudo mkdir /usr/local/nginx/serberg.ru
sudo mkdir /usr/local/nginx/serberg.ru/www
sudo mkdir /usr/local/nginx/serberg.ru/log
sudo mkdir /usr/local/nginx/serberg.ru/sess
sudo mkdir /usr/local/nginx/serberg.ru/tmp
Создание конфигурационного файла виртуального хоста нашего сайта:
sudo nano /etc/apache2/sites-available/serberg.ru
Со следующим содержимым:
<VirtualHost *:8080>
ServerName serberg.ru
ServerAlias
www.serberg.ru
DocumentRoot /usr/local/nginx/serberg.ru/www
ServerAdmin
admin@serberg.ru
ErrorLog /usr/local/nginx/serberg.ru/log/apache_error.log
CustomLog /usr/local/nginx/serberg.ru/log/apache_access.log combined
<Directory /usr/local/nginx/serberg.ru/www>
Options FollowSymLinks
Options -Indexes
AllowOverride All
Order allow,deny
Allow from all
</Directory>
php_admin_value upload_tmp_dir /usr/local/nginx/serberg.ru/tmp
php_admin_value error_log /usr/local/nginx/serberg.ru/log/php.log
php_admin_value session.save_path /usr/local/nginx/serberg.ru/sess
</VirtualHost>
Обратите внимание что папки созданы в каталоге nginx, т.к. я решил что там будут тусить мои сайты. Так же стоит отметить что сайту назначен порт 8080, его будет слушать апач. Для того чтобы апач больше не занимал 80 порт отредактируем конфиг его портов
ports.conf:
nano /etc/apache2/ports.conf
Меняем 80 на 8080, будет похоже на это:
NameVirtualHost *:8080
Listen 8080
<IfModule mod_ssl.c>
# SSL name based virtual hosts are not yet supported, therefore no
# NameVirtualHost statement here
Listen 443
</IfModule>
Сохраняем нажав
Ctrl + O и закрываем нано
Ctrl + X.
Активируем сайт на сервере
sudo a2ensite serberg.ru
Внесем имя сайта в список хостов сервера:
sudo nano /etc/hosts
Найдем строчку 127.0.0.1 localhost и допишем в неё через пробел:
serberg.ru
www.serberg.ru
Получится так:
Код:
127.0.0.1 localhost serberg.ru www.serberg.ru
Сохраняем нажав
Ctrl + O и закрываем нано
Ctrl + X.
Чтобы Apache не ругался, внесем строчку в один из конфигурационных файлов Apache (начиная с версии 11.04 не требуется).
sudo nano /etc/apache2/httpd.conf
Добавим следующее содержимое:
ServerName localhost
Сохраняем нажав
Ctrl + O и закрываем нано
Ctrl + X.
sudo service apache2 restart - перезапустим апач
Для понимания, в папке настрое апача есть папки:
sites-available - все доступные виртуальных хосты
sites-enabled - включаемые вебсервером
Это надо понимать.
Отключаем сайт по умолчанию:
sudo a2dissite default
Итак, теперь конфигурируем nginx в режиме прокси для апача.
nano /usr/local/nginx/conf/nginx.conf
По умолчанию он выглядит так:
PHP код:
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include 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 logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443;
# server_name localhost;
# ssl on;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_timeout 5m;
# ssl_protocols SSLv2 SSLv3 TLSv1;
# ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
Я лезу в секцию сервер:
PHP код:
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
я привёл этот кусок к следующему виду:
PHP код:
server {
listen 80;
server_name serberg.ru;
#charset koi8-r;
#access_log logs/host.access.log main;
location ~* \.(js|css|rdf|xml|ico|txt|gif|jpg|png|jpeg)$ {
root serberg.ru/www/;
access_log serberg.ru/log/direct.log ;
}
location / {
proxy_pass http://127.0.0.1:8080/;
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;
client_max_body_size 10m;
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;
}
Больше ничего не трогаю, сохраняю. Сохраняем нажав
Ctrl + O и закрываем нано
Ctrl + X.
Тут я файлы типов
js|css|rdf|xml|ico|txt|gif|jpg|png|jpeg отдаю через nginx напрямую, остальное сую в апач.
/etc/init.d/apache2 stop - Вырубаю апач
killall -KILL nginx - Вырубаю nginx
sudo /usr/local/nginx/sbin/nginx - запуск nginx
/etc/init.d/apache2 start - запуск apache
Теперь при обращении на serberg.ru должно быть написано что апач приветствует Вас.
Итак, для теста поставил DLE 9.5, включил кэширование самого движка в настройках получаю на этом сервере общее время генерирования страницы:
- 0.014 - на голом апача
- 0.00795 - через nginx
Результат на лицо.
Теперь меня мучает проблемка, если обратиться на сервер через адрес:
http://serberg.ru:8080/
То апач его обработает без nginx, можно как то редиректнуть такой запрос назад на 80 порт ?