Відмінності між версіями «Php fastcgi»

Матеріал з Wiki Welard
Перейти до навігації Перейти до пошуку
 
(Не показано одну проміжну версію цього користувача)
Рядок 18: Рядок 18:
  
 
<source lang="bash" line="1">
 
<source lang="bash" line="1">
−
#!/bin/bash
 
  
−
## ABSOLUTE path to the PHP binary
+
#!/bin/bash
−
PHPFCGI="/opt/php/bin/php"
+
 +
## 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" &amp;&gt; /dev/null &amp;
  
−
## 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" &amp;&gt; /dev/null &amp;
 
 
</source>
 
</source>
  
−
Если же Вы решили попробовать использовать какое-либо стороннее программное обеспечение для запуска PHP как FastCGI-серера, могу посоветовать Вам взглянуть на утилиту spawn-fcgi из пакета lighttpd.  
+
Если же Вы решили попробовать использовать какое-либо стороннее программное обеспечение для запуска PHP как FastCGI-серера, могу посоветовать Вам взглянуть на утилиту spawn-fcgi из пакета lighttpd.  
  
 
Итак, Ваше сервер PHP запущен в режиме FastCGI и последнее, что Вам осталось сделать, это изменить конфигурацию Вашего сервера nginx таким образом, чтобы он переправлял все запросы к файлам php на определенный tcp-порт, на котором слушает PHP. Для этого может быть использован следующий пример секции location из конфигурационного файла nginx (полная версия примера нвходится здесь):  
 
Итак, Ваше сервер PHP запущен в режиме FastCGI и последнее, что Вам осталось сделать, это изменить конфигурацию Вашего сервера nginx таким образом, чтобы он переправлял все запросы к файлам php на определенный tcp-порт, на котором слушает PHP. Для этого может быть использован следующий пример секции location из конфигурационного файла nginx (полная версия примера нвходится здесь):  

Поточна версія на 22:42, 2 квітня 2009

Оригинал nginx wiki

После моего первого рассказа о веб- и 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" &amp;&gt; /dev/null &amp;
Если же Вы решили попробовать использовать какое-либо стороннее программное обеспечение для запуска 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, но при этом у вас будет больше свободной памяти, что позволит Вам обрабатывать больше запросов от посетитесей Ваших сайтов.