一、安装依赖
[root@test1 tmp]# yum -y install gcc-c++ gd-devel openssl-devel libjpeg-devel libpng-devel freetype-devel libxml2-devel curl-devel zlib-devel libxml2-devel bzip2-devel libjpeg-devel autoconf
二、编译php
[root@test1 tmp]# tar -zxf php-7.2.8.tar.gz
[root@test1 tmp]# cd php-7.2.8/ //先安装nginx后生成nginx用户
./configure \
--prefix=/usr/local/php7 \
--with-config-file-path=/usr/local/php7/etc \
--with-config-file-scan-dir=/usr/local/php7/etc/php.d/ \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-iconv \
--with-zlib \
--with-openssl \
--with-xmlrpc \
--with-gettext \
--with-curl \
--with-mhash \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--with-libzip \
--with-pear \
--enable-xml \
--enable-pdo \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--enable-mbregex \
--enable-fpm \
--enable-json \
--enable-mbstring \
--enable-ftp \
--enable-pcntl \
--enable-sockets \
--enable-soap \
--enable-session \
--disable-ipv6 \
--enable-opcache
[root@test1 php-7.2.8]# make && make install
[root@test1 php-7.2.8]# cp php.ini-production /usr/local/php7/etc/php.ini
[root@test1 php-7.2.8]# cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/php7-fpm.service
[root@test1 php-7.2.8]# cp /usr/local/php7/etc/php-fpm.conf.default /usr/local/php7/etc/php-fpm.conf
[root@test1 php-7.2.8]# cp /usr/local/php7/etc/php-fpm.d/www.conf.default /usr/local/php7/etc/php-fpm.d/www.conf
[root@test1 php-7.2.8]# mkdir /usr/local/php7/etc/php.d -p
[root@test1 php-7.2.8]# echo "zend_extension=opcache.so" > /usr/local/php7/etc/php.d/opcache.ini
[root@test1 php-7.2.8]# ln -s /usr/local/php7/bin/phpize /bin/phpize
[root@test1 php-7.2.8]# ln -s /usr/local/php7/bin/php /usr/bin/php7
三、优化配置
[root@test1 php-7.2.8]# echo "php_admin_value[memory_limit] = 512M" >> /usr/local/php7/etc/php-fpm.d/www.conf
[root@test1 php-7.2.8]# echo "php_admin_value[upload_max_filesize] = 20M" >> /usr/local/php7/etc/php-fpm.d/www.conf
[root@test1 php-7.2.8]# echo "php_admin_value[post_max_size] = 20M" >> /usr/local/php7/etc/php-fpm.d/www.conf
四、服务管理
[root@test1 php-7.2.8]# systemctl enable php7-fpm.service
[root@test1 php-7.2.8]# systemctl start php7-fpm.service
五、安装扩展
- 安装redis扩展
[root@test1 tmp]# echo -e "\n"|/usr/local/php7/bin/pecl install redis [root@test1 tmp]# echo "extension=redis.so" > /usr/local/php7/etc/php.d/redis.ini [root@test1 tmp]# /usr/local/php7/bin/php -m|grep redis redis
- 安装php-beast-master
[root@test1 tmp]# wget http://soft.g6p.cn/deploy/source/php-beast-master.zip [root@test1 tmp]# unzip php-beast-master.zip [root@test1 tmp]# cd php-beast-master/ [root@test1 php-beast-master]# /usr/local/php7/bin/phpize [root@test1 php-beast-master]# ./configure --with-php-config=/usr/local/php7/bin/php-config [root@test1 php-beast-master]# make && make install [root@test1 php-beast-master]# ls /usr/local/php7/lib/php/extensions/no-debug-non-zts-20170718/beast.so [root@test1 php-beast-master]# vi /usr/local/php7/etc/php.d/50-beast.ini extension=beast.so beast.log_file = "/tmp/php_beast.log"
六、compose包管理工具
- compose安装
[root@test1 tmp]# cd /usr/local/php7/bin/ [root@test1 bin]# curl -sS https://getcomposer.org/installer | ./php [root@test1 bin]# vi /usr/bin/composer7 添加如下内容: #!/bin/bash export PATH=PATH:/usr/local/php7/bin/ /usr/local/php7/bin/php /usr/local/php7/bin/composer.phar* [root@test1 bin]# chmod +x /usr/bin/composer7
- 配置compose国内源
[root@test1 ~]# sudo -H -u nginx bash -c 'composer7 config -g repo.packagist composer https://packagist.phpcomposer.com' [root@test1 ~]# composer7 -v
七、优化配置文件
以下配置优化取自php5,未经验证
[root@test-web php-fpm.d]# cat web1.conf
[web1]
;fpm监听端口,即nx中php处理的地址,一般默认值即可。可用格式为: 'ip:port', 'port', '/path/to/unix/socket'. 每个进程池都需要设置。如果nginx和php在不同的机器上,分布式处理,就设置ip这里就可以了。
;listen = 127.0.0.1:9000
listen = /var/run/php-fpm/php-fpm_web1.sock
;listen.allowed_clients = 127.0.0.1
;允许访问FastCGI进程的IP白名单,设置any为不限制IP,如果要设置其他主机的nginx也能访问这台FPM进程,listen处要设置成本地可被访问的IP。默认值是any。每个地址是用逗号分隔. 如果没有设置或者为空,则允许任何服务器请求连接。
;backlog数,设置 listen 的半连接队列长度,-1表示无限制,由操作系统决定,此行注释掉就行。
listen.backlog = 2048
;unix socket设置选项,如果使用tcp方式访问,这里注释即可。
listen.owner = nginx
listen.group = nginx
listen.mode = 0666
;启动进程的用户和用户组,FPM 进程运行的Unix用户, 必须要设置。用户组,如果没有设置,则默认用户的组被使用。
user = nginx
group = nginx
;每一个请求的访问日志,默认是关闭的。
access.log = /data/logs/php-fpm/access.log
;设定访问日志的格式。
access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"
;php-fpm进程启动模式,pm可以设置为static和dynamic和ondemand 如果选择static,则进程数就数固定的,由pm.max_children指定固定的子进程数。
;pm = dynamic
pm = static
;如果选择dynamic,则进程数是动态变化的,由以下参数决定:
pm.max_children = 30 ;子进程最大数
pm.start_servers = 30 ;启动时的进程数,默认值为: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.min_spare_servers = 30 ;保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程
pm.max_spare_servers = 50 ;保证空闲进程数最大值,如果空闲进程大于此值,此进行清理
pm.max_requests = 80 ;设置每个子进程重生之前服务的请求数. 对于可能存在内存泄漏的第三方模块来说是非常有用的. 如果设置为 '0' 则一直接受请求. 等同于 PHP_FCGI_MAX_REQUESTS 环境变量. 默认值: 0.
pm.status_path = /php-fpm_status_web1 ;FPM状态页面的网址. 如果没有设置, 则无法访问状态页面. 默认值: none. munin监控会使用到
ping.path = /php-fpm_ping_web1 ;FPM监控页面的ping网址. 如果没有设置, 则无法访问ping页面. 该页面用于外部检测FPM是否存活并且可以响应请求. 请注意必须以斜线开头 (/)
ping.response = pong ;用于定义ping请求的返回相应. 返回为 HTTP 200 的 text/plain 格式文本. 默认值: pong.
;request_terminate_timeout = 60s ;设置单个请求的超时中止时间. 该选项可能会对php.ini设置中的'max_execution_time'因为某些特殊原因没有中止运行的脚本有用. 设置为 '0' 表示 'Off'.当经常出现502错误时可以尝试更改此选项。
request_slowlog_timeout = 20s ;当一个请求该设置的超时时间后,就会将对应的PHP调用堆栈信息完整写入到慢日志中. 设置为 '0' 表示 'Off'
slowlog = /var/log/php-fpm/www-slow.log ;慢请求的记录日志,配合request_slowlog_timeout使用,默认关闭
rlimit_files = 10240 ;设置文件打开描述符的rlimit限制. 默认值: 系统定义值默认可打开句柄是1024,可使用 ulimit -n查看,ulimit -n 2048修改。
security.limit_extensions = .php .php3 .php4 .php5 ;设置php允许执行的文件,默认只允许执行.php文件。
php_admin_value[error_log] = /data/logs/php-fpm/www-error.log ;php_admin_value[error_log] 参数 会覆盖php.ini中的 error_log 参数
php_admin_flag[log_errors] = on ;记录错误信息(保存到日志文件中)
php_admin_value[date.timezone] = Asia/Shanghai ;增加参数,默认 date.timezone 是被注释掉的,也就是默认时区是 utc,设置php时区
php_value[session.save_handler] = files ;session的存储方式
php_value[session.save_path] = /var/lib/php/session ;session id存放路径
php_admin_value[upload_max_filesize] = 20M
php_admin_value[post_max_size] = 20M
php_admin_value[memory_limit] = 512M ;memory_limit主要是为了防止程序错误,或者死循环占用大量的内存,导致系统宕机。在引入大量三方插件,或者代码时,进行内存限制就非常有必要了。
;php_admin_value[disable_functions] = exec,popen,system,passthru,shell_exec,escapeshellarg,escapeshellcmd,proc_close,proc_open
;使用disable_functions限制程序使用一些可以直接执行系统命令的函数如system,exec,passthru,shell_exec,proc_open等等。
;php_admin_value[disable_functions] = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server
;php_admin_value[open_basedir] = /data/www/:/tmp/:/home/www/
;upload_tmp_dir 的这个参数为上传文件的临时目录,需要 php 进程有读写权限。
php_admin_value[upload_tmp_dir] = /tmp
php_admin_value[display_errors] = On
留言