В интернете много различных руководств по созданию связки Apache22+php5+mysql5. Попробую и я внесни свою лепту. Но чуток усложним задачу: попробуем запустить виртуальный хост от имени другого пользователя, отличного от стандартного www, что позволит нам повысить безопастность сервера.
Обновляем порты, приводим систему в идеального состояние и приступаем. Для начала, устанавливаем MySQL сервер (описанно тут). Дальше, идем в директорию веб сервера и делаем небольшие изменения:
10:10 user@ns [/usr/ports/www/apache22]#vi Makefile
#WITH_MPM?= prefork # or worker, event, itk
WITH_MPM?= itk
Заменяем как я показал, после чего выполняем следующее:
10:12 user@ns [/usr/ports/www/apache22]#make config
Options for apache-itk 2.2.14_5
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │[ ] APR_FROM_PORTS Use devel/apr as APR (preferred)
│ │[ ] THREADS Enable threads support in APR
│ │[X] MYSQL Enable MySQL support for apr-dbd
│ │[ ] PGSQL Enable PostgreSQL support for apr-dbd
│ │[ ] SQLITE Enable SQLite support for apr-dbd
│ │[ ] IPV6 Enable IPv6 support
│ │[ ] BDB Enable BerkeleyDB dbm
│ │[X] AUTH_BASIC Enable mod_auth_basic
│ │[X] AUTH_DIGEST Enable mod_auth_digest
│ │[X] AUTHN_FILE Enable mod_authn_file
│ │[ ] AUTHN_DBD Enable mod_authn_dbd
│ │[X] AUTHN_DBM Enable mod_authn_dbm
│ │[X] AUTHN_ANON Enable mod_authn_anon
│ │[X] AUTHN_DEFAULT Enable mod_authn_default
│ │[X] AUTHN_ALIAS Enable mod_authn_alias
│ │[X] AUTHZ_HOST Enable mod_authz_host
│ │[X] AUTHZ_GROUPFILE Enable mod_authz_groupfile
│ │[X] AUTHZ_USER Enable mod_authz_user
│ │[X] AUTHZ_DBM Enable mod_authz_dbm
│ │[X] AUTHZ_OWNER Enable mod_authz_owner
│ │[X] AUTHZ_DEFAULT Enable mod_authz_default
│ │[X] CACHE Enable mod_cache
│ │[X] DISK_CACHE Enable mod_disk_cache
│ │[X] FILE_CACHE Enable mod_file_cache
│ │[X] MEM_CACHE Enable mod_mem_cache
│ │[X] DAV Enable mod_dav
│ │[X] DAV_FS Enable mod_dav_fs
│ │[ ] BUCKETEER Enable mod_bucketeer
│ │[ ] CASE_FILTER Enable mod_case_filter
│ │[ ] CASE_FILTER_IN Enable mod_case_filter_in
│ │[ ] EXT_FILTER Enable mod_ext_filter
│ │[ ] LOG_FORENSIC Enable mod_log_forensic
│ │[ ] OPTIONAL_HOOK_EXPORT Enable mod_optional_hook_export
│ │[ ] OPTIONAL_HOOK_IMPORT Enable mod_optional_hook_import
│ │[ ] OPTIONAL_FN_IMPORT Enable mod_optional_fn_import
│ │[ ] OPTIONAL_FN_EXPORT Enable mod_optional_fn_export
│ │[ ] LDAP Enable mod_ldap
│ │[ ] AUTHNZ_LDAP Enable mod_authnz_ldap
│ │[X] ACTIONS Enable mod_actions
│ │[X] ALIAS Enable mod_alias
│ │[X] ASIS Enable mod_asis
│ │[X] AUTOINDEX Enable mod_autoindex
│ │[X] CERN_META Enable mod_cern_meta
│ │[X] CGI Enable mod_cgi
│ │[X] CHARSET_LITE Enable mod_charset_lite
│ │[ ] DBD Enable mod_dbd
│ │[X] DEFLATE Enable mod_deflate
│ │[X] DIR Enable mod_dir
│ │[X] DUMPIO Enable mod_dumpio
│ │[X] ENV Enable mod_env
│ │[X] EXPIRES Enable mod_expires
│ │[X] HEADERS Enable mod_headers
│ │[X] IMAGEMAP Enable mod_imagemap
│ │[X] INCLUDE Enable mod_include
│ │[X] INFO Enable mod_info
│ │[X] LOG_CONFIG Enable mod_log_config
│ │[X] LOGIO Enable mod_logio
│ │[X] MIME Enable mod_mime
│ │[X] MIME_MAGIC Enable mod_mime_magic
│ │[X] NEGOTIATION Enable mod_negotiation
│ │[X] REWRITE Enable mod_rewrite
│ │[X] SETENVIF Enable mod_setenvif
│ │[X] SPELING Enable mod_speling
│ │[X] STATUS Enable mod_status
│ │[X] UNIQUE_ID Enable mod_unique_id
│ │[X] USERDIR Enable mod_userdir
│ │[X] USERTRACK Enable mod_usertrack
│ │[X] VHOST_ALIAS Enable mod_vhost_alias
│ │[X] FILTER Enable mod_filter
│ │[X] VERSION Enable mod_version
│ │[ ] PROXY Enable mod_proxy
│ │[ ] PROXY_CONNECT Enable mod_proxy_connect
│ │[X] PATCH_PROXY_CONNECT Patch proxy_connect SSL support
│ │[ ] PROXY_FTP Enable mod_proxy_ftp
│ │[ ] PROXY_HTTP Enable mod_proxy_http
│ │[ ] PROXY_AJP Enable mod_proxy_ajp
│ │[ ] PROXY_BALANCER Enable mod_proxy_balancer
│ │[ ] PROXY_SCGI Enable mod_proxy_scgi
│ │[X] SSL Enable mod_ssl
│ │[ ] SUEXEC Enable mod_suexec
│ │[ ] CGID Enable mod_cgid
├─└────────────────────────────────────────────────────────────────┘─┤
│ [ OK ] Cancel │
└────────────────────────────────────────────────────────────────────┘
Выбираем пункты под свои нужды. Жмем ОК, после чего выполняем инсталяцию.
10:14 user@ns [/usr/ports/www/apache22]#make install clean
После чего, в файл /etc/rc.conf добавляем apache22_enable="YES" После чего, пробуем запустить.
12:03 user@ns [/usr/ports/www/apache22]#/usr/local/etc/rc.d/apache22 start
Performing sanity check on apache22 configuration:
Syntax OK
Starting apache22.
12:03 user@ns [/usr/ports/www/apache22]#
Судя по всему, у меня завелось. Если у Вас что то другое, смотрите причины ошибки. Итак, mysql стоит, apache стоит, ставим php5.
12:03 user@ns [/usr/ports/www/apache22]#cd /usr/ports/lang/php5
12:05 user@ns [/usr/ports/lang/php5]#make config
Options for php5 5.2.12
[X] CLI Build CLI version
[ ] CGI Build CGI version
[X] APACHE Build Apache module
[ ] DEBUG Enable debug
[X] SUHOSIN Enable Suhosin protection system (not for jails)
[X] MULTIBYTE Enable zend multibyte support
[ ] IPV6 Enable ipv6 support
[X] MAILHEAD Enable mail header patch
[ ] REDIRECT Enable force-cgi-redirect support (CGI only)
[ ] DISCARD Enable discard-path support (CGI only)
[ ] FASTCGI Enable fastcgi support (CGI only)
[ ] PATHINFO Enable path-info-check support (CGI only)
[ OK ] Cancel
12:08 user@ns [/usr/ports/lang/php5]#make install clean
Выбираете все под свои нужды и устанавливаете. В конце Вам необходимо будет добавить в DirectoryIndex значение index.php (индексный, первоначальный файл) и 2 строки, обработки php apache'ем.
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
И перегружаете веб сервер. Для проверки, можете залить в директорию тестовый файлик.
12:11 phenix@ns [/usr/ports/lang/php5]#cd /usr/local/www/apache22/data
12:12 phenix@ns [/usr/local/www/apache22/data]#cat test.php
<?
phpinfo();
?>
12:13 phenix@ns [/usr/local/www/apache22/data]#
Ну и через броузер проверить, работает или нет. Страничка должна выдать все информацию из файла php.ini. Но это еще не все. Кроме самого PHP нам необходимо еще и некоторые модули, к примеру поддержка базы данных, либо графики. Для этого переходим в каталог /usr/ports/lang/php5-extensions/ и выбираем те модули, которые нам необходимы (через выполнение комманды make config а потом make install clean).
Для того, чтоб виртуальных хост отрабатывал из-под другого пользователя, в файл httpd-vhosts.conf, а именно в самом виртуальном хосте необходимо добавить следующее:
<IfModule itk.c>
AssignUserID testuser testuser
MaxClientsVHost 200
</IfModule>
Где директива AssignUserID говорит от имено кого будет запускаться виртуальных хост, MaxClientsVHost - количество обращений.
Вот собственно и все. Не расмотрел тут вариант настройки самого апача (чесно говоря - этого много, я всего лишь описал моменты с повышеной безопастностью, то, что сложно найти в инете), и не расмотрел вариант с настройкой php.ini, ну да это как раз тема для еще одной статьи.
Комментарии
Несколько дополнений
Несколько дополнений:
А так статья полезная. Я давно искал варианты запуска веба от учетки пользователя которому принадлежат файлы.
Спасибо, подправил.
Спасибо, подправил.
Можно еще расмотреть вопрос о
Можно еще расмотреть вопрос о чруте, но то уже на любителя.
Во. еще вопрос, а можешь подкинуть, что там по пхп.ини?
Что именно интересует?
Что именно интересует?
Ну хотелось бы увидеть пример
Ну хотелось бы увидеть пример php.ini
Будет время - распишу. Но в
Будет время - распишу. Но в инете этого счастья и так валом. :)