Рубрики
Web-сервер

Internal Server Error — The server encountered an internal error or misconfiguration and was unable to complete your request

Создание и настройка своего сайта является приятным моментом для вебмастеров. Но иногда они могут сталкиваться с ошибкой Internal Server Error – The server encountered an internal error or misconfiguration and was unable to complete your request. Что она означает и как её устранить вы узнаете, прочитав эту статью.Internal Server Error — The server encountered an internal error or misconfiguration and was unable to complete your request

Содержание статьи:

  • 1 Причины ошибки Internal Server Error
  • 2 Где в панели администратора найти .htaccess
  • 3 Устранение ошибки сервера
  • 4 Другие способы устранить The server encountered an internal error
  • 5 Как создать черный список в .htaccess

Причины ошибки Internal Server Error

Данная ошибка в переводе звучит так: внутренняя ошибка сервера. Система обнаружила внутренний сбой или неверные настройки и не смогла сформировать запрос. Это значит, что какие-то настройки загруженного движка или других файлов неверна, из-за чего и происходит ошибка. Одной из распространенных причин данной проблемы сервера являются ошибки файла .htaccess. Это дополнительный файл для предоставления определенных команд для серверов, в частности Apache.

Internal Server Error — The server encountered an internal error or misconfiguration and was unable to complete your request
Файл .htaccess

Многим вебмастерам удается решить проблему «Internal Server Error — The server encountered an internal error or misconfiguration and was unable to complete your request», исследовав внимательной этот файл. В нем может быть указан неверный домен или вовсе запрещен доступ к сайту. Файл .htaccess дает возможность: изменять настройки для всего сайта, защищать определенные каталоги паролем, создавать черные списки из URL, разрешать доступ только избранным сайтам и многое другое.

Читайте также: Ошибка Error 503 Backend fetch failed что делать.

Где в панели администратора найти .htaccess

Для того, чтобы отредактировать файл, его нужно найти в вашей админ-панели. На хостинге, который имеет cPanel и в движке WordPress этот файл расположен в каталоге public_html.

  1. Выберите каталог, и найдите файл.
  2. После этого в контекстном меню выберите «Редактировать». Он может находится в скрытых файлах.
  3. Вам нужно их отобразить, найдите кнопку «Настройки» и измените пункт «Отобразить скрытые файлы».
  4. Если его вообще нет, вы можете создать его самостоятельно. Нажмите в файловом менеджере кнопку «Файл» вверху и создайте файл .htaccess.

Рекомендую ознакомиться: На этой странице произошла ошибка сценария – Решение.

Устранение ошибки сервера

При внимательном изучении файла .htaccess можно определить из-за чего появляется сообщение Internal Server Error – The server encountered an internal error or misconfiguration and was unable to complete your request. Иногда пользователям удается определить наверняка, что ошибка в файле .htaccess. Для этого нужно удалить все содержимое из него и сохранить в другой текстовый файл, чтобы не потерять. После этого нужно открыть сайт, если ошибки не возникает, значит причина в файле.

Для начала попробуем отыскать параметры файла, которые могут вызывать эту ошибку. Найдите в своем .htaccess такие строки:

  • Option,
  • php_flag,
  • php_value.

Их необходимо закомментировать. Для этого в начале строки, которая содержит эти параметры нужно поставить знак решетки — #. Закомментированная строка будет выглядеть так: # php_value. Между решеткой и следующим символом необходимо ставить пробел. Для WordPress может понадобиться еще закомментировать следующие параметры: SecFilterEngine Off и SecFilterScanPOST Off.

Возможно в вашем файле нужно установить кодировку, попробуйте закомментировать следующую строку: AddDefaultCharset WINDOWS-1251. Попробуйте изменить на UTF-8. Также нужно найти (если есть) в файле строку # RewriteBase / и убрать из него символ решетки. Просмотрите ссылки в тексте .htaccess, возможно они неверны.

Интересно: ERR_CACHE_MISS — как исправить ошибку?

Другие способы устранить The server encountered an internal error

Найдите в своем файле .htaccess строку AllowOverride All. Если здесь стоит решетка (#), уберите её.

  • Необходимо также проверить, что для домена существует следующая запись VirtualHost. В качестве примера можно посмотреть на скриншоте как выглядит запись;
    Запись VirtualHost в файле .htaccess
  • Убедитесь, что конфигурационный файл содержит хостнейм сервера (обычно указывается в виде домена или IP-адреса);
  • Попробуйте запретить доступ всем входящий IP-адресам с целью проверить работу .htaccess — Deny from all.

Как создать черный список в .htaccess

Вы можете создать свой список из IP-адресов, которые не смогут попасть на ваш сайт. Для этого нужно найти файл .htaccess и отредактировать его. Следующий код, который будет блокировать адреса нужно вводить с новой строки.

  1. Можно в начале кода поставить знак комментария #, чтобы пояснить для себя на будущее для чего он. Например, # Черный список для хамов;
  2. Первой строкой разрешаем посещение для всех адресов — allow from all;
  3. Следующий код будет блокировать указанный адрес — deny from86.164.01;
  4. Добавляем еще один IP-адрес — deny from484.015.44.

Этот список может продолжаться бесконечно. Если вы не знаете, какой адрес у назойливых комментаторов, их можно подсмотреть в логах вашего сервера. В разных движках есть свои методы определения адресов. Это могут делать и сторонние скрипты PHP. Универсальным способ для всех движков определить IP-адрес — найти соответствующий раздел «Логи сервера». На платформе cPanel — это раздел «Посетители». Для исправления ошибки Internal Server Error – The server encountered an internal error or misconfiguration and was unable to complete your request можно воспользоваться онлайн-сервисами проверки конфигурационных файлов.

Рубрики
Web-сервер

Блокировка доступа с определённого сайта / бан по Referer

Бывает так, что нужно заблокировать доступ к сайту с какого-то определённого сайта. Если на сервере установлен nginx, то эта задачка решается в пару строк.

if ($http_referer ~* "example.com") { return 403; }

Рассматриваем по порядку. if — это условие «если». $http_referer — это реферер, сайт, с которого выполняется переход. «example.com» — это адрес блокируемого сайта. Return 403 возвращает браузеру, перешедшему с сайта example.com страницу ошибки 403 — доступ запрещён.

Блокировка доступа с определённого сайта / бан по Referer

Этот код нужно добавить в секцию server конфига и перезагрузить этот конфиг командой.

service nginx reload

Данное действие запретит переходы с сайта example.com на ваш сайт.

Рубрики
Web-сервер

Установка php-fpm и nginx на Debian

От стабильной и быстрой работы сервера зависит судьба сайта. Его медленная работа и частые падения способны отпугнуть как посетителей, так и поисковые системы. Последние ещё и понизят рейтинг тормозящего сайта в результатах поиска и он окажется не в топ-10, а, скажем, в топ-100 по всем запросам.

Установка php-fpm и nginx на Debian

Использование связки nginx и php-fpm для обслуживания сайтов позволяет увеличить скорость их работы, а также стабильность системы в целом. К тому же, отказавшись от использования apache, мы несколько упрощаем систему и даже защищаем её. Ведь если нет apache, то злоумышленник не сможет использовать, например, файл .htaccess для своих целей.

Связку nginx+php-fpm настраивать довольно легко и она поддерживается многими популярными CMS: WordPress, MODX, DLE, различными фреймворками. Всё это способно работать и без громоздкого apache.

При установке веб-сервера, не обойтись без создания пользователей. В идеале, для каждого сайта должен быть создан отдельный юзер. Так мы сможем защитить другие сайты, если один из пользователей будет взломан. Примеры в этой статье написаны с учётом того, что пользователей вы создали по инструкции.

Для начала установим базовые модули: php-fpm, mysql, curl, GD. Всё остальное — по индивидуальной необходимости.

# aptitude install nginx php5-fpm php5-mysqlnd php5-curl php5-gd

Конфигурационные файлы располагаются в каталоге /etc/php5/fpm/.

Содержание статьи:

  • 1 Настраиваем php-пул для обслуживания запросов
  • 2 Обработка php скриптов посредством nginx

Настраиваем php-пул для обслуживания запросов

Изначально в php-fpm есть только один пул по имени www. Мы будем использовать его в качестве основы для других пулов.

Откроем конфигурационный файл /etc/php5/fpm/pool.d/www.conf, рассмотрим некоторые переменные и подберём для них значения.

Первая переменная — это имя пула. Оно заключается в квадратные скобки и не может совпадать с именем любого существующего в системе пользователя.

[www]

Далее указываем имя пользователя и его группу, в чьём домашнем каталоге располагается сайт.

user = username group = www-data

Указываем, что пул должен работать в качестве unix-сокета. Переменная $pool будет заменена на имя.

listen = /var/run/php-$pool.sock

Определяем использование статического режима, при котором во время запуска fpm создаётся определённое количество процессов пула. Они обслуживают все поступающие запросы.

pm = static

Почему именно такой выбор? :) Это самый экономный вариант. Каждый процесс пула будет занимать объём оперативной памяти, выделенный переменной memory_limit плюс несколько мегабайт на подключённые модули, кэш и т.п. При статичном варианте все запросы будут обрабатываться только созданными процессами, а новые порождаться (и занимать драгоценную память) не будут. В итоге получим фиксированное потребление памяти.

Указываем необходимое количество процессов, обслуживающих запросы. Подбирается в зависимости от загруженности.

pm.max_children = 3

Следующие параметры рекомендую добавить в конец конфигурационного файла пула.

Каталог для размещения временных файлов:

php_admin_value[upload_tmp_dir] = "/var/www/username/tmp"

Каталог для хранения файлов сессий:

php_admin_value[session.save_path] = "/var/www/username/sessions"

По соображениям безопасности, доступ к этим каталогам должен быть только у пользователя, с правами которого запускается пул php-fpm. Также не следует использовать один каталог и для хранения файлов сессий, и для временных файлов.

Ограничение памяти для выполнения скриптов следует подбирать, исходя из требований сайта. Для начала:

php_admin_value[memory_limit] = 50M

Укажите обязательный параметр, который устраняет уязвимость:

php_admin_value[cgi.fix_pathinfo] = 0

Переменные sendmail_path и open_basedir не указываются специально. Они будут переданы в качестве параметров fast-cgi в конфигурационном файле nginx. Таким образом, для каждого конкретного сайта можно определить свою настройку. :)

После того, как все необходимые параметры прописаны, следует перезагрузить конфигурацию php-fpm командой:

# service php5-fpm reload

Обработка php скриптов посредством nginx

Остаётся настроить nginx для работы с php-fpm. Готовый конфиг

server {  server_name example.com;  listen 80;  access_log /var/log/nginx/example.com.access.log;  error_log /var/log/nginx/example.com.error.log;  charset utf-8;  index index.php;  root /var/www  location / {   try_files $uri $uri/ /index.php$args;  }  location ~ .php$ {   try_files $uri =404;   fastcgi_pass unix:/run/php-www.sock;   fastcgi_index index.php;   include fastcgi_params;   fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;   fastcgi_param PHP_VALUE "sendmail_path=/usr/sbin/sendmail -t -i -fmail@example.com";   fastcgi_param PHP_ADMIN_VALUE "open_basedir=/var/www/example.com/:/var/save_path/:/var/tmp_dir/";  } }

example.com заменяем на свой домен.

Описание параметров:

try_files $uri =404; отобразит ошибку 404 в браузере пользователя, вместо сообщения no input file specified, в случае, когда данная ошибка имеет место.

fastcgi_pass — путь к сокету php-fpm.

fastcgi_pass unix:/run/php-www.sock;

Следующая переменная устанавливает путь к sendmail и параметр, указывающий адрес электропочты администратора сайта. Замените mail@example.com на что-то своё.

fastcgi_param PHP_VALUE "sendmail_path=/usr/sbin/sendmail -t -i -fmail@example.com";

Перечисляем каталоги для open_basedir: каталог с сайтом, каталог для сохранения временных файлов, каталог для файлов сессий.

fastcgi_param PHP_ADMIN_VALUE "open_basedir=/var/www/example.com/:/var/save_path/:/var/tmp_dir/";

Если требуется передать несколько параметров, до делать это следует так:

fastcgi_param PHP_ADMIN_VALUE "sendmail_path=/usr/sbin/sendmail -t -i -fmail@example.comnopen_basedir=/var/www/example.com/:/var/save_path/:/var/tmp_dir/";

Как можно заметить, параметры разделяются при помощи переноса строки: n.

Сохраняем все проделанные изменения и перезапускаем nginx.

# service nginx reload
Рубрики
Web-сервер

Установка и настройка eAccelerator на php 5.3-5.4

Важно: Разработка eaccelerator прекращена. Вместо него следует использовать встроенное кэширование opcache.

Установка и настройка eAccelerator на php 5.3-5.4

Первое действие, которое нужно сделать, — установка пакетов php5-dev и make, если они отсутствуют.

# aptitude install php5-dev make re2c checkinstall

Скачиваем архив акселератора.

# wget https://github.com/eaccelerator/eaccelerator/archive/master.zip

Распаковываем архив.

# unzip master.zip

И переходим в папку eaccelerator-master для компиляции.

# cd eaccelerator-master

Компилируем…

# phpize

Конфигурируем…

# ./configure

Собираем и устанавливаем.

# checkinstall

На вопрос о создании документации в консоли пишем n. В описании пакета можно указать «eaccelerator».

Создаём папку для кеша.

# mkdir /var/cache/eaccelerator;chmod 0777 /var/cache/eaccelerator

Создаём файл eaccelerator.ini в папке /etc/php5/conf.d/. В ней хранятся файлы настроек различных дополнений php.

# nano /etc/php5/conf.d/eaccelerator.ini

Печатаем в этом файле следующее:

extension = "eaccelerator.so" eaccelerator.shm_size = "0" eaccelerator.cache_dir = "/var/cache/eaccelerator" eaccelerator.enable = "1" eaccelerator.optimizer = "1" eaccelerator.check_mtime = "1" eaccelerator.debug = "0" eaccelerator.filter = "" eaccelerator.shm_max = "0" eaccelerator.shm_ttl = "0" eaccelerator.shm_prune_period = "0" eaccelerator.shm_only = "0"

Сохраняем файл, нажав сначала ctrl+o (записать) и ctrl+x (закрыть).

Описание параметров

eaccelerator.shm_size — эта настройка позволяет контролировать количество выделяемой памяти для кеширования php-скрипта. Устанавливается в мегабайтах. Установка данного значения в 0 позволит использовать размер памяти по-умолчанию для ОС. Чтобы узнать этот лимит, напечатайте в консоли команду cat /proc/sys/kernel/shmmax.

Чтобы измерить максимальный размер shmmax, нужно в файле /etc/sysctl.conf установить параметр kernel.shmmax = value, где value заменить на необходимое вам количество памяти в мегабайтах. После чего перезагрузить сервер.

eaccelerator.cache_dir — папка на сервере, которая будет использоваться для размещения кеша eAccelerator. Лучший вариант /var/cache/eaccelerator. Создайте папку и убедитесь, что вебсервер имеет права на запись в этот каталог.

Описание всех параметров (eng).

Для phpmyadmin в /etc/apache2/apache2.conf добавляем вот это:

 php_admin_value eaccelerator.enable 0

Перезапускаем apache командой

# service apache2 restart

Если у вас php работает в режиме php-fpm, то перезагрузить нужно именно его:

# service php5-fpm restart
Рубрики
Web-сервер

Установка php 5.3 на Debian 7

Бывает так, что в свежем дистрибутиве Debian может понадобиться старая версия php, не входящая в стабильную ветку дистрибутива. Например, php 5.3 для работы сайта на сервере с Debian Jessie.

Установка php 5.3 на Debian 7

Для полного разрешения зависимостей следует, помимо php, устанавливать пакеты apache, актуальные для предыдущего стабильного дистрибутива Debian.

И самый важный аспект: всегда делайте бэкапы всех конфигурационных файлов!

Возможно, вам понадобится удалить уже установленные пакеты php из стабильной ветки, если были установлены ранее. Это можно сделать командой:

# aptitude purge `dpkg -l | grep php | grep -w 5 | awk '{print $2}' | xargs`

И ту же самую команду выполняем для apache, соответственно, заменяя php на apache2.

Добавление репозиториев

Пакеты для Debian Squeeze, в настоящее время, доступны только в архивном репозитории. Список будет выглядеть так:

deb http://archive.debian.org/debian/ squeeze main deb-src http://archive.debian.org/debian/ squeeze main

Добавляем его одной командой:

# echo -e "deb http://archive.debian.org/debian/ squeeze main ndeb-src http://archive.debian.org/debian/ squeeze main" > /etc/apt/sources.list.d/php-squeeze.list

И обновляем кэш пакетов.

# aptitude update

Определение приоритета пакетов

Далее создаём файл /etc/apt/preferences.d/php-apache-squeeze, где прописываем следующее:

Package: *php5* Pin: release a=squeeze Pin: version 5.3* Pin-Priority: 1000  Package: *apache* Pin: release a=squeeze Pin: version 2.2* Pin-Priority: 1000

Наибольшего внимания заслуживают два параметра.

Pin: release a=squeeze — полужирным выделено имя ветки дистрибутива.

Pin: version — версия пакетов.

Сохраняем файл, устанавливаем пакеты стандартным образом:

# apt-get install apache2-mpm-prefork libapache2-mod-php5 php5-cli php5-mysql

При этом методе не требуется замораживать пакеты, так как во время обновления системы, они затронуты не будут. Также следует отметить, что в старых ветках могут отсутствовать некоторые пакеты (php5-fpm для версии 5.3).

P.S. Также этот способ вполне подходит и для Убунту, но с пересмотром используемых репозиториев.

Рубрики
Web-сервер

Замена mod_rpaf на mod_remoteip в Apache 2.4

Сегодня обновил на своём сервере Debian до Jessie и обнаружил проблему: модуль mod_rpaf не отображал правильный ip-адрес клиента, вместо этого отображался ip 127.0.0.1, при проксировании запросов от nginx к apache.

Замена mod_rpaf на mod_remoteip в Apache 2.4

Решается проблема очень просто: деактивируем/удаляем mod_rpaf и активируем mod_remoteipкомандой:

# a2enmod mod_remoteip

Перезагружаем apache. Теперь открываем конфиг-файл с виртуальными хостами и для каждого сайта прописываем следующее:

 RemoteIPHeader X-Forwarded-For RemoteIPTrustedProxy 127.0.0.1

Снова перезапускаем apache.

Рубрики
Web-сервер

Настройка xCache

xCache — это программа, кеширующая байт-код php для ускорения выполнения скриптов. Как, например, eAccelerator или PHP-APC.

Настройка xCache

Устанавливаем xcache на сервер стандартной командой:

# aptitude install php5-xcache

Основные настройки кэша

Откройте файл /etc/php5/mods-available/xcache.ini. Все параметры собраны по группам. В данный момент нам нужна группа [xcache]

xcache.size = 32M

Данная директива указывает общий объём памяти для кэша. По-умолчанию 16 мегабайт.

xcache.count = 1

Указывается по количеству процессоров (ядер). Два ядра — ставим 2. И так далее.

xcache.ttl = 0

Время жизни кэша. Иногда может потребоваться очистка кэша через определённый промежуток времени. Значение указывается в секундах.

Рассмотрим параметры, необходимые для кэширования переменных.

xcache.var_size = 8M

Общий объём памяти, выделяемой для кэша переменных. По-умолчанию 0 — отключено.

xcache.var_count = 1

Эта переменная аналогична xcache.count.

xcache.var_ttl = 0

Тут тоже можно привести аналогию с переменной xcache.ttl: задаёт время жизни кэша переменных.

xcache.var_maxttl = 0

Эта переменная указывает максимальное время жизни кэша.

XCache Optimizer

В качестве дополнения можно включить xcache-оптимизатор.

xcache.optimizer = on

Админ-панель для xCache

xCache поставляется вместе с панелью управления, позволяющей просматривать статистику. У меня связка nginx+php-fpm, пример будет написан с учётом этого.

Прежде всего настраиваем nginx. Здесь потребуется использование alias для location.

location /x/ { alias /usr/share/xcache/admin/;  location ~ .php$ { fastcgi_index index.php; fastcgi_pass unix:/run/php-fpm.sock; include fastcgi_params; fastcgi_param PHP_ADMIN_VALUE "open_basedir=/usr/share/xcache/admin/:/var/php-temp-dir/"; fastcgi_param SCRIPT_FILENAME $request_filename; }  }

Прописываем конфигурацию для любого виртуального хоста, перезапускаем nginx: service nginx reload.

Далее в браузере открываем страницу http://example.com/x/mkpassword.php. Example.com замените на адрес вашего сайта, для которого вы создали алиас.

При помощи данного скрипта нужно создать md5-хеш пароля, который будет использоваться при аутентификации в админ-панели xCache. Достаточно указать пароль, нажать кнопку «Отправить запрос» и полученный результат скопировать.

После всех этих действий открываем файл /etc/php5/mods-available/xcache.ini, в группе [xcache.admin] редактируем необходимые параметры.

xcache.admin.user = "username"

Указываем имя пользователя, у которого будет доступ к админке.

xcache.admin.pass = "..."

Здесь в кавычках нужно указать md5-хеш пароля пользователя.

Сохраняем отредактированный файл и перезапускаем apache, php-cgi или php-fpm.

Теперь админка xcache должна быть доступна по адресу http://example.com/x/. Попробуйте авторизоваться и просмотреть статистику.

Рубрики
Web-сервер

Установка apache и php на Debian

Определённые системы управления контентом не работают со связкой nginx и php-fpm, и требуют именно веб-сервера apache с модулем php. Чаще всего причина этого — необходимость использования модуля rewrite для работы сайта.

Установка apache и php на Debian

Одной командой установите базовые компоненты. Зависимости будут установлены автоматически.

# aptitude install apache2-mpm-itk libapache2-mod-php5 php5-curl php5-mysqlnd php5-gd

Содержание статьи:

  • 1 Настраиваем apache
  • 2 Создание виртуального хоста
  • 3 Тестирование настроенной связки

Настраиваем apache

Первым делом включите mod_rewrite. Он обязательно понадобится, если ваш сайт будет использовать ЧПУ.

# a2enmod rewrite

Включать mod_php не потребуется, поскольку при установке он будет включён автоматически.

Также я рекомендую отключить следующие модули, если они вам не нужны:

# a2dismod -f autoindex deflate setenvif status

Это позволит вам сократить расход памяти.

Откройте файл /etc/apache2/conf-available/charset.conf и раскомментируйте следующую строку:

AddDefaultCharset UTF-8

Данная директива указывает, что кодировкой по-умолчанию будет UTF-8. Если ваши сайты используют другую кодировку, например, CP-1251, то необходимо указать её либо тут же, либо в параметрах виртуального хоста.

Сохраните изменения.

Откройте файл /etc/apache2/conf-available/security.conf и преобразуйте строку ServerTokens OS в ServerTokens Prod. Это скроет версию apache для клиентов.

Строку ServerSignature On преобразуйте в ServerSignature Off.

Сохраните изменения.

Откройте для редактирования файл /etc/apache2/apache2.conf и найдите параметр KeepAlive On. Если после настройки apache вы установите nginx и будете проксировать от него запросы, то этот параметр нужно преобразовать в KeepAlive Off, поскольку эту функцию (поддержание соединения с клиентом) будет выполнять nginx. Если вы планируете использовать apache в качестве основного веб-сервера, эту функцию следует настроить.

MaxKeepAliveRequests — максимальное количество запросов на поддержание постоянного соединения. Для большей производительности рекомендуется установить высокое значение. Для начала подойдёт значение по-умолчанию — 100.

KeepAliveTimeout — время в секундах для ожидания следующего запроса от того же самого клиента.

Сохраните изменения и перезапустите apache.

Откройте файл /etc/apache2/mods-available/mpm_prefork.conf.

Параметры в этом файле следует указывать в зависимости от посещаемости сайта и ресурсов сервера. Для начала попробуйте запустить сайт с минимальной конфигурацией и понаблюдать за его работой. Если окажется, что ресурсов недостаточно, увеличьте их.

Приведите значения по-умолчанию к такому виду:

StartServers 2 MinSpareServers 2 MaxSpareServers 6 MaxRequestWorkers 32 MaxConnectionsPerChild 0

StartServers — количество дочерних процессов сервера, создаваемых при запуске.

MinSpareServers — минимальное количество простаивающих процессов.

MaxSpareServers — максимальное количество простаивающих процессов.

MaxRequestWorkers — максимальное количество соединений, которые будут обрабатываться одновременно.

MaxConnectionsPerChild — максимальное количество соединений, обработав которые, дочерний процесс будет завершён. Может быть полезен в борьбе с утечками памяти.

Также сохраните изменения и перезапустите apache: service apache2 restart.

Создание виртуального хоста

Виртуальным хостом называется группа конфигурационных параметров для определённого сайта. Она включает в себя обслуживаемый домен, email администратора, пути к лог-файлам, подключение обработчиков php и т.д.

Мне нравится размещать конфигурации виртуальных хостов в одном файле — apache2.conf. Если потребуется массово заменить какое-то значение для всех сайтов, то не нужно будет открывать поочерёдно все конфигурационные файлы виртуальных хостов.

В первую очередь отключите default site.

# a2dissite 000-default

В конце файла /etc/apache2/apache2.conf пропишите следующую директиву:


В этой директиве группируются все параметры сайта. Именно она является виртуальным хостом. Следующие параметры прописываем внутри этой директивы.

ServerName — ваш домен без www. (Например, example.com.)

ServerAlias — домен с www (www.example.com)

DocumentRoot — каталог, где располагаются файлы вашего сайта. Например, /var/www/.

ServerAdmin — email администратора сайта.

ErrorLog — местоположение лог-файла ошибок. Как правило, они располагаются в каталоге /var/log/apache2/. Для него служит алиас ${APACHE_LOG_DIR}. Пример:

ErrorLog ${APACHE_LOG_DIR}/example.com.error.log

LogLevel warn. Ничего не меняем, прописываем так. Задаёт уровень логирования ошибок.

CustomLog — Расположение и тип access-лога сайта. По-умолчанию тип — combined. Хотя существуют и другие типы. Пример:

CustomLog ${APACHE_LOG_DIR}/example.com.access.log combined

В обоих примерах example.com заменяем на ваш домен без www.

Добавляем настройки для mpm-itk, поскольку произвели установку именно этого модуля. Что он даёт? Позволяет обрабатывать php-скрипты от имени пользователя — владельца сайта.

 AssignUserId user group

Здесь нужно заменить user на имя пользователя и group на имя группы, в чьей домашней папке размещены сайты.

Определяем настройки для директорий.

 Options +FollowSymLinks AllowOverride None Require all granted   Options -Indexes +FollowSymLinks  AllowOverride All Order allow,deny allow from all

Директорию /var/www замените на ту, где размещены ваши сайты.

Подключаем обработчик php-скриптов.

 php_admin_flag engine on php_admin_value open_basedir "/var/www:/tmp/sessions:/tmp/upload_tmp" php_admin_value upload_tmp_dir /tmp/sessions php_admin_value session.safe_path /tmp/upload_tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -fmail@example.com"

open_basedir в качестве значения указываем через двоеточие каталоги, куда php будет иметь доступ: каталог с сайтом, каталог для хранения файлов сессий, каталог для загрузки временных файлов.

upload_tmp_dir — каталог для хранения временных файлов. Когда вы загружаете картинку (или что-то ещё) на сайт, загруженный файл сначала помещается в этот каталог, а затем в конечное местоположение.

session.safe_path — каталог для хранения сессий.

Из соображений безопасности, эти два каталога не следует держать в общедоступном месте. Создайте их в домашнем каталоге пользователя, где размещаются ваши сайты. Разрешите доступ к ним только этому пользователю (права 0750).

sendmail_path — путь к sendmail и параметры. Как правило, sendmail располагается в каталоге /usr/sbin. После параметра -f следует указать email, не разделяя пробелом.

Сохраняем конфигурационный файл apache2.conf, перезапускаем apache:

service apache2 restart

Тестирование настроенной связки

В каталоге сайта создайте файл index.php. Пропишите в нём код:


После чего откройте ваш сайт в браузере и посмотрите, отображается ли информация о php. Если да, то сервер успешно настроен и можно разместить сайт в предназначенном для него каталоге.

В ином случае следует проанализировать логи ошибок, проверить настройки в конфигурационных файлах.

Рубрики
Web-сервер

Включаем поддержку http2 на сервере с nginx и Debian

HTTP/2 — это вторая версия сетевого протокола http, включающая в себя множество различных улучшений. В их числе мультиплексирование запросов (все запросы могут быть обработаны параллельно), увеличение производительности, сжатие заголовков и т.д.

Включаем поддержку http2 на сервере с nginx и Debian

HTTP/2 пришёл на смену SPDY, разработка которого прекращена.

Nginx поддерживает протокол http/2, начиная с версии 1.9.5. Однако, в стабильном выпуске Debian Jessie присутствует только версия 1.6.2. Поэтому подключим репозиторий backports, чтобы обновить nginx до 1.9.10.

Перед обновлением необходимо узнать, какие именно пакеты nginx установлены в системе (а их несколько). Смотрим вывод команды:

# dpkg -l | grep nginx

У меня на сервере он такой:

root@rusadmin:~# dpkg -l | grep nginx ii  nginx-common 1.6.2-5+deb8u1 all small, powerful, scalable web/proxy server - common files ii  nginx-extras 1.6.2-5+deb8u1 i386 nginx web/proxy server (extended version)

Значит, мне следует обновить эти пакеты. Что я и сделал.

# aptitude install nginx-common nginx-extras openssl -t jessie-backports

Здесь после ключа -t указываем репозиторий jessie-backports.

OpenSSL версии 1.0.2 мы устанавливаем для поддержки ALPN.

Включаем http/2 для виртуального хоста

В конфигурационном файле всех ваших сайтов, поддерживающих ssl, (если вы используете раздельные файлы для виртуальных хостов в папке /etc/nginx/sites-enabled) или же в главном конфигурационном файле /etc/nginx/nginx.conf находим параметр listen.

Обычно, этот параметр выглядит так:

listen 443 ssl;

Если включён spdy, то так:

listen 443 ssl spdy;

В первом случае нужно просто добавить после ssl параметр http2. Во втором — заменить spdy на http2. В итоге должно получиться это:

listen 443 ssl http2;

Параметр ssl_prefer_server_ciphers приводим к значению off.

Или же привести список доступных шифров к соответствию с чёрным списком RFC 7540, Appendix A.

ssl_ciphers EECDH:EDH:!3DES:!DES:!DSS:!SEED:!CAMELLIA:!NULL:!RC4:!SHA;

После всех внесённых изменений следует протестировать конфигурацию командой nginx -t.

В случае успешного тестирования, перезапускаем nginx и идём на ssllabs.com тестировать сервер. Также можно воспользоваться дополнением SPDY indicator для Firefox.

Рубрики
Web-сервер

Установка php 7.0.5 на Debian

Пока некоторые ставят php 5.3, доставая его из могилы, я решил не отставать о планеты всей, где сайты переводятся на седьмую версию php, столь нахваливаемую на просторах интернета в том числе и за высокую скорость работы, и установил сегодня из репозитория DotDeb. Надо сказать, прирост скорости реально ощутимый. Мои сайты и на WordPress, и на MODX стали летать таки. :) Вот как делал миграцию.

Установка php 7.0.5 на Debian

Содержание статьи:

  • 1 Пакеты php из репозитория Dotdeb
  • 2 Удаляем php5 с сервера
  • 3 Тесты

Пакеты php из репозитория Dotdeb

Фишка пакетов php 7 из этого репозитория в том, что они называются php7.0-%packagename%. То есть, можно сразу иметь на сервере как php 5.6 из репозитория Debian, так и седьмую версию. И конфигурационные файлы не перемешаются, так как пакеты из dotdeb хранят их в каталоге /etc/php/7.0/ и /etc/php/mods-available/ для модулей.

При желании, вы можете ознакомиться с сайтом Dotdeb, но он на английском.

Скачиваем gpg ключ репозитория.

# wget https://www.dotdeb.org/dotdeb.gpg

Прописываем репозитории в файле в каталоге /etc/apt/sources.list.d/dotdeb.list.

# echo -e "deb http://packages.dotdeb.org jessie allndeb-src http://packages.dotdeb.org jessie all" > /etc/apt/sources.list.d/dotdeb.list

Обновляем кэш пакетов.

# aptitude update

Далее смотрим, что нам нужно установить. Например, ваш сервер работает на основе php-fpm. Ок, ставим его:

# aptitude install php7.0-fpm

Если php, как модуль apache, то так:

# aptitude install php7.0 libapache2-mod-php7.0

И остальные пакеты, по вкусу.

# aptitude install php7.0-mysql php7.0-curl php7.0-redis php7.0-gd

Если вы всё устанавливаете с нуля, то следующие шаги, после установки, можно подсмотреть в соответствующих инструкциях:

  • Установка nginx и php-fpm
  • Установка apache и php как модуль

Удаляем php5 с сервера

Если же вы настраивали сервер не с нуля, а уже с работающими сайтами, то после миграции на php 7 вы, может быть, захотите вообще удалить пятую версию с сервера. Для начала нужно узнать список установленных пакетов php5:

# dpkg -l | grep php5 | grep -w 5 | awk '{print $2}'

Затем удаляем сначала модули.

# aptitude purge php5-memcached php5-redis php5-curl

И, потом, основу:

# aptitude purge php5-fpm php5-common

Это нужно для предотвращения ошибки, когда сначала удаляется php5-common, а dpkg при удалении модуля пытается его отключить командой php5dismod, но у него ничего не выходит. В итоге, пакет ломается и не удаляется. У меня такая ситуация произошла с модулем php5-memcached, когда удалял все пакеты php сразу. :)

Тесты

Чтобы воочию убедиться в скорости работы, запустил сферический бенчмарк в вакууме. Субъективные результаты его работы тоже приятно удивили. Запускалось на совершенно одинаковых параметрах. Только разные версии php.

PHP 5.6, поставляемая из репозиториев Jessie

-------------------------------------- |        PHP BENCHMARK SCRIPT        | -------------------------------------- Start : 2016-04-25 12:01:06 Server : 12345.bezplus.ru@127.0.0.1 PHP version : 5.6.19-0+deb8u1 Platform : Linux -------------------------------------- test_math                 : 1.953 sec. test_stringmanipulation   : 1.939 sec. test_loops                : 1.149 sec. test_ifelse               : 0.834 sec. -------------------------------------- Total time:               : 5.875 sec.

PHP 7.0.5, поставляемая из репозитория dotdeb

-------------------------------------- |        PHP BENCHMARK SCRIPT        | -------------------------------------- Start : 2016-04-25 11:59:53 Server : 12345.bezplus.ru@127.0.0.1 PHP version : 7.0.5-1~dotdeb+8.1 Platform : Linux -------------------------------------- test_ifelse               : 0.417 sec. test_loops                : 0.556 sec. test_stringmanipulation   : 0.767 sec. test_math                 : 0.554 sec. -------------------------------------- Total time:               : 2.294 sec.

Неплохо? Очень даже. WordPress, изначально выдававший скорость генерации примерно 0.160-0.220 стал генерировать страницы за примерно 0.06-0.100 мс. И это на недорогой vds-ке с hdd. А что ещё нужно для счастья? :)