Меню Рубрики

Установка cgi на centos

Apache HTTP: установка с suEXEC и mod_fcg >

Предполагается, что на сервере ещё не установлено ничего, поэтому — сначала устанавливаем Epel (т.к. в base нет mod_fcgid ).

Устанавливаем набор (+ модули php по своему вкусу):

Добавляем Apache HTTP в автозагрузку:

Так как мы не будем использоваться mod_php — убираем его конфигурационный файл, что бы Apache не загружал этот модуль:

Помимо других настроек — php.conf добавлял index.php как индексный файл для сайтов, что мы ходим схранить.

Редактируем файл /etc/httpd/conf.d/fcgid.conf , и в него добавляем:

Кроме того, редактируем файл /etc/php.ini , находим и раскомментируем в нём строку:

Настраиваем обработчик («wrapper«, тут скорее не обработчик, а правильнее «обёртка», но так проще) FastCGI .

Проверяем настройки suEXEC :

Кратко — suEXEC позволяет Apcahe HTTP серверу запускать CGI и SSI сценарии под пользователем, отличным от пользователя самого веб-сервера (в данном случае — Apache HTTP работает под пользователем apache , тогда как файлы будут принадлежать пользователю setevoy ).

Параметр AP_DOC_ROOT указывает на рабочую директорию suEXEC . Тогда как php-cgi расположен в директории /usr/bin :

Следовательно — suEXEC не сможет напрямую вызывать php-cgi .

Для того, что бы он смог корректно работать — создадим обработчик.

Так как для каждого пользователя (aka сайта) потребуется файл отдельный файл-обработчик (т.к. он должен приндалжеать пользователю, php -скрипты которого будут обрабатываться FastCGI ) — то создадим отдельную директорию, в которой будем хранить эти файлы:

И в ней — каталог для первого сайта:

В каталоге создаём файл /var/www/php-cgi/setevoy.org.ua/php.cgi с таким содержанием:

Строка PHPRC тут задаёт путь поиска файла php.ini . Можно изменить её на /var/www/php-cgi/setevoy.org.ua/ и создать в нём отдельную копию php.ini с настройками под этот конкретный сайт.

В некоторых документах рекомендуется устанавливать параметр export PHP_FCGI_CHILDREN=4 , но пока решено обойтись без него (вот тут>>> есть интересные наблюдения на эту тему).

Обязательно устанавливаем права и владельца:

Предполагается, что пользователь у нас уже есть.

Нам нужен каталог для файлов сайта:

В каталог /var/www/vhosts/setevoy.org.ua помещаем пока один файл — index.php с таким содержимым:

Создаём файл описания виртаулхоста /etc/httpd/conf.d/setevoy.org.ua.conf с таким содержимым:

И вспоминаем, что забыли открыть 80 порт на фаерволе 🙂

Проверяем текущий список правил:

REJECT у нас идёт под номером 5, значит правило добавляем перед ним — то есть с тем же номером:

suEXEC mechanism enabled — работает, ошибок нет.

Краткий HowTo для добавления новых сайтов:

источник

Настройка SuExec Apache 2.2 + Nginx под PHP 5.3 ака Fast CGI в CentOS 5,6

SuExec позволяет выполнять/запускать CGI (PHP 5.3) скрипты/программы внутри веб-каталога от имени конкретного пользователя, которому принадлежит этот веб-каталог, а не от имени пользователя/группы Apache 2.2 от которого работает сам web-сервер Apache 2.2 в CentOS 5,6.

SuExec — это один из способов решить конфликт прав на файлы и каталоги при совместном их использовании между пользователем и веб сервером Apache в CentOS 5,6. Кроме SuExec ещё существует mod_suphp, а также анонирование с группами и установкой umask 002 на процессы httpd, sftp, ftp что позволит выставлять на все файлы 664 и на каталоги 775, что даст возможность предоставить доступ на чтение и запись для файлов пользователя и веб сервера входящего в группу пользователя.

SuExec является частью веб сервера Apache 2.2 и его поддержка активизируется непосредственно при компиляции самого веб сервера Apache 2.2 в CentOS 5,6 примерно следующим образом:

Компиляция Apache 2.2 в CentOS 5,6 здесь рассматриваться не будет, ибо нет особого смысла, так как обычно поддержка SuExec уже имеется в распространяемых, скомпилированных версиях Apache для CentOS 5,6, а если кому охота повозиться с компиляцией, то милости просим: How to Install Apache 2.4.2 from Source on CentOS 6.2 with SSL

Полномочия SuExec и сервера в частности ограничены каталогом указанным при компиляции в —with-suexec-docroot=DIR и —with-suexec-userdir=DIR, значение которого по умолчанию равно /var/www и public_html соответственно, а если нам нужно выполнять SuExec в другом (chroot) каталоге/окружении (—with-suexec-docroot=DIR), то нам нужно будет перекомпилировать/переконфигурировать Apache 2.2 с нужными нам настройками/ключами! Полный список ключей смотрим тут: Configure the source tree — Apache HTTP Server

SuExec работает только при выполнении CGI и SSI и для того чтобы PHP 5.3 мог работать под SuExec в CentOS 5,6 нам потребуется наличие php-common, mod_fcgid, httpd скомпилированный с поддержкой SuExec, загрузка модуля mod_suexec.so в конфиге /etc/httpd/conf/httpd.conf, выполнять/подключать PHP 5.3 не как модуль, а как Fast CGI.

Про поддержку SuExec в Apache можно почитать здесь:

Установка php-common, mod_fcgid, httpd в CentOS 5,6

Проверяем и устанавливаем недостающие компоненты:

Если mod_fcgid в вашем репозитории не оказалось, то mod_fcgid можно найти по этим ссылкам mod_fcgid для CentOS 5 и mod_fcgid для CentOS 6. Обычно по умолчанию httpd уже должен быть скомпилирован и установлен с поддержкой SuExec:

Читайте также:  Установка tftp на mint

Настройка SuExec Apache 2.2 под PHP 5.3 ака Fast CGI в CentOS 5,6

ВНИМАНИЕ. Неверное подключение и конфигурация PHP 5.3 ака Fast CGI в CentOS 5,6 может дать анонимный доступу к содержимому файлов конфигурации как например conf.php, configuration.php и т.д., отображая их содержимое в браузере или предлагая сохранить на диске!

Если настройка SuExec Apache 2.2 под PHP 5.3 ака Fast CGI в CentOS 5,6 выполняется на рабочем, общедоступном хосте, то перед началом в целях безопасности рекомендуется добавить в конец главного /etc/httpd/conf/httpd.conf файла такие строки:

Это позволит закрыть доступ (403 — форбайден🙂 к файлам конфигурации. Добавьте сюда имена и расширения других важных включаемых конфигурационных файлов, к которым не должно быть прямого обращения через браузер.

Теперь когда php-common, mod_fcgid, httpd в CentOS 5,6 установлены, забэкапим php.conf файл с настройками подключения PHP 5.3 как модуля, а на случай утери/удаления php.conf ниже приводится его содержимое:

Теперь создаём файл fcgid.conf с настройками подключения PHP 5.3 как CGI/FCGI (Fast CGI):

Создадим fcgi wrapper (обертка) по умолчанию:

Дира /etc/httpd/conf.d/ предназначена для файлов конфигурации модулей/демонов Apache и там лучше не хранить файлы конфигурации для виртуальных хостов — мало ли чего шальные ручонки там могут удалить!:) Немного подправим главный /etc/httpd/conf/httpd.conf уберём оттуда виртуальный хост по умолчанию в отдельную директорию /etc/httpd/conf.v, которую создадим специально под файлы конфигурации виртуальных хостов, а в конец /etc/httpd/conf/httpd.conf добавим Include conf.v/*.conf для авто подключения всех файлов настройки виртуальных хостов:

Теперь добавим пользователя, создадим каталог для пользователя, веб каталог public_html, каталог для лог файлов, каталог под fcgi wrapper (обертка), создадим сам fcgi wrapper (обертка), пользовательский php.ini и присвоим всему этому делу соответствующих хозяина и группу:

Создаём файл wrs.conf настройки виртуального хоста:

Секция с настройками виртуального хоста скрыта от гостей, чтоб гостям жизнь мёдом не казалась!:)) Теперь ещё нужно создать wrs.conf файл конфигурации для Nginx, проверить конфигурацию и перезапустить сервера:

Проверка работоспособности SuExec Apache 2.2 + Nginx под PHP 5.3 ака Fast CGI в CentOS 5,6

Для проверки работоспособности SuExec Apache 2.2 + Nginx под PHP 5.3 ака Fast CGI в CentOS 5,6 создаём в веб каталоге /var/www/wrs/public_html файл, например test.php такого содержания:

Открываем в браузере наш виртуальный хост itadmin.org.ua, или как он там у вас называется, и если видим такой результат:

то это значит, что настройка SuExec Apache 2.2 + Nginx под PHP 5.3 ака Fast CGI в CentOS 5,6 прошла успешно, а для подтверждения выполняем:

Ещё раз убеждаемся, что настройка SuExec Apache 2.2 + Nginx под PHP 5.3 ака Fast CGI в CentOS 5,6 прошла успешно, тестовый файл write_test.txt создан с правильными правами wrs:wrs, а не apache:apache, теперь же просто радуемся:))

Проблемы с настройкой SuExec Apache 2.2 + Nginx под PHP 5.3 ака Fast CGI в CentOS 5,6

Бывает, что что-то, где-то закосячило или руки или файлы или ещё что случилось приключилось и фокус с настройкой SuExec в Apache 2.2 не удался;( Ниже перечислены известные проблемы с настройкой SuExec в Apache 2.2.

Неизвестно почему SuExec в Apache 2.2 не работает!;((

Откройте /var/log/httpd/error_logи поищите там строку [notice] suEXEC mechanism enabled (wrapper: /path/to/suexec) , где /path/to/suexec полный путь к SuExec, обчно в CentOS 5,6 это /usr/sbin/suexec. Если такой строки там не наблюдается, то возможно на /usr/sbin/suexec нет root привилегий или нет доступа для apache — Configuring & Installing suEXEC, Enabling & Disabling suEXEC. Должно выглядеть примерно так:

(104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server

В лог файлы /var/log/httpd/error_log и /var/log/httpd/suexec.log получаем мессаги:

[Sun Aug 19 09:32:07 2012] [warn] [client 127.0.0.1] (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server
[Sun Aug 19 09:32:07 2012] [error] [client 127.0.0.1] Premature end of script headers: php-fcgi
.

[2012-08-19 09:32:07]: uid: (5004/wrs) gid: (5005/5005) cmd: php-fcgi
[2012-08-19 09:32:07]: target uid/gid (5004/5005) mismatch with directory (0/0) or program (0/0)
.

Либо отсутствует каталог /var/www/wrs/php/ для FCGIWrapper /var/www/wrs/php/php-fcgi-wrapper или же на него нет соответствующих полномочий chown -R wrs:wrs /var/www/wrs и chmod 750 /var/www/wrs/php/php-fcgi-wrapper

Can’t create shared memory for size 1200712 bytes

Проблемы с распределением памяти, в /var/log/httpd/error_log нам пишут:

[Mon Aug 20 03:41:28 2012] [emerg] (2)No such file or directory: mod_fcgid: Can’t create shared memory for size 1200712 bytes

Причин может быть много, от нехватки памяти до проблем с модулями. Возможно нет прав для веб сервера на каталог /var/run/mod_fcgid. Хозяином каталога должен быть apache и иметь права 755. Дополнительную инфу по этой теме можно глянуть тут:

Читайте также:  Установка лифта на эскудо

Если ничего не помогает, то в fcgid.conf вместо run/mod_fcgid указываем полный путь /var/run/mod_fcgid :))

Непобеждаемое Warning: mktime() [function.mktime]

Warning: mktime() [function.mktime]: It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected ‘Europe/Moscow’ for ‘MSK/4.0/no DST’ instead in /var/www/. /public_html/libraries/joomla/utilities/date.php on line 117

phpinfo(); говорит что файл /var/www/wrs/php/php.ini используется и физически присутствует в /var/www/wrs/php/, date.timezone установлена в date.timezone = «Europe/Kiev» , а лыжи всё равно не едут!;( Не едут лыжи потому, что хозяином php.ini должен быть root и группа пользователя:

mod_fcgid: HTTP request length 134743 (so far) exceeds MaxRequestLen (131072), referer: .

В браузер получаем HTTP 500 — Внутренняя ошибка сервера , а в error_log сервера получаем ошибку:

[Wed Sep 12 09:17:39 2012] [warn] [client 94.27.108.90] mod_fcgid: HTTP request length 134743 (so far) exceeds MaxRequestLen (131072), referer: http://.

Эта ошибка возникает при попытке передачи, например из форм, больших объемов данных. По умолчанию значение директивы FcgidMaxRequestLen (MaxRequestLen) равно FcgidMaxRequestLen 131072 . Для устранения ошибки в конфигурацию виртуального хоста или в главный конфиг сервера нужно добавить:

Полезные ссылки по настройке SuExec Apache 2.2 + Nginx под PHP 5.3 ака Fast CGI в CentOS 5,6

Рекомендуемый контент

А тут же ж мог быть рекомендуемый контент от гугла 🙂 Для отображения рекомендуемого контента необходимо в браузере разрешить выполнение JavaScript скриптов, включая скрипты с доменов googlesyndication.com и doubleclick.net

Вы не любите рекламу!? Напрасно!:) На нашем сайте она вовсе ненавязчивая, а потому для нашего сайта можете полностью отключить AdBlock (uBlock/uBlock Origin/NoScript) и прочие блокировщики рекламы! AdBlock/uBlock может препятствовать нормальной работе системы поиска по сайту, отображению рекомендуемого контента и прочих сервисов Google. Рекомендуем полностью отключить блокировщик рекламы и скриптов, а также разрешить фреймы (aka iframe).

источник

Nginx + php-fpm на CentOS 7

Для организации web сервера установим на CentOS 7 связку nginx + php-fpm. Подразумевается, что у вас уже есть настроенный сервер CentOS 7, если нет, то рекомендую статью на эту тему — CentOS 7 настройка сервера. Связка nginx и php fpm дает большую производительность, нежели apache с php.

Установка nginx на CentOS 7

Ставим непосредственно web сервер:

Теперь можно зайти на тестовую страничку, чтобы убедиться, что nginx работает:

Не забудьте открыть 80-й порт на фаерволе.

Установка mysql на CentOS 7

Практически ни один web сервер сейчас не обходится без mysql. В centos 7 вместо mysql устанавливается mariadb, которая имеет полную совместимость с mysql, в том числе понимает все ее команды. Так что ставим на сервер:

Проверяем, запустилась ли mysql:

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

Установка php-fpm на CentOS 7

Устанавливаем php-fpm и некоторые модули, которые скорее всего пригодятся в дальнейшей работе:

Так же я предлагаю установить APC — бесплатный и открытый кэшер кода PHP, который кэширует и оптимизирует промежуточный код PHP, ускоряя его исполнение. Установим APC из хранилища PHPpecl. Для того, чтобы скомпилировать пакет APC нужно установить Centos Development tools.

На все вопросы просто жмем enter, выбирая параметры по-умолчанию.

Теперь отредактируем /etc/php.ini как нам рекомендует инсталлятор:

Задаем параметр cgi.fix_pathinfo=0 и добавляем в конце строку extension=apc.so
Заодно установим сразу же часовой пояс: date.timezone = «Europe/Moscow»

Создадим файл настроек APC:

Добавляем php-fpm в автозагрузку:

Настройка nginx и php-fpm на CentOS 7

Теперь отредактируем конфиги для совместной работы. Приводим конфиг nginx к следующему виду:

worker_processes рекомендуется сделать равным количеству ядер процессора
fastcgi_pass указывает на unix сокет, по которому идет связь с php-fpm
site1.ru — адрес сайта с блогом wordpress, настройки приведены специально под него
pma.site1.ru — отдельный виртуальный домен под phpmyadmin, его мы поставим позже

Более подробно о том, как выполнить базовую настройку nginx читайте в отдельной обширной статье.

Теперь правим конфиг php-fpm, приводим его к следующему виду:

Создаем необходимые каталоги:

Теперь все готово, можно проверять. Создаем в папке /web/sites/site1.ru/www тестовый файл:

Заходим по адресу: http://site1.ru/ и если наблюдаем информацию о php, то все сделано правильно.

Если нет, то идем в логи и смотрим, в чем ошибка.

Установка phpmyadmin на CentOS 7

Для удобства управления базами веб сайтов я всегда использую phpmyadmin. Установим ее:

Читайте также:  Установка камеры suzuki grand vitara

Копируем файлы панели в наш виртуальный домен, созданный ранее:

Заходим по адресу http://pma.site1.ru/ и проверяем, все ли в порядке.

У меня при первом запуске в браузере открылся просто белый лист. Начал разбираться в чем дело. В логе ошибок nginx этого виртуального хоста увидел ошибку:

*43 FastCGI sent in stderr: «PHP message: PHP Fatal error: Call to undefined function __() in /web/sites/pma.site1.ru/www/libraries/core.lib.php on line 245» while reading response header from upstream, client: 77.47.234.119, server: pma.site1.ru, request: «GET /index.php HTTP/1.1», upstream: «fastcgi://unix:/var/run/php-fpm/php5-fpm.sock:», host: «pma.site1.ru»

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

После этого загрузилась панель phpmyadmin:

Более подробную информацию об установке и настройке phpmyadmin смотрите в отдельной статье.

На этом все, настройка nginx + php-fpm на CentOS7 закончена.

источник

Предложение от 8host.com

Настройка mod_rewrite на веб-сервере Apache в CentOS 7

Apache – это модульный веб-сервер (то есть, он позволяет настраивать функции путём включения и отключения модулей). Это предоставляет администраторам возможность максимально точно подгонять настройки веб-сервера под требования приложений.

Данное руководство поможет установить Apache на сервер CentOS 7 и настроить поддержку mod_rewrite.

Требования

1: Установка Apache

Apache можно установить с помощью пакетного менеджера yum.

Команда запросит подтверждения:

Чтобы продолжить установку, введите Y и нажмите Enter.

Запустите демон Apache (это автономный процесс, который создаёт пул дочерних процессов или потоков для обработки запросов):

sudo systemctl start httpd

Чтобы убедиться в том, что запуск Apache прошёл успешно, введите:

sudo systemctl status httpd
. . .
systemd[1]: Starting The Apache HTTP Server.
systemd[1]: Started The Apache HTTP Server .

Сервер Apache успешно установлен. Теперь нужно сосредоточить внимание на модулях.

2: Модуль mod_rewrite

В CentOS 7 модуль mod_rewrite поддерживается по умолчанию. Проверьте, так ли это. Используйте команду httpd с флагом –M, чтобы вывести список включенных модулей:

httpd -M
. . .
remoteip_module (shared)
reqtimeout_module (shared)
rewrite_module (shared)
setenvif_module (shared)
slotmem_plain_module (shared)
. . .

Если в списке нет модуля rewrite_module, включите его вручную. Отредактируйте 00-base.conf.

sudo vi /etc/httpd/conf.modules.d/00-base.conf

Когда текстовый редактор откроется, перейдите в режим вставки (нажмите i) и добавьте в файл:

#
# This file loads most of the modules included with the Apache HTTP
# Server itself.
#
. . .
LoadModule rewrite_module modules/mod_rewrite.so
. . .

Чтобы выйти из режима вставки, нажмите Esc. Нажмите 😡 и Enter, чтобы сохранить и закрыть файл.

Обновите настройки веб-сервера:

sudo systemctl restart httpd

Теперь можно приступать к созданию файла .htaccess.

3: Создание файла .htaccess

Файл .htaccess определяет индивидуальные директивы Apache (включая RewriteRule) для каждого отдельного домена.

Примечание: В Linux с символа точки начинаются имена скрытых файлов.

Сначала нужно включить поддержку файлов .htaccess. Дляэтого отредактируйте директиву AllowOverride:

sudo vi /etc/httpd/conf/httpd.conf

Найдите в этом файле раздел . Он содержит AllowOverride. Измените значение None на All.

. . .

. . .
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be «All», «None», or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride All
. . .

. . .

Сохраните и закройте файл. Перезапустите Apache:

sudo systemctl restart httpd

Создайте файл .htaccess в стандартном каталоге document root (/var/www/html):

sudo vi /var/www/html/.htaccess

Добавьте в начало файла следующую строку, чтобы активировать RewriteEngine. Так Apache сможет обрабатывать правила перезаписи.

Теперь на сервере есть файл .htaccess, который позволяет установить правила перезаписи URL-ов. Прежде чем приступить к написанию этих правил, нужно ознакомиться с синтаксисом mod_rewrite.

4: Синтаксис RewriteRule

Директива RewriteRule позволяет преобразовать запросы Apache на основе URL-адреса. Файл .htaccess может содержать множество правил перезаписи. Apache применяет правила в том порядке, в котором они определены в файле. RewriteRule имеет такую структуру:

RewriteRule Pattern Substitution [Flags]

  • RewriteRule: собственно директива.
  • Pattern: библиотека PCRE (Perl Compatible Regular Expression). Больше информации об этом можно найти здесь.
  • Substitution: куда отправить поступивший запрос.
  • [Flags]: опциональные параметры, изменяющие поведение правила. Список доступных флагов можно найти в документации Apache.

Директива RewriteRule очень важна для mod_rewrite.

5: Синтаксис RewriteCond

Директива RewriteCond позволяет добавлять условия в правило перезаписи. Условие перезаписи состоит из следующих компонентов:

RewriteCond TestString Condition [Flags]

  • RewriteCond: директива.
  • TestString: строка, которую нужно проверить.
  • Condition: шаблон, которому должна отвечать строка.
  • [Flags]: опциональные параметры.

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

6: Создание тестового файла

Создайте простое правило, которое позволит пользователям получать доступ к странице about.html без расширения (.html). Для начала создайте файл about.html в каталоге document root:

sudo vi /var/www/html/about.html

Скопируйте следующий код HTML и вставьте в файл:

источник

Добавить комментарий

Adblock
detector