Nginx php-cgi
Материал из wiki.lissyara.su
Что нужно: Альтернатива Apache + PHP.
Установка nginx:
cd/usr/ports/www/nginx make install clean Оставляем всё по умолчанию/пониманию: [X] HTTP_MODULE [X] HTTP_REWRITE_MODULE [X] HTTP_STATUS_MODULE [X] WWW
Устанавливаем PHP:
cd /usr/ports/lang/php5 make install clean Оставляем всё по умолчанию/пониманию: [X] CLI Build CLI version [X] CGI Build CGI version [X] SUHOSIN Enable Suhosin protection system (not for jails) [X] REDIRECT Enable force-cgi-redirect support (CGI only) [X] DISCARD Enable discard-path support (CGI only) [X] FASTCGI Enable fastcgi support (CGI only) [X] PATHINFO Enable path-info-check support (CGI only)
Устанавливаем PHP-extensions:
cd /usr/ports/lang/php5-extensions make install clean По мере необходимости отмечаем необходимые модули, postfixadmin и roundcube требуют: [X] DOM DOM support [X] GD GD library support [X] ICONV iconv support [X] IMAP IMAP support [X] MBSTRING multibyte string support [X] MYSQL MySQL database support [X] SESSION session support [X] SIMPLEXML simplexml support [X] SPL Standard PHP Library
Создаём скрипт запуска fcgi-сервера:
/usr/local/etc/rc.d/php-cgi
#!/bin/sh
#
# PROVIDE: php_fastcgi
# REQUIRE: DAEMON
# BEFORE: LOGIN
# KEYWORD: shutdown
. /etc/rc.subr
name="php_fastcgi"
rcvar=`set_rcvar`
load_rc_config $name
: ${php_fastcgi_enable="NO"}
: ${php_fastcgi_user="www"}
: ${php_fastcgi_bindaddr="127.0.0.1"}
: ${php_fastcgi_bindport="9000"}
: ${php_fastcgi_children="5"}
: ${php_fastcgi_max_requests="1000"}
: ${php_fastcgi_allowed_env=""}
export PHP_FCGI_CHILDREN=${php_fastcgi_children};
export PHP_FCGI_MAX_REQUESTS=${php_fastcgi_max_requests};
command="/usr/local/bin/php-cgi";
command_args="-q -b ${php_fastcgi_bindaddr}:${php_fastcgi_bindport} &";
pidfile="/var/run/${name}.pid";
_allowed_env="ORACLE_HOME PATH USER PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS FCGI_WEB_SERVER_ADDRS";
_allowed_env="${_allowed_env} ${php_fastcgi_allowed_env}";
start_precmd=start_precmd;
start_postcmd="sleep 1;ps -U ${php_fastcgi_user} -o 'pid,command'|grep ${command}|head -1|\
awk '{print \$1}' > ${pidfile}";
stop_postcmd=stop_postcmd;
start_precmd()
{
export USER=${php_fastcgi_user};
E=
for i in ${_allowed_env}; do
eval _val="\$$i";
if [ "${_val}_x" != "_x" ]; then
eval _add="$i=$_val";
E="${E} ${_add}";
fi
done
command="env - ${E} ${command}";
}
stop_postcmd()
{
rm -f $pidfile
}
load_rc_config $name;
run_rc_command "$1";
Примерно до такого содержания правим конфигурационный файл (nginx.conf):
/usr/local/etc/nginx/nginx.conf
user www;
worker_processes 3;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
server_names_hash_max_size 2048;
server_names_hash_bucket_size 128;
server {
listen 80;
server_name ИМЯ_СЕРВЕРА или IP_Адрес;
charset utf8;
client_max_body_size 25m; # 25Мбайт для body (К примеру, вложение в письме)
location / {
root /usr/local/www;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/local/www/nginx;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/www$fastcgi_script_name;
include fastcgi_params;
}
location /nginx-status {
# Это для просмотра статистики по http://ИМЯ_СЕРВЕРА или IP_Адрес/nginx-status
stub_status on;
access_log off;
allow 192.168.2.0/24;
deny all;
}
}
}
Прописываем всё в rc.conf:
nginx_enable="YES" php_fastcgi_enable="YES" php_fastcgi_user="www" php_fastcgi_bindaddr="127.0.0.1" php_fastcgi_bindport="9000" php_fastcgi_children="5" php_fastcgi_max_requests="1000" php_fastcgi_allowed_env=""
Всё, теперь запускаем php-cgi,nginx и проверяем работу. Если вносите изменения в php.ini перезапускать нужно php-cgi.
Может пригодится:
# /usr/local/bin/php-cgi --help
Usage: php-cgi [-q] [-h] [-s] [-v] [-i] [-f <file>]
php-cgi <file> [args...]
-a Run interactively
-b <address:port>|<port> Bind Path for external FASTCGI Server mode
-C Do not chdir to the script's directory
-c <path>|<file> Look for php.ini file in this directory
-n No php.ini file will be used
-d foo[=bar] Define INI entry foo with value 'bar'
-e Generate extended information for debugger/profiler
-f <file> Parse <file>. Implies `-q'
-h This help
-i PHP information
-l Syntax check only (lint)
-m Show compiled in modules
-q Quiet-mode. Suppress HTTP Header output.
-s Display colour syntax highlighted source.
-v Version number
-w Display source with stripped comments and whitespace.
-z <file> Load Zend extension <file>.
-T <count> Measure execution time of script repeated <count> times.
Посмотреть версию php можно так:
# /usr/local/bin/php-cgi -v
PHP 5.2.6 with Suhosin-Patch 0.9.6.2 (cgi-fcgi) (built: Nov 19 2008 14:14:48) Copyright (c) 1997-2008 The PHP Group Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
Список модулей:
# /usr/local/bin/php-cgi -m
[PHP Modules] cgi-fcgi date dom gd iconv imap libxml mbstring mysql pcre Reflection session SimpleXML SPL standard [Zend Modules]
Источники:
http://www.lissyara.su/?id=1532 + комментарий nikll