164.实战3.PHP配置

发表于 linux 分类,标签:
1.依赖安装
[root@mysqlserver php-7.2.3]# yum -y install libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel curl curl-devel openssl openssl-devel

2.编译安装
[root@mysqlserver ~]# tar zxvf php-7.2.3.tar.gz
[root@mysqlserver ~]# cd php-7.2.3
./configure --prefix=/usr/local/php7 \
--enable-fpm \
--with-fpm-user=www \
--with-fpm-group=www \
--with-pdo-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-zlib \
--with-curl \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-openssl \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo -enable-tokenizer \
--enable-zip

make && make install
cp php.ini-production /usr/local/php7/lib/php.ini
cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/

--enable-fpm:表示启用 PHP-FPM 功能
--with-fpm-user:指定启动 PHP-FPM 进程的用户
--with-fpm-group:指定启动 PHP-FPM 进程的组
--with-pdo-mysql=mysqlnd:表示使用mysqlnd 驱动,这里的选项涉及两个概念,一个是PDO,另一个是mysqlnd
--with-mysqli=mysqlnd mysqli 叫作 MySQL 增强扩展

3.PHP-FPM配置文件
[root@mysqlserver ~]# cp /usr/local/php7/etc/php-fpm.conf.default /usr/local/php7/etc/php-fpm.conf
[root@mysqlserver ~]# cp /usr/local/php7/etc/php-fpm.d/www.conf.default /usr/local/php7/etc/php-fpm.d/www.conf

修改配置
vim /usr/local/php7/etc/php-fpm.d/www.conf
[www]
user = www
group = www
listen = 127.0.0.1:9000
;listen = /dev/shm/php7-cgi.sock
pm = dynamic
pm.max_children = 100
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 50

user 和 group 用于设置运行 PHP-FPM 进程的用户和用户组。
需要注意的是,这里指定的用户和用户组要和 Nginx 配置文件中指定的用户和用户组一致。
listen 是配置 PHP-FPM 进程监听的IP地址以及端口,默认是127.0.0.1:9000。
pm.max children 用于设置 PHP-FPM 的进程数。根据官方建议,小于2GB内存的服务器,可以只开启64个进程,4GB以上内存的服务器可以开启200个进程。
pm:pm 用来指定 PHP-FPM 进程池开启进程的方式,有两个值可以选择,分别是static(静态)和 dynamic(动态)。
static 表示直接开启指定数量的 PHP-FPM 进程,不再增加或者减少;
dynamic 表示开始时开启一定数量的PHP-FPM 进程,当请求量变大时,可以动态地增加 PHP-FPM 进程数直到上限,当空闲时自动释放空闲的进程数到一个下限。
这两种不同的执行方式,可以根据服务器的实际需求来进行调整。
pm.max children:在 static 方式下表示固定开启的 PHP-FPM 进程数量;在 dynamic方式下表示开启 PHP-FPM 的最大进程数。
pm.start servers:表示在 dynamic 方式下初始开启 PHP-FPM 进程的数量。pm.min spare servers:表示在 dynamic 方式空闲状态下开启的最小 PHP-FPM 进程的数量。
pm.max_spare_servers:表示在 dynamic 方式空闲状态下开启的最大 PHP-FPM 进程的数量,这里要注意 pm.max spare servers 的值只能小于等于 pm.max children 的值。如果 pm 被设置为 static,那么其实只有pm.maxchildren 这个参数生效。系统会开启参数设置固定数量的PHP-FPM 进程。如果pm被设置为dynamic,以上4个参数都生效。系统会在PHP-FPM 运行开始时启动pm.start servers指定的 PHP-FPM 进程数,然后根据系统的需求动态在 pm.min spare servers 和 pm.max spare servers 之间调整 PHP-FPM 进程数。

;;;;;;;;;;;;;;;;;;;;;
; FPM Configuration ;
;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;
; Global Options ;
;;;;;;;;;;;;;;;;;;

[global]
pid = run/php-fpm.pid
error_log = "/data/wwwlogs/php56-fpm/log/error_log"
log_level = warning

emergency_restart_threshold = 30
emergency_restart_interval = 60s
process_control_timeout = 5s
daemonize = no

;;;;;;;;;;;;;;;;;;;;
; Pool Definitions ;
;;;;;;;;;;;;;;;;;;;;

[www]
listen = /dev/shm/php5.6-cgi.sock
listen.backlog = -1
listen.allowed_clients = 127.0.0.1:9000
listen.owner = www
listen.group = www
listen.mode = 0666
user = www
group = www

;;pm = static
;;pm.max_children = 2400
;;pm.start_servers = 50
;;pm.min_spare_servers = 40
;;pm.max_spare_servers = 2400
;;pm.max_requests = 102400
;;pm.process_idle_timeout = 30s
;;request_terminate_timeout = 600
;;request_slowlog_timeout = 3
;
;pm = dynamic
;pm.max_children = 1200
;pm.start_servers = 50
;pm.min_spare_servers = 30
;pm.max_spare_servers = 1200
;pm.max_requests = 0
;pm.process_idle_timeout = 10s
;request_terminate_timeout = 600
;request_slowlog_timeout = 3

;pm = static
;pm.max_children = 2400
;pm.start_servers = 50
;pm.min_spare_servers = 30
;pm.max_spare_servers = 2400
;pm.max_requests = 10240          ;每个进程处理多少个请求之后自动终止,防内存泄漏
;pm.process_idle_timeout = 30s    ;按需方式下多长时间杀掉php-fpm子进程,直到master进程
;request_terminate_timeout = 600  ;设置单个请求的超时中止时间,如果出现502调整这个
;request_slowlog_timeout = 3

pm = dynamic
pm.max_children = 1200
pm.start_servers = 50
pm.min_spare_servers = 30
pm.max_spare_servers = 1200
pm.max_requests = 0            ;每个进程处理多少个请求之后自动终止,防内存泄漏
pm.process_idle_timeout = 0      ;按需方式下多长时间杀掉php-fpm子进程,直到master进程
request_terminate_timeout = 600    ;设置单个请求的超时中止时间,如果出现502调整这个
request_slowlog_timeout = 3       ;当一个请求该设置的超时时间后,就会将对应的PHP调用堆栈信息完整写入到慢日志>中. 设置为 ’0′ 表示 ‘Off’

pm.status_path = /php-fpm_status
slowlog = /data/wwwlogs/php56-fpm/log/slow.log
rlimit_files = 655350
rlimit_core = 0

catch_workers_output = yes
;env[HOSTNAME] = iZbp19pb6iba2tiaynwwgxZ
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
#php_admin_value[disable_functions] = passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,popen,phpinfo
php_admin_value[open_basedir] = /data/wwwroot/:/data/text_data/:/data/pdf_data/:/tmp/:/var/tmp:/proc/
php_admin_value[session.save_path] = /tmp/
php_admin_value[upload_tmp_dir] = /tmp/

4.服务管理脚本
cat /usr/lib/systemd/system/php-fpm.service

[Unit]
Description=The PHP FastCGI Process Manager
After=network.target

[Service]
Type-simple
PIDFile=/usr/local/php7/var/run/php-fpm.pid
ExecStart=/usr/local/php7/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php7/etc/php-fpm.conf
ExecReload=/bin/ki11 -USR2 $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
5.启动服务
[root@mysqlserver~]# systemctl enable php-fpm
[root@mysqlserver~]# systemctl start php-fpm

6.配置NGINX
原文:
server {
    listen 80;
    server_name www.abc.com;
    location /{
    index index.html index.php;
    root /web/wwwdata;
    }
    location ~.php$ {
        root html;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME html$fastcgi_script_name;
        include fastcgi_params;
    }
}
改进:
nginx.conf中http加入
########################## vhost #############################
include vhost/*.conf;
进入vhost文件夹
server {

  listen 81;
#  listen 443 ssl http2;
#  ssl_certificate /opt/verynginx/openresty/nginx/conf/ssl/yaozh.com.pem;
#  ssl_certificate_key /opt/verynginx/openresty/nginx/conf/ssl/yaozh.com.key;  
#  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#  ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
#  ssl_prefer_server_ciphers on;
#  ssl_session_timeout 10m;
#  ssl_session_cache builtin:1000 shared:SSL:10m;
#  ssl_buffer_size 1400;
#  ssl_stapling on;
#  ssl_stapling_verify on;

  server_name 172.22.0.50;
  error_log /data/wwwlogs/lei_error_nginx.log error;
  index index.html index.htm index.php;
  root /data/wwwroot/lei.com;

  location ~ [^/]\.php(/|$) {
    fastcgi_pass 127.0.0.1:9000;
    #fastcgi_pass unix:/dev/shm/php-cgi.sock;
    fastcgi_index index.php;
    include fastcgi.conf;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    #fastcgi_param PHP_VALUE "auto_prepend_file=/data/tmp/WAF/test.php";
  }

  location ~ /\.ht {
    deny all;
  }
  location ~ /\.git {
    deny all;
  }

}

7.测试
vim /usr/local/nginx/html/phpinfo.php
<?php
//php软件信息
echo phpinfo(0b01)

?>

#查看安装模块信息
[root@mysqlserver~]# /usr/local/php7/bin/php -m

8.测试mysql链接
<?php
    $conn = mysqli_connect('127.0.0.1', 'root', 'shimujiuxia', 'mysql');
    if (!$conn) {
        die("数据库连接错误: " . mysqli_connect_error());
    } else {
        echo "数据库连接成功";
    }
?>


0 篇评论

发表我的评论