Всем привет.
Под капотом приведен пример того, как можно настроить php-cgi на основе unix:sockets.
Пример рассчитан на дистрибутивы Ubuntu и Debian.
Лично мне этот способ очень нравится, по этому решил поделится с общественностью, которая с ним не знакома.
Ну во-первых, потому что он очень простой.
Во-вторых, гибкий благодаря сокетам
В-третьих, быстрый.
Ну и другие вытекающие возможности, в том числе и с правами)
Дальше не чего особенного, стандартные действия:
sudo apt-get update
sudo apt-get install nginx
sudo apt-get install php5-cgi
Для связывания, достаточно воспользоваться скриптом одного хорошего человека Till Klampaeckel.
И так, в дириктории /etc/init.d/ создаем файл php-fcgid
записываем в него следующее:
В настройках nginx настраиваем соответствие пользователя с fastcgi_pass.
Пример конфига:
Первый запуск скрипта:
sudo bash /etc/init.d/php-fcgid
Перезапуск nginx, после изменений, думаю занаете как.
Собственно на этом все.
Enjoy!
Под капотом приведен пример того, как можно настроить php-cgi на основе unix:sockets.
Пример рассчитан на дистрибутивы Ubuntu и Debian.
Введение
Лично мне этот способ очень нравится, по этому решил поделится с общественностью, которая с ним не знакома.
Ну во-первых, потому что он очень простой.
Во-вторых, гибкий благодаря сокетам
В-третьих, быстрый.
Ну и другие вытекающие возможности, в том числе и с правами)
Установка
Дальше не чего особенного, стандартные действия:
nginx
sudo apt-get update
sudo apt-get install nginx
php
sudo apt-get install php5-cgi
Связываем php и nginx
Для связывания, достаточно воспользоваться скриптом одного хорошего человека Till Klampaeckel.
И так, в дириктории /etc/init.d/ создаем файл php-fcgid
записываем в него следующее:
#!/bin/sh
#
# Author: Till Klampaeckel <till@php.net>
# Credits
# * original script: http://unix.derkeiler.com/Mailing-Lists/FreeBSD/questions/2007-09/msg00468.html
# * improved: http://till.klampaeckel.de/blog/archives/30-PHP-performance-III-Running-nginx.html
# * all linux start script fu inspired by CouchDB's start script (by Noah Slater)
SCRIPT_OK=0
SCRIPT_ERROR=1
DESCRIPTION="php-fcgi super-duper-control thing"
NAME=php-fgcid
SCRIPT_NAME=$(basename $0)
WWW_GROUP=www-data
PHP_CGI=/usr/bin/php-cgi
phpfcgid_users="user1 user2"
phpfcgid_children="2"
phpfcgid_tmpdir="/tmp"
phpfcgid_requests="100"
log_daemon_msg () {
echo $@
}
log_end_msg () {
# Dummy function to be replaced by LSB library.
if test "$1" != "0"; then
echo "Error with $DESCRIPTION: $NAME"
fi
return $1
}
phpfcgid_start() {
echo "Starting $NAME with $phpfcgid_children children (req: $phpfcgid_requests)."
export PHP_FCGI_CHILDREN=$phpfcgid_children
export PHP_FCGI_MAX_REQUESTS=$phpfcgid_requests
for user in ${phpfcgid_users}; do
socketdir="${phpfcgid_tmpdir}/.fastcgi.${user}"
mkdir -p ${socketdir}
chown ${user}:${WWW_GROUP} ${socketdir}
chmod 0750 ${socketdir}
su -m ${user} -c "${PHP_CGI} -b ${socketdir}/socket&"
done
}
phpfcgid_stop() {
echo "Stopping $NAME."
pids=`pgrep php-cgi`
pkill php-cgi
}
phpfcgid_status() {
log_daemon_msg "To be implemented: status"
log_end_msg $SCRIPT_ERROR
}
parse_script_option_list () {
case "$1" in
start)
log_daemon_msg "Starting $DESCRIPTION" $NAME
if phpfcgid_start; then
log_end_msg $SCRIPT_OK
else
log_end_msg $SCRIPT_ERROR
fi
;;
stop)
log_daemon_msg "Stopping $DESCRIPTION" $NAME
if phpfcgid_stop; then
log_end_msg $SCRIPT_OK
else
log_end_msg $SCRIPT_ERROR
fi
;;
restart|force-reload)
log_daemon_msg "Restarting $DESCRIPTION" $NAME
if phpfcgid_stop; then
if phpfcgid_start; then
log_end_msg $SCRIPT_OK
else
log_end_msg $SCRIPT_ERROR
fi
else
log_end_msg $SCRIPT_ERROR
fi
;;
status)
phpfcgid_status
;;
*)
cat << EOF >&2
Usage: $SCRIPT_NAME {start|stop|restart|force-reload|status}
EOF
exit $SCRIPT_ERROR
;;
esac
}
parse_script_option_list $@
Настраиваем
В настройках nginx настраиваем соответствие пользователя с fastcgi_pass.
Пример конфига:
server {
listen 80;
server_name myhost.com;
access_log /var/log/nginx/myhost.com.access.log;
location / {
autoindex on;
root /var/www/myhost.com;
index index.php index.html index.htm;
}
location ~ .php {
include fastcgi_params;
fastcgi_pass unix:/tmp/.fastcgi.www-data/socket;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/myhost.com/$fastcgi_script_name;
}
}
Первый запуск скрипта:
sudo bash /etc/init.d/php-fcgid
Перезапуск nginx, после изменений, думаю занаете как.
Собственно на этом все.
Enjoy!
