概述:
=========================================================================================
回顾:
lamp 详解
1.php嵌入式web应用编程语言
★作者:
- Rasmus Lerdorf,Personal Home Page tool, C语言(CGI,Web Forms), PHP/FI
- zeev, andi重写php的解析器,
zend engine 1.0, php 4.0;
zend engine 2.0,php 5.0(增强的面向对象,PDO)
★zend engine引擎:
- 分两各个阶段:解析和执行
解析:编译 --> opcode操作码
- 整个过程分为四步
1)Scanning(Lexing):扫描,做词法分析
2)Parsing:语法分析
3)Compilation:编译成二进制格式
4)Excution:执行
前三步为解析编译过程,最后为执行过程。
- hhvm:将PHP代码转换成高级别的字节码(通常称为中间语言)。然后在运行时通过即时(JIT)编译器将这些字节码转换为x64的机器码;
★php加速器:
- 基于php的特殊扩展机制,如opcode缓存扩展可以将opcode缓存于php的共享内存中,从而可以让同一段代码的后续重复执行时跳过编译阶段以提高性能。由此,可以看出,这些加速器并非真正提高了opcode的运行速度,而仅是通过分析opcode后并将他们重新排列以达到快速执行的目的。
- 常见的php加速器:
APC,eAccelerator
XCache:快速而且稳定的php opcode缓存,经过严格测试被大量应用于生产环境
★配置文件:
- /etc/php.ini, /etc/php.d/*.ini
- ini:
[section_id]
directive = value
注释符为分号;
需要修改的位置date.timezone时区
- php.ini的核心配置选项:
http://php.net/manual/zh/ini.core.php
- php.ini配置选项列表:
http://php.net/manual/zh/ini.list.php
2)FastCGI之php-fpm
★FastCGI:php以fpm机制独立地监听在一个套接字上;
★php-fpm
[[email protected] ~]# yum info php-fpm Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile Available Packages Name : php-fpm Arch : x86_64 Version : 5.4.16 Release : 36.el7_1 Size : 1.4 M Repo : CDROM Summary : PHP FastCGI Process Manager URL : http://www.php.net/ License : PHP and Zend and BSD Description : PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI : implementation with some additional features useful for sites of : any size, especially busier sites.★安装方式:
# yum install php-fpm
注意:php-fpm和php二者不能同时存在会起冲突的,只能选择其一。
★主程序
- /usr/sbin/php-fpm
- Unit File(开机自启的服务):/usr/lib/systemd/system/php-fpm.service
★配置文件:
- ini:配置php解释器工作环境;
/etc/php.ini, /etc/php.d/*.ini
- conf:配置fpm守护进程的工作模式;
/etc/php-fpm.conf, /etc/php-fpm.d/*.conf
★配置
[global] # 定义全局进程自己的工作特性 [pool-id] # 定义连接池 listen = 127.0.0.1:9000 # 监听的地址和端口,默认是本地的地址,所以httpd和fpm只能部署在同一台主机上,如果在不同的主机上,就要监听在与web主机能够通信的地址才可以。 listen.backlog = -1 # 超出请求时排队的队列长度 listen.allowed_clients = 127.0.0.1 # 访问控制列表(允许来自于哪些客户端主机地址的访问) user = apache group = apache pm = dynamic # 定义process管理机制:static, dynamic # static:服务启动时创建出所有子进程; # dynamic:根据用户请求量的变化来维护子进程数量; pm.max_children = 50 # 最大子进程数量即连接池上限 pm.start_servers = 5 # 服务器启动时要启动多少个进程 pm.min_spare_servers = 5 # 最少空闲子进程 pm.max_spare_servers = 35 # 最大空闲子进程 pm.max_requests = 500 # 每个子进程的最大请求数 pm.status_path = /fpm-status # 获取状态信息 ping.path = /ping ;ping.response = pong # 探测fpm服务是否工作正常 rlimit_files = 1024 # 用户所能打开的文件数总数 rlimit_core = 0 # 核心可以占据多少个空间,0表示无限制 php_value[session.save_handler] = files php_value[session.save_path] = /var/lib/php/session # 需要创建目录并把权限赋予apache
演示如下:
编辑配置文件,并根据配置文件要求创建/var/lib/php/session 目录,且属主和属组为apache,然后启动服务
[[email protected] ~]# vim /etc/php-fpm.d/ pm.status_path = /fpm-status rlimit_files = 1024 rlimit_core = 0 ping.path = /ping ping.response = pong [[email protected]~]# mkdir /var/lib/php/session [[email protected]~]# chown -R apache:apache /var/lib/php/session # 定义文件属主和属组 [[email protected]~]# ll -d /var/lib/php/session drwxr-xr-x. 2 apache apache 4096 10月 13 20:17 /var/lib/php/session
启动服务,并查看端口9000
[[email protected]~]# systemctl start php-fpm # 启动服务 [[email protected] ~]# ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 127.0.0.1:9000 *:* LISTEN 0 5 192.168.122.1:53 *:* LISTEN 0 128 *:22 *:* LISTEN 0 128 127.0.0.1:631 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 127.0.0.1:6010 *:* LISTEN 0 128 :::80 :::* LISTEN 0 128 :::22 :::* LISTEN 0 128 ::1:631 :::* LISTEN 0 100 ::1:25 :::* LISTEN 0 128 ::1:6010 :::*
接下来我们配置一个虚拟主机
[[email protected] ~]# vim /etc/httpd/conf.d/vhost.conf <VirtualHost *:80> ServerName www.taotao.com DocumentRoot "/vhost/www" <Directory "/vhost/www"> Options None AllowOverride None Require all granted </Directory> </VirtualHost> [[email protected] ~]# mkdir -pv /vhosts/www mkdir: 已创建目录 "/vhosts" mkdir: 已创建目录 "/vhosts/www" [[email protected] ~]# httpd -t Syntax OK [[email protected] ~]# vim /vhosts/www/phpinfo.php # 创建一个测试页 <?php phpinfo() ?>
如上,配置好之后,我们用浏览器访问(访问之前一定要关闭SElinux,并且关闭防火墙)如下:
可以看到,显示的是源代码,这是因为这是的httpd作为了一的静态服务器,而动态内容需要执行后在可以显示。
接下来我们就来配置虚拟主机支持使用fcgi
[[email protected] ~]# vim /etc/httpd/conf.d/vhost.conf "vhost.conf" 9L, 248C 3,9 全部 <VirtualHost *:80> ServerName www.taotao.com DocumentRoot "/vhosts/www" <Directory "/vhosts/www"> Options None AllowOverride None Require all granted </Directory> ProxyRequests off # 关闭正向代理 ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/vhosts/www/$1 # 表示把所有以.php结尾内容通通映射到后面,$1为后向引用 </VirtualHost> # 只映射单个文件如下: ProxyPass /phpinfo.php fcgi://127.0.0.1:9000/vhosts/www/phpinfo.php [[email protected] conf.d]# httpd -t Syntax OK [[email protected] conf.d]# systemctl restart httpd
再次刷新网页如下:
如果前端主机上有一个静态内容,依然是由前端主机响应的
[[email protected] conf.d]# echo "Home Page" > /vhosts/www/index.html [[email protected] conf.d]# cat /vhosts/www/index.html Home Page
如下:
如上就是二者间的结合
一般来说动态页面内容的站点主页内容为index.php结尾的,所以为了能够让apache能识别php格式的页面,并支持php格式的主页,编辑apache配置文件如下:
[[email protected] ~]# vim /etc/httpd/conf.d/vhost.conf DocumentRoot "/vhosts/www" <Directory "/vhosts/www"> Options None AllowOverride None Require all granted </Directory> ProxyRequests off ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/vhosts/www/$1 # 添加默认主页面 DirectoryIndex index.php index.html
获取pfm的状态信息页php-status和ping探测页设置如下
[[email protected] ~]# vim /etc/httpd/conf.d/vhost.conf <Directory "/vhosts/www"> Options None AllowOverride None Require all granted </Directory> ProxyRequests off ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/vhosts/www/$1 ProxyPassMatch ^/(php-status|ping)$ fcgi://127.0.0.1:9000/$1 # 添加单独映射到后端 DirectoryIndex index.php index.html