首页 > 代码库 > lamp基础应用(二)

lamp基础应用(二)

概述:



=========================================================================================

回顾:

技术分享

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

[root@centos7 ~]# 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,然后启动服务

[root@localhost ~]# vim /etc/php-fpm.d/
 pm.status_path = /fpm-status
 rlimit_files = 1024
 rlimit_core = 0 
 ping.path = /ping 
 ping.response = pong
 
[root@localhost~]# mkdir /var/lib/php/session
[root@localhost~]# chown -R apache:apache  /var/lib/php/session # 定义文件属主和属组
[root@localhost~]# ll -d  /var/lib/php/session
drwxr-xr-x. 2 apache apache 4096 10月 13 20:17 /var/lib/php/session

 启动服务,并查看端口9000

[root@localhost~]# systemctl start php-fpm # 启动服务
[root@localhost ~]# 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                                                               :::*

  接下来我们配置一个虚拟主机

 [root@localhost ~]# 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>

[root@localhost ~]# mkdir -pv /vhosts/www
mkdir: 已创建目录 "/vhosts"
mkdir: 已创建目录 "/vhosts/www"

[root@localhost ~]#  httpd -t
Syntax OK

[root@localhost ~]# vim /vhosts/www/phpinfo.php # 创建一个测试页
 <?php
       phpinfo()
 ?>

   如上,配置好之后,我们用浏览器访问(访问之前一定要关闭SElinux,并且关闭防火墙)如下:

技术分享


  可以看到,显示的是源代码,这是因为这是的httpd作为了一的静态服务器,而动态内容需要执行后在可以显示。

   接下来我们就来配置虚拟主机支持使用fcgi

[root@localhost ~]# 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 

[root@localhost conf.d]# httpd -t
Syntax OK
[root@localhost conf.d]# systemctl restart httpd

 再次刷新网页如下:


技术分享


 如果前端主机上有一个静态内容,依然是由前端主机响应的

[root@localhost conf.d]# echo "Home Page" > /vhosts/www/index.html
[root@localhost conf.d]# cat /vhosts/www/index.html
Home Page

如下:

技术分享

  如上就是二者间的结合


   一般来说动态页面内容的站点主页内容为index.php结尾的,所以为了能够让apache能识别php格式的页面,并支持php格式的主页,编辑apache配置文件如下:

    [root@localhost ~]# 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探测页设置如下

     [root@localhost ~]# 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



























































lamp基础应用(二)