Skip to content

Commit b172c7d

Browse files
committed
add FPM sapi
1 parent 3036e6c commit b172c7d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+10355
-0
lines changed

sapi/fpm/LICENSE

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
Copyright (c) 2007-2009, Andrei Nigmatulin
2+
All rights reserved.
3+
4+
Redistribution and use in source and binary forms, with or without
5+
modification, are permitted provided that the following conditions
6+
are met:
7+
1. Redistributions of source code must retain the above copyright
8+
notice, this list of conditions and the following disclaimer.
9+
2. Redistributions in binary form must reproduce the above copyright
10+
notice, this list of conditions and the following disclaimer in the
11+
documentation and/or other materials provided with the distribution.
12+
13+
THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16+
ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
17+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19+
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20+
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21+
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22+
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23+
SUCH DAMAGE.

sapi/fpm/Makefile.frag

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
$(SAPI_FPM_PATH): $(PHP_GLOBAL_OBJS) $(PHP_SAPI_OBJS) $(SAPI_EXTRA_DEPS)
2+
$(BUILD_FPM)

sapi/fpm/conf/init.d.php-fpm.in

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
#! /bin/sh
2+
3+
### BEGIN INIT INFO
4+
# Provides: @php_fpm_bin@
5+
# Required-Start: $all
6+
# Required-Stop: $all
7+
# Default-Start: 2 3 4 5
8+
# Default-Stop: 0 1 6
9+
# Short-Description: starts @php_fpm_bin@
10+
# Description: starts the PHP FastCGI Process Manager daemon
11+
### END INIT INFO
12+
13+
php_fpm_BIN=@php_fpm_bin_path@
14+
php_fpm_CONF=@php_fpm_conf_path@
15+
php_fpm_PID=@php_fpm_pid_path@
16+
17+
18+
php_opts="--fpm-config $php_fpm_CONF"
19+
20+
21+
wait_for_pid () {
22+
try=0
23+
24+
while test $try -lt 35 ; do
25+
26+
case "$1" in
27+
'created')
28+
if [ -f "$2" ] ; then
29+
try=''
30+
break
31+
fi
32+
;;
33+
34+
'removed')
35+
if [ ! -f "$2" ] ; then
36+
try=''
37+
break
38+
fi
39+
;;
40+
esac
41+
42+
echo -n .
43+
try=`expr $try + 1`
44+
sleep 1
45+
46+
done
47+
48+
}
49+
50+
case "$1" in
51+
start)
52+
echo -n "Starting @php_fpm_bin@ "
53+
54+
$php_fpm_BIN $php_opts
55+
56+
if [ "$?" != 0 ] ; then
57+
echo " failed"
58+
exit 1
59+
fi
60+
61+
wait_for_pid created $php_fpm_PID
62+
63+
if [ -n "$try" ] ; then
64+
echo " failed"
65+
exit 1
66+
else
67+
echo " done"
68+
fi
69+
;;
70+
71+
stop)
72+
echo -n "Gracefully shutting down @php_fpm_bin@ "
73+
74+
if [ ! -r $php_fpm_PID ] ; then
75+
echo "warning, no pid file found - php-fpm is not running ?"
76+
exit 1
77+
fi
78+
79+
kill -QUIT `cat $php_fpm_PID`
80+
81+
wait_for_pid removed $php_fpm_PID
82+
83+
if [ -n "$try" ] ; then
84+
echo " failed. Use force-exit"
85+
exit 1
86+
else
87+
echo " done"
88+
fi
89+
;;
90+
91+
force-quit)
92+
echo -n "Terminating @php_fpm_bin@ "
93+
94+
if [ ! -r $php_fpm_PID ] ; then
95+
echo "warning, no pid file found - php-fpm is not running ?"
96+
exit 1
97+
fi
98+
99+
kill -TERM `cat $php_fpm_PID`
100+
101+
wait_for_pid removed $php_fpm_PID
102+
103+
if [ -n "$try" ] ; then
104+
echo " failed"
105+
exit 1
106+
else
107+
echo " done"
108+
fi
109+
;;
110+
111+
restart)
112+
$0 stop
113+
$0 start
114+
;;
115+
116+
reload)
117+
118+
echo -n "Reload service @php_fpm_bin@ "
119+
120+
if [ ! -r $php_fpm_PID ] ; then
121+
echo "warning, no pid file found - @php_fpm_bin@ is not running ?"
122+
exit 1
123+
fi
124+
125+
kill -USR2 `cat $php_fpm_PID`
126+
127+
echo " done"
128+
;;
129+
130+
*)
131+
echo "Usage: $0 {start|stop|force-quit|restart|reload}"
132+
exit 1
133+
;;
134+
135+
esac
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# @php_fpm_bin@ - PHP FastCGI Process Manager 'PHP-FPM'
2+
#
3+
# nginx-site-conf.sample:
4+
# Php Site configuration for nginx webserver
5+
#
6+
# 1. set $site_root /path/to/your/website;
7+
# 2. Rename this file. Copy it to /etc/nginx/sites-available, /etc/nginx/sites-enabled
8+
# 3. Restart nginx webserver, and @php_fpm_bin@ service.
9+
#
10+
11+
server {
12+
13+
set $site_root /var/www/nginx-site;
14+
server_name localhost;
15+
listen 80;
16+
17+
access_log /var/log/nginx/localhost.access.log;
18+
19+
location / {
20+
root $site_root;
21+
index index.html index.htm;
22+
}
23+
24+
#error_page 404 /404.html;
25+
26+
# redirect server error pages to the static page /50x.html
27+
#
28+
error_page 500 502 503 504 /50x.html;
29+
location = /50x.html {
30+
root /var/www/nginx-default;
31+
}
32+
33+
# pass the *.php scripts to @php_fpm_bin@ listening on port 9000
34+
#
35+
location ~ \.php$ {
36+
37+
root $site_root;
38+
fastcgi_pass 127.0.0.1:9000;
39+
fastcgi_index index.php;
40+
41+
include fastcgi_params;
42+
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
43+
fastcgi_param SERVER_NAME $http_host;
44+
fastcgi_ignore_client_abort on;
45+
}
46+
}

sapi/fpm/conf/php-fpm.conf.in

Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
<?xml version="1.0" ?>
2+
<configuration>
3+
4+
All relative paths in this config are relative to php's install prefix
5+
6+
<section name="global_options">
7+
8+
Pid file
9+
<value name="pid_file">@php_fpm_pid_path@</value>
10+
11+
Error log file
12+
<value name="error_log">@php_fpm_log_path@</value>
13+
14+
Log level
15+
<value name="log_level">notice</value>
16+
17+
When this amount of php processes exited with SIGSEGV or SIGBUS ...
18+
<value name="emergency_restart_threshold">10</value>
19+
20+
... in a less than this interval of time, a graceful restart will be initiated.
21+
Useful to work around accidental curruptions in accelerator's shared memory.
22+
<value name="emergency_restart_interval">1m</value>
23+
24+
Time limit on waiting child's reaction on signals from master
25+
<value name="process_control_timeout">5s</value>
26+
27+
Set to 'no' to debug fpm
28+
<value name="daemonize">yes</value>
29+
30+
</section>
31+
32+
<workers>
33+
34+
<section name="pool">
35+
36+
Name of pool. Used in logs and stats.
37+
<value name="name">default</value>
38+
39+
Address to accept fastcgi requests on.
40+
Valid syntax is 'ip.ad.re.ss:port' or just 'port' or '/path/to/unix/socket'
41+
<value name="listen_address">127.0.0.1:9000</value>
42+
43+
<value name="listen_options">
44+
45+
Set listen(2) backlog
46+
<value name="backlog">-1</value>
47+
48+
Set permissions for unix socket, if one used.
49+
In Linux read/write permissions must be set in order to allow connections from web server.
50+
Many BSD-derrived systems allow connections regardless of permissions.
51+
<value name="owner">@php_fpm_user@</value>
52+
<value name="group">@php_fpm_group@</value>
53+
<value name="mode">0666</value>
54+
</value>
55+
56+
Additional php.ini defines, specific to this pool of workers.
57+
These settings overwrite the values previously defined in the php.ini.
58+
<value name="php_defines">
59+
<!-- <value name="sendmail_path">/usr/sbin/sendmail -t -i</value> -->
60+
<!-- <value name="display_errors">0</value> -->
61+
<!-- <value name="error_log">/var/log/php-error.log</value> -->
62+
<!-- <value name="log_errors">true</value> -->
63+
</value>
64+
65+
Unix user of processes
66+
<value name="user">@php_fpm_user@</value>
67+
68+
Unix group of processes
69+
<value name="group">@php_fpm_group@</value>
70+
71+
Process manager settings
72+
<value name="pm">
73+
74+
Sets style of controling worker process count.
75+
Valid values are 'static' and 'apache-like'
76+
<value name="style">static</value>
77+
78+
Sets the limit on the number of simultaneous requests that will be served.
79+
Equivalent to Apache MaxClients directive.
80+
Equivalent to PHP_FCGI_CHILDREN environment in original php.fcgi
81+
Used with any pm_style.
82+
<value name="max_children">5</value>
83+
84+
Settings group for 'apache-like' pm style
85+
<value name="apache_like">
86+
87+
Sets the number of server processes created on startup.
88+
Used only when 'apache-like' pm_style is selected
89+
<value name="StartServers">20</value>
90+
91+
Sets the desired minimum number of idle server processes.
92+
Used only when 'apache-like' pm_style is selected
93+
<value name="MinSpareServers">5</value>
94+
95+
Sets the desired maximum number of idle server processes.
96+
Used only when 'apache-like' pm_style is selected
97+
<value name="MaxSpareServers">35</value>
98+
99+
</value>
100+
101+
</value>
102+
103+
The timeout (in seconds) for serving a single request after which the worker process will be terminated
104+
Should be used when 'max_execution_time' ini option does not stop script execution for some reason
105+
'0s' means 'off'
106+
<value name="request_terminate_timeout">0s</value>
107+
108+
The timeout (in seconds) for serving of single request after which a php backtrace will be dumped to slow.log file
109+
'0s' means 'off'
110+
<value name="request_slowlog_timeout">0s</value>
111+
112+
The log file for slow requests
113+
<value name="slowlog">@php_fpm_log_path@.slow</value>
114+
115+
Set open file desc rlimit
116+
<value name="rlimit_files">1024</value>
117+
118+
Set max core size rlimit
119+
<value name="rlimit_core">0</value>
120+
121+
Chroot to this directory at the start, absolute path
122+
<value name="chroot"></value>
123+
124+
Chdir to this directory at the start, absolute path
125+
<value name="chdir"></value>
126+
127+
Redirect workers' stdout and stderr into main error log.
128+
If not set, they will be redirected to /dev/null, according to FastCGI specs
129+
<value name="catch_workers_output">yes</value>
130+
131+
How much requests each process should execute before respawn.
132+
Useful to work around memory leaks in 3rd party libraries.
133+
For endless request processing please specify 0
134+
Equivalent to PHP_FCGI_MAX_REQUESTS
135+
<value name="max_requests">500</value>
136+
137+
Comma separated list of ipv4 addresses of FastCGI clients that allowed to connect.
138+
Equivalent to FCGI_WEB_SERVER_ADDRS environment in original php.fcgi (5.2.2+)
139+
Makes sense only with AF_INET listening socket.
140+
<value name="allowed_clients">127.0.0.1</value>
141+
142+
Pass environment variables like LD_LIBRARY_PATH
143+
All $VARIABLEs are taken from current environment
144+
<value name="environment">
145+
<value name="HOSTNAME">$HOSTNAME</value>
146+
<value name="PATH">/usr/local/bin:/usr/bin:/bin</value>
147+
<value name="TMP">/tmp</value>
148+
<value name="TMPDIR">/tmp</value>
149+
<value name="TEMP">/tmp</value>
150+
<value name="OSTYPE">$OSTYPE</value>
151+
<value name="MACHTYPE">$MACHTYPE</value>
152+
<value name="MALLOC_CHECK_">2</value>
153+
</value>
154+
155+
</section>
156+
157+
</workers>
158+
159+
</configuration>

0 commit comments

Comments
 (0)