Apache хороший сервер но есть и более эфективные сервера. В этой статье расмотрим один из вариантов замены класической связки apache+cgi-php+mysql на nginx+fpm-php+mariadb и ещё добавим пару акселераторов memcached, apc. Ставить будем на примере ubuntu server 12.04 но с минимальными изменениями можно использовать и debian.
Установка mariadb
Начнем с простого. Mariadb это ответвление (fork) от mysql, причем сделал его автор оригинального mysql после того как ушел из oracle которая поглотила sun. На свободе неограниченный корпоративными рамками mariadb получила второе рождение. Однако главное что несмотря на то что движок был основательно переписан и оптимизирован, была сохранена полная совместимость с mysql что позволяет в большинстве случаев безболезненно перейти на mariadb.
Варианты рипозиториев под разные дистрибутивы можно найти по ссылке https://downloads.mariadb.org/mariadb/repositories/
В нашем случае добавляем новый репозиторий:
sudo apt-get install python-software-properties sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com CBCB082A1BB943DB sudo add-apt-repository 'deb http://ftp.osuosl.org/pub/mariadb/repo/10.0/ubuntu precise main'
И ставим как обычно в процессе нужно ввести пороль суперпользователя (root) для доступа к базе.
sudo apt-get update sudo apt-get install mariadb-server mariadb-client
Затем при желании можете изменить настройки в /etc/mysql/my.conf и перезапустить
/etc/init.d/mysql restart
Как видете даже имена демонов пока остались неизменными для совместимости со скриптами которые остались в наследство от mysql.
Установка Nginx
Теперь поставим nginx с php.
Пакеты под разные дистрибутивы можно взять здесь http://nginx.org/en/download.html
Добавим ещё один репозиторий:
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com ABF5BD827BD9BF62
sudo add-apt-repository 'deb http://nginx.org/packages/ubuntu/ precise nginx'
Теперь можно ставить:
sudo apt-get update sudo apt-get install php-apc php-pear php5-cli php5-common php5-curl php5-fpm php5-gd php5-mysql nginx
В файле /etc/php5/fpm/php.ini раскомментируем строчку:
cgi.fix_pathinfo = 1
В файле /etc/php5/fpm/pool.d/www.conf меняем порт на unix сокет:
listen = /var/run/php5-fpm.sock
И добавим модуль для кэширования данных в оперативной памяти
sudo apt-get install memcached php5-memcached
Открываем файл /etc/php5/conf.d/apc.ini и добавляем настройки на свое усмотрение:
extension=apc.so apc.enabled=1 apc.shm_size=256M apc.shm_segments=1 apc.gc_ttl=7200 apc.ttl=7200 apc.num_files_hint=1024 apc.stat=1 apc.stat_ctime=1
Теперь нарисуем конфиг для nginx, нужно учитывать что для разных CMS можно подбирать разные конфиги учитывающие особенности движка для wordpress или drupal можно сделать например такой конфиг /etc/nginx/conf.d/domain.ru.conf в который написать:
server { listen 80; server_name domain.ru; rewrite ^ http://www.domain.ru$request_uri? permanent; #301 redirect } server { server_name www.domain.ru; root /var/www/domain.ru; access_log /var/log/nginx/domain.ru.access.log; error_log /var/log/nginx/domain.ru.error.log info; index index.php; location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } # This matters if you use drush location = /backup { deny all; } # Very rarely should these ever be accessed outside of your lan location ~* \.(txt|log)$ { allow 127.0.0.1; deny all; } location ~ \..*/.*\.php$ { return 403; } location / { # This is cool because no php is touched for static content try_files $uri $uri/ @rewrite; expires max; } location @rewrite { # Some modules enforce no slash (/) at the end of the URL # Else this rewrite block wouldn't be needed (GlobalRedirect) rewrite ^/(.*)$ /index.php?q=$1; } location ~ \.php$ { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_intercept_errors on; fastcgi_pass unix:/var/run/php5-fpm.sock; } location ~* \.(jpg|jpeg|gif|png|swf|tiff|swf|flv)$ { expires 4M; add_header Cache-Control public; } location ~* \.(css|js|ico) { gzip_static on; gzip_disable Firefox/([0-2]\.|3\.0); gzip_disable Chrome/2; gzip_disable Safari; expires 2M; add_header Cache-Control private; } }
Здесь например кроме настройки php мы сделаи кеширование картинок и сжатие js, css скриптов. Но вариантов оптимизации и настройки ещё много можно придумать.
Чтобы применить изменения перезапускаем nginx и php процессы
/etc/init.d/nginx restart /etc/init.d/php5-fpm restart
Теперь можно в браузере зайти в браузере на domain.ru и продолжить установку wordpress с помощью мастера.
Установка phpmyadmin
Можно скачать свежий phpmyadmin но для примера возьмем тот что есть в репозитории:
apt-get install phpmyadmin
Сделаем отдельный конфиг c виртуальным хостом /etc/nginx/conf.d/mysql.domain.ru.conf пишем туда:
# # phpMyAdmin # server{ listen 80; server_name mysql.domain.ru; access_log /var/log/phpmyadmin.access_log; error_log /var/log/phpmyadmin.error_log; location ^~ /phpmyadmin/ { alias /usr/share/phpmyadmin/; index index.php; location ~ /phpmyadmin(/.*\.php) { include fastcgi_params; fastcgi_param SERVER_NAME localhost; fastcgi_param SCRIPT_FILENAME /usr/share/phpmyadmin$1; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; } } }
Перезапускаем nginx и php
/etc/init.d/nginx restart /etc/init.d/php5-fpm restart
Открываем в браузере mysql.domain.ru и смотрим что получилось.