Відмінності між версіями «Php fastcgi»
| Рядок 18: | Рядок 18: | ||
<source lang="bash" line="1"> | <source lang="bash" line="1"> | ||
| − | + | #!/bin/bash | |
| − | + | ||
| − | + | ## ABSOLUTE path to the PHP binary | |
| − | + | PHPFCGI="/opt/php/bin/php" | |
| − | + | ||
| − | + | ## tcp-port to bind on | |
| − | + | FCGIPORT="8888" | |
| − | + | ||
| − | + | ## IP to bind on | |
| − | + | FCGIADDR="127.0.0.1" | |
| − | + | ||
| − | + | ## number of PHP children to spawn | |
| − | + | PHP_FCGI_CHILDREN=5 | |
| − | + | ||
| − | + | ## number of request before php-process will be restarted | |
| − | + | PHP_FCGI_MAX_REQUESTS=1000 | |
| − | + | ||
| − | + | # allowed environment variables sperated by spaces | |
| − | + | ALLOWED_ENV="ORACLE_HOME PATH USER" | |
| − | + | ||
| − | + | ## if this script is run as root switch to the following user | |
| − | + | USERID=www-data | |
| − | + | ||
| − | + | ################## no config below this line | |
| − | + | ||
| − | + | if test x$PHP_FCGI_CHILDREN = x; then | |
| − | + | PHP_FCGI_CHILDREN=5 | |
| − | + | fi | |
| − | + | ||
| − | + | ALLOWED_ENV="$ALLOWED_ENV PHP_FCGI_CHILDREN" | |
| − | + | ALLOWED_ENV="$ALLOWED_ENV PHP_FCGI_MAX_REQUESTS" | |
| − | + | ALLOWED_ENV="$ALLOWED_ENV FCGI_WEB_SERVER_ADDRS" | |
| − | + | ||
| − | + | if test x$UID = x0; then | |
| − | + | EX="/bin/su -m -c \"$PHPFCGI -q -b $FCGIADDR:$FCGIPORT\" $USERID" | |
| − | + | else | |
| − | + | EX="$PHPFCGI -b $FCGIADDR:$FCGIPORT" | |
| − | + | fi | |
| − | + | ||
| − | + | echo $EX | |
| − | + | ||
| − | + | # copy the allowed environment variables | |
| − | + | E= | |
| − | + | ||
| − | + | for i in $ALLOWED_ENV; do | |
| − | + | E="$E $i=${!i}" | |
| − | + | done | |
| − | + | ||
| − | + | # clean environment and set up a new one | |
| − | + | nohup env - $E sh -c "$EX" &> /dev/null & | |
</source> | </source> | ||
| + | |||
Если же Вы решили попробовать использовать какое-либо стороннее программное обеспечение для запуска PHP как FastCGI-серера, могу посоветовать Вам взглянуть на утилиту spawn-fcgi из пакета lighttpd. | Если же Вы решили попробовать использовать какое-либо стороннее программное обеспечение для запуска PHP как FastCGI-серера, могу посоветовать Вам взглянуть на утилиту spawn-fcgi из пакета lighttpd. | ||
Версія за 22:25, 2 квітня 2009
После моего первого рассказа о веб- и reverse-proxy сервере nginx, я получил много писем с коментариями и вопросами насчет него. Одним из самых распространенных вопросом был “Как использовать PHP вместе с nginx?”. А этой маленькой пошаговой инструкции я постараюсь описать, как это можно сделать.
Since this article has been published long time ago, there is MUCH better option to manage PHP FastCGI processes than the one I described below. Please check out php-fpm project from Andrei Nigmatulin which IMHO is the best possible way to manage PHP processes.
Nginx включает в себя поддержку технологии FastCGI для работы с внешними серверами и утилитами. PHP тоже поддерживает FastCGI и может быть использован для обработки FastCGI-запросов от nginx.
Итак, для начала нам необходимо установить PHP с поддержкой технологии fastcgi и запустить его на каком-либо tcp-порту, на который потом будут переправляться запросы из nginx.
- Вы сможете запустить свой fastcgi-сервер. Но существует два возможных варианта, как это сделать:
- Запуск встроенного в PHP сервера FastCGI - метод, не требующий никаких дополнительных утилит.
Запуск PHP внутри какого-либо стороннего обработчика запросов - этот вариант может быть более удобным из-за большей гибкости в настройке.
Если Вы решили не использовать никакого стороннего ПО, то можете запустить PHP с использованием его встроенного менеджера FastCGI-запросов при помощи следующего скрипта:
1 #!/bin/bash
2
3 ## ABSOLUTE path to the PHP binary
4 PHPFCGI="/opt/php/bin/php"
5
6 ## tcp-port to bind on
7 FCGIPORT="8888"
8
9 ## IP to bind on
10 FCGIADDR="127.0.0.1"
11
12 ## number of PHP children to spawn
13 PHP_FCGI_CHILDREN=5
14
15 ## number of request before php-process will be restarted
16 PHP_FCGI_MAX_REQUESTS=1000
17
18 # allowed environment variables sperated by spaces
19 ALLOWED_ENV="ORACLE_HOME PATH USER"
20
21 ## if this script is run as root switch to the following user
22 USERID=www-data
23
24 ################## no config below this line
25
26 if test x$PHP_FCGI_CHILDREN = x; then
27 PHP_FCGI_CHILDREN=5
28 fi
29
30 ALLOWED_ENV="$ALLOWED_ENV PHP_FCGI_CHILDREN"
31 ALLOWED_ENV="$ALLOWED_ENV PHP_FCGI_MAX_REQUESTS"
32 ALLOWED_ENV="$ALLOWED_ENV FCGI_WEB_SERVER_ADDRS"
33
34 if test x$UID = x0; then
35 EX="/bin/su -m -c \"$PHPFCGI -q -b $FCGIADDR:$FCGIPORT\" $USERID"
36 else
37 EX="$PHPFCGI -b $FCGIADDR:$FCGIPORT"
38 fi
39
40 echo $EX
41
42 # copy the allowed environment variables
43 E=
44
45 for i in $ALLOWED_ENV; do
46 E="$E $i=${!i}"
47 done
48
49 # clean environment and set up a new one
50 nohup env - $E sh -c "$EX" &> /dev/null &
Если же Вы решили попробовать использовать какое-либо стороннее программное обеспечение для запуска PHP как FastCGI-серера, могу посоветовать Вам взглянуть на утилиту spawn-fcgi из пакета lighttpd.
Итак, Ваше сервер PHP запущен в режиме FastCGI и последнее, что Вам осталось сделать, это изменить конфигурацию Вашего сервера nginx таким образом, чтобы он переправлял все запросы к файлам php на определенный tcp-порт, на котором слушает PHP. Для этого может быть использован следующий пример секции location из конфигурационного файла nginx (полная версия примера нвходится здесь):
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:8888
#
location ~ .php$ {
fastcgi_pass 127.0.0.1:8888;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
}
Вот и все! Теперь Вы можете использовать Ваш сервер nginx для обслуживания любых сайтов, написанных на PHP с производительностью, близкой к той, с которой работает модель mod_php в Apache, но при этом у вас будет больше свободной памяти, что позволит Вам обрабатывать больше запросов от посетитесей Ваших сайтов.