• Сервис онлайн-записи на собственном Telegram-боте
    Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое расписание, но и напоминать клиентам о визитах тоже. Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.
    Для новых пользователей первый месяц бесплатно.
    Чат-бот для мастеров и специалистов, который упрощает ведение записей:
    Сам записывает клиентов и напоминает им о визите;
    Персонализирует скидки, чаевые, кэшбэк и предоплаты;
    Увеличивает доходимость и помогает больше зарабатывать;
    Начать пользоваться сервисом


  • Установка Apache2 с mod_fcgid и PHP5 на Ubuntu 10.10

    Содержание материала

    Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
     

    UbuntuЭто руководство описывает, как Вы можете установить Apache2 с mod_fcgid и PHP5 на Ubuntu 10.10. mod_fcgid является совместимой альтернативой старого mod_fastcgi. Это позволяет выполнять PHP-скрипты с разрешения их владельцев, а не пользователь Apache.

    Предварительные замечания

    в данном учебном материале я использую Ubuntu server 10.10 с именем хоста server1.example.com и IP-адресом 192.168.1.101. Я создам два Apache виртуальных домена www.example1.com и www.example2.com , чтобы продемонстрировать работу mod_fcgid.

    Убедитесь, что Вы вошли в систему с правами root:

    • sudo su

    /bin/sh является символической ссылкой на /bin/dash, однако нам надо /bin/bash , а не /bin/dash. Поэтому мы выполним это:

    • dpkg-reconfigure dash
    Install dash as /bin/sh? - No

    В дополнение к этому, мы должны отключить AppArmor:

    • /etc/init.d/apparmor stop
    • update-rc.d -f apparmor remove
    • aptitude remove apparmor apparmor-utils

    Установка Apache2, mod_fcgi, PHP5

    Для того чтобы установить Apache2, mod_fcgid, и PHP5, выполним:

    • aptitude install apache2 apache2-suexec libapache2-mod-fcgid php5-cgi

    Если Apache2 уже был установлен с PHP5 как модуль Apache, отключаемть модуль PHP5 сейчас:

    • a2dismod php5

    Затем включите следующие модули ...

    • a2enmod rewrite
    • a2enmod suexec
    • a2enmod include
    • a2enmod fcgid

    ... и откроем /etc/php5/cgi/php.ini :

    • nano /etc/php5/cgi/php.ini

    Раскомментируйте строку cgi.fix_pathinfo=1 :

    [...]
    ; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
    ; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
    ; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Setting
    ; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A setting
    ; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts
    ; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
    ; http://php.net/cgi.fix-pathinfo
    cgi.fix_pathinfo=1
    [...]

    Откроем /etc/apache2/mods-available/fcgid.conf ...

    • nano /etc/apache2/mods-available/fcgid.conf

    ... и добавьте строку PHP_Fix_Pathinfo_Enable 1 (эта строка не должна входить в <virtualhost> раздел, так как в этом случае Вы получите сообщение об ошибке: PHP_Fix_Pathinfo_Enable cannot occur within <VirtualHost> section

    <IfModule mod_fcgid.c>
      AddHandler    fcgid-script .fcgi
      FcgidConnectTimeout 20
      PHP_Fix_Pathinfo_Enable 1
    </IfModule>

    Перезапустим Apache2

    • /etc/init.d/apache2 restart

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

    Создадим виртуальные хосты для www.example1.com и www.example2.com

    • sudo su

    Сейчас я создам два виртуальных доменов, www.example1.com (с корневым каталогом в /var/www/web1/web ) и www.example2.com (с корневым каталогом /var/www/web2/web ). www.example1.com будет принадлежать пользователю и группе web1 , и www.example2.com к пользователю и группе web2 .

    Сначала мы создаем пользователей и группы:

    • groupadd web1
    • groupadd web2
    • useradd -s /bin/false -d /var/www/web1 -m -g web1 web1
    • useradd -s /bin/false -d /var/www/web2 -m -g web2 web2

    Затем мы создаем корнивые каталоги и сделать их принадлежащими пользователям / группам web1 и web2 соответственно:

    • mkdir -p /var/www/web1/web
    • chown web1:web1 /var/www/web1/web
    • mkdir -p /var/www/web2/web
    • chown web2:web2 /var/www/web2/web

    Мы будем запускать PHP, используя suExec. Корневая директория suExec является /var/www, как показывает следующая команда:

    • /usr/lib/apache2/suexec -V

    Выглядит это примерно так:

    root@server1:~# /usr/lib/apache2/suexec -V
     -D AP_DOC_ROOT="/var/www"
     -D AP_GID_MIN=100
     -D AP_HTTPD_USER="www-data"
     -D AP_LOG_EXEC="/var/log/apache2/suexec.log"
     -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
     -D AP_UID_MIN=100
     -D AP_USERDIR_SUFFIX="public_html"
    root@server1:~#

    Поэтому мы не можем вызывать PHP файлы (/usr/lib/cgi-bin/php) напрямую, потому что они располагаются за пределами корневой директории suExec. Так как suExec не позволяет создавать символические ссылки, единственным способом решения проблемы является создание «скрипта - обертки» для каждого сайта в подкаталогах /var/www. «Скрипт – обертка» затем будет вызывать PHP файлы /usr/lib/cgi-bin/php. «Скрипт - обертка» должен принадлежать пользователю и группе каждого сайта, поэтому нам необходим «скрипт – обертка» для каждого сайта. Я создам «скрипт - обертку» в подкаталогах /var/www/php-fcgi-scripts, например /var/www/php-fcgi-scripts/web1 и /var/www/php-fcgi-scripts/web2. Выполняем следующие команды:

    • mkdir -p /var/www/php-fcgi-scripts/web1
    • mkdir -p /var/www/php-fcgi-scripts/web2

    Создаем файл («скрипт - обертку») командой:

    • nano /var/www/php-fcgi-scripts/web1/php-fcgi-starter

    и вставляем вот этот код:

    #!/bin/sh
    PHPRC=/etc/php5/cgi/
    export PHPRC
    export PHP_FCGI_MAX_REQUESTS=5000
    export PHP_FCGI_CHILDREN=8
    exec /usr/lib/cgi-bin/php

    Аналогично для второго хоста:

    • nano /var/www/php-fcgi-scripts/web2/php-fcgi-starter

    вставляем код:

    #!/bin/sh
    PHPRC=/etc/php5/cgi/
    export PHPRC
    export PHP_FCGI_MAX_REQUESTS=5000
    export PHP_FCGI_CHILDREN=8
    exec /usr/lib/cgi-bin/php

    Строка PHPRC указывает на каталог, где находится файл php.ini (/etc/php5/cgi/ переводится как /etc/php5/cgi/php.ini). PHP_FCGI_MAX_REQUESTS э то максимальное число запросов, после чего fcgid процесс запускается и создается новый. PHP_FCGI_CHILDREN определяет количество PHP файлов, которые будут запущенны.

    Скрипты php-fcgi-starter должны выполняться и они (и каталоги где они находятся) должны принадлежать пользователю и группе сайта. Выполняем следующие команды:

    • chmod 755 /var/www/php-fcgi-scripts/web1/php-fcgi-starter
    • chmod 755 /var/www/php-fcgi-scripts/web2/php-fcgi-starter
    • chown -R web1:web1 /var/www/php-fcgi-scripts/web1
    • chown -R web2:web2 /var/www/php-fcgi-scripts/web2

    Теперь мы создаем через Apache виртуальные домены для www.example1.com и www.example2.com:

    • nano /etc/apache2/sites-available/web1
    <VirtualHost *:80>
      ServerName www.example1.com
      ServerAlias example1.com
      ServerAdmin webmaster@example1.com
      DocumentRoot /var/www/web1/web/
    
      <IfModule mod_fcgid.c>
        SuexecUserGroup web1 web1
        <Directory /var/www/web1/web/>
          Options +ExecCGI
          AllowOverride All
          AddHandler fcgid-script .php
          FCGIWrapper /var/www/php-fcgi-scripts/web1/php-fcgi-starter .php
          Order allow,deny
          Allow from all
        </Directory>
      </IfModule>
    
      # ErrorLog /var/log/apache2/error.log
      # CustomLog /var/log/apache2/access.log combined
      ServerSignature Off
    
    </VirtualHost>
    • a2ensite web1
    • nano /etc/apache2/sites-available/web2
    <VirtualHost *:80>
      ServerName www.example2.com
      ServerAlias example2.com
      ServerAdmin webmaster@example2.com
      DocumentRoot /var/www/web2/web/
    
      <IfModule mod_fcgid.c>
        SuexecUserGroup web2 web2
        <Directory /var/www/web2/web/>
          Options +ExecCGI
          AllowOverride All
          AddHandler fcgid-script .php
          FCGIWrapper /var/www/php-fcgi-scripts/web2/php-fcgi-starter .php
          Order allow,deny
          Allow from all
        </Directory>
      </IfModule>
    
      # ErrorLog /var/log/apache2/error.log
      # CustomLog /var/log/apache2/access.log combined
      ServerSignature Off
    
    </VirtualHost>
    • a2ensite web2

    Убедитесь, что Вы правильно указали пути (и правильно пользователей и групп в SuexecUserGroup строках). После чего перезапустим Apache:

    • /etc/init.d/apache2 reload

    Обмениваться, хранить, передавать Ваши файлы стало просто как никогда.
    yandex-disk
    Читать подробнее: для чего Yandex-Диск проекту Mini-Server. Практика установки, настройки и использования сетевого хранилища на Ubuntu server LTS 12.04 в статье Резервное копирование сервера Ubuntu на Яндекс Диск.

    >> Ubuntu 12.04 + Nginx Скачать сервер
    >> Fedora 15 Скачать сервер
    >> Простой Debian 6.0.6 Скачать сервер
    >> CentOS 6.0 и
    + (5.6) другой
    Скачать сервер
    >> OpenSUSE 11.4
    MAX
    Скачать сервер

    Вход на сайт

    ВНИМАНИЕ!

    Регистрация на сайте только по согласованию с администратором ресурса. Обращаться через форму обратной связи.