Связаться со мной:
5 заметок с тегом

apache2

Установка php 7 на Debian 8 «jessie» из исходных кодов

Можно использовать скрипт который упрощает установку разных версий php
Сегодня дождливый и пасмурный день. И нет ничего более уютного и расслабляющего чем попивая горячий чай собирать ПО из исходников. Поэтому самое время собрать php 7 на debian 8.
У нас есть тачка с debian 8, установленым с образа netinstall. Установка минимальная, кроме ssh ничего не ставилось.
Для установки php 7 нам нужно выполнить по ssh или в консоли тачки несколько ругательств из под рута.
Первым делом установим все необходимые для сборки пакеты:

# apt-get install git apache2 mysql-server make autoconf gcc bison libxml2 \
libxml2-dev libcurl4-openssl-dev pkg-config libssl-dev \
bzip2 libbz2-dev libjpeg-dev libpng-dev libxpm-dev libfreetype6-dev \
libgmp-dev libgmp3-dev libmcrypt-dev libmysqlclient-dev \
libpspell-dev librecode-dev

Также нам нужен пакет libt1-dev, который отсутствует в репах debian 8, возьмем его из репов debian 7 wheezy, для этого добавим в /etc/apt/sources.list следующую строку

deb http://ftp.debian.org/debian wheezy main contrib non-free

Затем выполняем:

# apt-get update
# apt-get install libt1-dev

Затем убираем добавленную строку из /etc/apt/sources.list и затем выполняем

# apt-get update

Теперь сделаем симлинк gmp.h в /usr/include/

# ln -s /usr/include/x86_64-linux-gnu/gmp.h /usr/include/gmp.h

Теперь все готово для сборки. Создадим папку для исходников и скачаем их туда.

# mkdir /root/php7
# cd /root/php7
# git clone https://git.php.net/repository/php-src.git

Переходим к сырцам и конфигурим

# cd php-src
# ./buildconf
# ./configure \
    --prefix=/usr \
    --with-config-file-path=/etc \
    --enable-mbstring \
    --enable-zip \
    --enable-bcmath \
    --enable-pcntl \
    --enable-ftp \
    --enable-exif \
    --enable-calendar \
    --enable-sysvmsg \
    --enable-sysvsem \
    --enable-sysvshm \
    --enable-wddx \
    --with-curl \
    --with-mcrypt \
    --with-iconv \
    --with-gmp \
    --with-pspell \
    --with-gd \
    --with-jpeg-dir=/usr \
    --with-png-dir=/usr \
    --with-zlib-dir=/usr \
    --with-xpm-dir=/usr \
    --with-freetype-dir=/usr \
    --with-t1lib=/usr \
    --enable-gd-native-ttf \
    --enable-gd-jis-conv \
    --with-openssl \
    --with-mysql=/usr \
    --with-pdo-mysql=/usr \
    --with-gettext=/usr \
    --with-zlib=/usr \
    --with-bz2=/usr \
    --with-recode=/usr \
    --with-mysqli=/usr/bin/mysql_config

Если все в порядке, то результатом выполнения предыдущей команды будет что-то типа:

+--------------------------------------------------------------------+
| License:                                                           |
| This software is subject to the PHP License, available in this     |
| distribution in the file LICENSE.  By continuing this installation |
| process, you are bound by the terms of this license agreement.     |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point.                            |
+--------------------------------------------------------------------+

Thank you for using PHP.

Далеее выполняем

# make
# make install

Проверяем, что установка прошла успешно

root@debian:~/php7/php-src# php -v
PHP 7.0.0-dev (cli) (built: May 23 2015 15:48:27) 
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0-dev, Copyright (c) 1998-2015 Zend Technologies

Вобщем то php7 установлен, но если мы хотим заставить веб-сервер обрабатывать php, то надо ещё настроить apache2.
Заставим apache2 обрабатывать php, с помощью php-cgi.
У меня в системе есть пользователь user, и я решил сделать для него виртуальный хост.
Создаем каталог cgi-bin у пользователя

# mkdir /home/user/cgi-bin/

Создаем файл /home/user/cgi-bin/php со следующим содержимым

#!/usr/bin/php-cgi

И выставляем права 555 на него

# chmod 555 /home/user/cgi-bin/php

Создаем файл /home/user/cgi-bin/php.ini со следующим содержимым

max_execution_time=600
memory_limit=128M
error_reporting=0
display_errors=0
log_errors=0
user_ini.filename=
realpath_cache_size=2M
cgi.check_shebang_line=0
 
zend_extension=opcache.so
opcache.enable_cli=1
opcache.save_comments=0
opcache.fast_shutdown=1
opcache.validate_timestamps=1
opcache.revalidate_freq=60
opcache.use_cwd=1
opcache.max_accelerated_files=100000
opcache.max_wasted_percentage=5
opcache.memory_consumption=128
opcache.consistency_checks=0

Создаем каталог для виртуалхоста

# mkdir /home/user/www

И кладем в него index.php со следующим содержимым

<?php
phpinfo();
?>

И т.к мы все делали из под рута, то меняем владельца всех этих созданных файлов и каталогов на user

# chown -R user:user /home/user/

Теперь нужно настроить apache2. Добавим необходимые модули в apache2

# a2enmod actions
# a2enmod cgi

Заменим конфиг /etc/apache2/sites-enabled/000-default.conf на такой

<Directory /home/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>
<VirtualHost *:80>
DocumentRoot /home/user/www
ScriptAlias /cgi-bin/ "/home/user/cgi-bin/"
AddType application/x-httpd-php .php .php3
Action  application/x-httpd-php /cgi-bin/php
DirectoryIndex index.php
</VirtualHost>

И перезапустим apache2

# service apache2 restart

Теперь мы можем зайти браузером на ip тачки и увидеть страницу php info.

Аналогично можно настроить другие виртуальные хосты.

Про настройку разных версий php для каждого сайта на одном сервере можно прочитать в статье про мультиверсионность php.

2015   apache2   debian   php   php7

Модуль remoteip в ubuntu 14.04

Почему-то с модулем mod_rpaf для apache2 в ubuntu 14.04 у меня не срослось. Не хотел он нормально работать и все. Поэтому было решено использовать модуль remoteip, который, собственно, выполняет те же функции.
Подключаем модуль.

# a2enmod remoteip

Создаем конфигурационный файл

# nano /etc/apache2/conf-available/remoteip.conf
RemoteIPHeader X-Forwarded-For
RemoteIPTrustedProxy 127.0.0.1 ip_сервера

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

# a2enconf remoteip

Перезапускаем apache2

# service apache2 restart
2015   apache2   mod_rpaf   remoteip   ubuntu

Как создать виртуальный хост «заглушку» в apache2.

Многие пользователи жалуются что их сайты открываются по «левым доменам», к которым они не имеют отношения. Происходит это потому что сайт на сервере доступен не только по доменному имени, но и по ip. И кто угодно может направить свой домен на ip сервера. Чтобы это исправить нужно создать заглушку при обращениях к вебсерверу по ip. Т.к проблема частая, пилю мануал.

Создание заглушки для сервера с панелью ispmanager 4.

  1. В разделе www-домены создаем домен с любым именем, например default.domain
  2. В разделе ip-адреса выделяем ip сервера и кликаем «Изменить»
  3. В качестве «домен по умолчанию» выбираем наш домен default.domain

Теперь по ip адресу будет открываться заглушка ispmanager.

Создание заглушки для сервера без панели управления.

Создадим каталог для виртуального хоста заглушки, например /var/www/default/

# mkdir /var/www/default

Создадим пустой файл index.php

# touch /var/www/default/index.php

Теперь в конфигурационном файле apache2(в дебианоподобных ОС это /etc/apache2/apache2.conf) пропишем виртуальный хост.

<VirtualHost *:80 >
        ServerName default
        DocumentRoot /var/www/default
</VirtualHost>

Затем перезапускаем apache2

# service apache2 restart

Теперь по ip адресу будет открываться пустая страница.

2014   apache2   default   isp   ispmanager   заглушка

Включение server-status на apache2/httpd в ubuntu и centos

server-status это модуль веб-сервера, который может помочь установить какой из сайтов на сервере создает нагрузку или даже покажет на какой именно скрипт на сайте идет больше всего обращений. В общем это модуль который помогает в мониторинге состояния веб-сервера. Разберёмся как его установить.

В centos он обычно уже установлен. В ubuntu смотрим:

# ls /etc/apache2/mods-enabled



Если в выводе есть status.load и status.conf, то значит он тоже установлен. Если же нет, то выполняем:

# /usr/sbin/a2enmod status


Затем открываем конфигурационный файл веб-сервера, в centos — /etc/httpd/conf/httpd.conf, в ubuntu — /etc/apache2/apache2.conf. Добавляем туда:

ExtendedStatus On
<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
</Location>

Затем перезапускаем апач.

# service apache2 restart
  • в ubuntu
# service httpd restart
  • в centos

Устанавливаем:
В centos:

# yum install links elinks



В ubuntu:

# apt-get install links elinks


Теперь мы можем посмотреть server-status. Для этого выполняем:

# elinks http://localhost/server-status



Если апач у нас висит не на 80 порту, например когда фронтэндом установлен nginx, то в эту команду нужно добавить порт апача. Например так, для порта 81:

# elinks http://localhost:81/server-status
2014   apache2   centos   httpd   mod_status   server-status   ubuntu

Установка mpm-itk на apache2. Работа виртуальных хостов под разными пользователями.

По умолчанию apache работает под пользователем www-data. При использовании isp-manager под пользователем apache, если я не ошибаюсь. И получается, что все сайты работают под одним пользователем. Иногда требуется чтобы каждый сайт работал под своим пользователем. Сделать это можно с помощью модуля mpm-itk. Модуль доступен во всех основных дистрибутивах линукс. Мы рассмотрим как установить и настроить его под ubuntu и centos, а так же рассмотрим настройку для серверов с isp-панелью.

Установка и настройка в ubuntu

Для начала установим сам модуль

# apt-get install apache2-mpm-itk

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

Затем правим конфигурационный файл apache.

# nano /etc/apache2/apache2.conf

Внутрь каждого виртуального хоста добавляем такие строки:

<IfModule mpm_itk_module>

AssignUserId user1 user1

</IfModule>

Где user1 user1 - пользователь и группа соответственно.

Перезапускаем apache2

# service apache2 restart

Установка в CentOS

Установим модуль

# yum install httpd-itk

Правим конфигурационные файлы

# nano /etc/sysconfig/httpd

Раскомментируем и изменяем строку на такую:

HTTPD=/usr/sbin/httpd.itk

# nano /etc/httpd/conf.d/php.conf

Добавляем:

<IfModule itk.c>

LoadModule php5_module modules/libphp5.so

</IfModule>

Меняем диррективу SuexecUserGroup на AssignUserID для существующих доменов.

# sed -i -e 's/SuexecUserGroup/AssignUserID/g' /etc/httpd/conf/httpd.conf

Для вновь созданных доменов в виртуальном хосте нужно указывать

AssignUserID user1 user1

Где user1 user1 - пользователь и группа соответственно.

# nano /etc/httpd/conf/httpd.conf

Вставляем настройки модуля перед виртуальными хостами

<IfModule itk.c>

StartServers 1

MinSpareServers 1

MaxSpareServers 25

ServerLimit 25

MaxClients 25

MaxRequestsPerChild 4000

</IfModule>

Перезапускаем apache

# service httpd restart

Настройка для сервера с панелью isp.

Откроем конфигурационный файл isp

# nano /usr/local/ispmgr/etc/ispmgr.conf

И в самом начале добавим строку:

Option ApacheMPM

И рестартим панель

# killall -9 ispmgr

Как проверить что все работает правильно?

В папке виртуального хоста создаем файл с расширением .php и примерно таким содержанием:

<?php

$userinfo = posix_getpwuid(posix_getuid());

echo $userinfo['name'];

?>

Или таким:

<?php echo exec('whoami'); ?>

Открываем этот файл в браузере и выводом этого файла должно быть имя пользователя под которым работает этот скрипт. Так же не забываем что если сервер функционирует давно то в подкаталогах куча фалов принадлежащих пользователю www-data. Неплохо бы сделать chown -R username на каталоги сайтов.

2013   apache2   centos   httpd   httpd-itk   isp-manager   Linux   mpm-itk   ubuntu