PHP

26-LAMP架构

2020-04-08  本文已影响0人  Liang_JC

本章内容

◆ LAMP介绍
◆ PHP配置
◆ 实现LAMP应用数据库管理系统phpMyadmin
◆ 实现LAMP应用博客系统wordpress
◆ 实现LAMP应用论坛系统Discuz!
◆ 实现LAMP应用PowerDNS
◆ Xcache加速
◆ PHP-FPM模式
◆ 源码编译LAMP

LAMP介绍

● LAM(M)P:
    L:linux
    A:apache (httpd)
    M:mysql, mariadb
    M:memcached
    P:php, perl, python
● WEB资源类型:
    静态资源:原始形式与响应内容一致,在客户端浏览器执行
    动态资源:原始形式通常为程序文件,需要在服务器端执行之后,将执行结果返回给客户端
● Web相关语言
    客户端技术: html,javascript,css,jpg
    服务器端技术:php, jsp,python,asp 

CGI

● CGI:Common Gateway Interface
    可以让一个客户端,从网页浏览器通过http服务器向执行在网络服务器上的程序传输数据;CGI描述了客户端和服务器程序之间传输的一种标准
● 请求流程:
    Client -- (http) --> httpd -- (cgi) --> application server (program file) -- (mysql) --> mysql
● php: 脚本编程语言、嵌入到html中的嵌入式web程序语言
    基于zend编译成opcode(二进制格式的字节码,重复运行,可省略编译环境)

PHP简介

● 官网:http://www.php.net/
● PHP是通用服务器端脚本编程语言,主要用于web开发实现动态web页面,也是最早实现将脚
    本嵌入HTML源码文档中的服务器端脚本语言之一。同时,php还提供了一个命令行接口,因此,其也可以在大多数系统上作为一个独立的shell来使用
● Rasmus Lerdorf于1994年开始开发PHP,最初是一组被Rasmus Lerdorf称作“Personal
    Home Page Tool” 的Perl脚本, 可以用于显示作者的简历并记录用户对其网站的访问。后来,
    Rasmus Lerdorf使用C语言将这些Perl脚本重写为CGI程序,还为其增加了运行Web forms的能
    力以及与数据库交互的特性,并将其重命名为“Personal Home Page/Forms Interpreter” 或
    “PHP/FI” 。此时,PHP/FI已经可以用于开发简单的动态web程序了,这即PHP1.0。 1995年6
    月,Rasmus Lerdorf把它的PHP发布于comp.infosystems.www.authoring.cgi Usenet讨论组,
    从此PHP开始走进人们的视野。 1997年,其2.0版本发布
● 1997年,两名以色列程序员Zeev Suraski和Andi Gutmans重写的PHP的分析器(parser)成为
    PHP发展到3.0的基础,而且从此将PHP重命名为PHP: Hypertext Preprocessor。此后,这两
    名程序员开始重写整个PHP核心,并于1999年发布了Zend Engine 1.0,这也意味着PHP 4.0的
    诞生。 2004年7月,Zend Engine 2.0发布,由此也将PHP带入了PHP 5时代。 PHP5包含了许
    多重要的新特性,如增强的面向对象编程的支持、支持PDO(PHP Data Objects)扩展机制以及
    一系列对PHP性能的改进  

PHP Zend Engine

● Zend Engine是开源的、 PHP脚本语言的解释器,它最早是由以色列理工学院
    (Technion)的学生Andi Gutmans和Zeev Suraski所开发,Zend也正是此二人
    名字的合称。后来两人联合创立了Zend Technologies公司
● Zend Engine 1.0于1999年随PHP 4发布,由C语言开发且经过高度优化,并能
    够做为PHP的后端模块使用。 Zend Engine为PHP提供了内存和资源管理的功
    能以及其它的一些标准服务,其高性能、可靠性和可扩展性在促进PHP成为一
    种流行的语言方面发挥了重要作用
● Zend Engine的出现将PHP代码的处理过程分成了两个阶段:首先是分析PHP
    代码并将其转换为称作Zend opcode的二进制格式opcode(类似Java的字节码),
    并将其存储于内存中;第二阶段是使用Zend Engine去执行这些转换后的Opcode  

PHP的Opcode

● Opcode是一种PHP脚本编译后的中间语言,类似于Java的ByteCode,或者.NET的MSL。 PHP执行PHP脚本代码一般会经过如下4个步骤(确切的来说,应该是PHP的语言引擎Zend)
    1、 Scanning 词法分析,将PHP代码转换为语言片段(Tokens)
    2、 Parsing 语义分析,将Tokens转换成简单而有意义的表达式
    3、 Compilation 将表达式编译成Opcode
    4、 Execution 顺次执行Opcode,每次一条,从而实现PHP脚本的功能
● 扫描-->分析-->编译-->执行

php配置

● php:脚本语言解释器
    配置文件:/etc/php.ini, /etc/php.d/*.ini
    配置文件在php解释器启动时被读取
    对配置文件的修改生效方法
        Modules:重启httpd服务
        FastCGI:重启php-fpm服务
    /etc/php.ini配置文件格式:
        [foo]:Section Header
        directive = value
        注释符:较新的版本中,已经完全使用;进行注释
        #:纯粹的注释信息
        ;:用于注释可启用的directive 

● php.ini的核心配置选项文档: http://php.net/manual/zh/ini.core.php
● php.ini配置选项列表:http://php.net/manual/zh/ini.list.php
● php常见设置:
    max_execution_time= 30 最长执行时间30s
    memory_limit=128M 生产不够,可调大
    display_errors=off 调试使用,不要打开,否则可能暴露重要信息
    display_startup_errors=off 建议关闭
    post_max_size=8M 最大上传数据大小,生产可能调大,比下面项大
    upload_max_filesize =2M 最大上传文件,生产可能要调大
    max_file_uploads = 20 同时上传最多文件数
    date.timezone =Asia/Shanghai 指定时区
    short_open_tag=on 开启短标签,如<? phpinfo();?>  

LAMP

● LAMP
    httpd:接收用户的web请求;静态资源则直接响应;动态资源为php脚本,对此类资源的请求将交由php来运行
    php:运行php程序
    MariaDB:数据管理系统
● httpd与php结合的方式
    modules (将php编译成为httpd的模块,默认方式)
        MPM:
            prefork: libphp5.so
            event, worker: libphp5-zts.so
    FastCGI  

实现LAMP方式

CentOS 7:
    Modules:httpd, php, php-mysql, mariadb-server
    FastCGI:httpd, php-fpm, php-mysql, mariadb-server
CentOS 6:
    Modules:httpd, php, php-mysql, mysql-server
    FastCGI:默认不支持 

基于php模块方式安装LAMP

● 安装LAMP
    CentOS 6:
        yum install httpd, php, mysql-server, php-mysql
        service httpd start
        service mysqld start
    CentOS 7:
        yum install httpd, php, php-mysql, mariadb-server
        systemctl start httpd.service
        systemctl start mariadb.service
    注意:要使用prefork模型  

php代码

● php语言格式
    <?php
        ...php code...
    ?>
● php测试代码
    <?php
        echo date("Y/m/d H:i:s");
        phpinfo();
    ?> 
    
● 格式1
    <?php
        echo "<h1>Hello world!</h1>"
    ?>
● 格式2
    <h1>
        <?php echo "Hello world!" ?>
    </h1>   

使用mysql扩展连接数据库

● php使用mysql扩展连接数据库的测试代码
    <?php
    $conn = mysql_connect('mysqlserver','username','password');
    if ($conn)
        echo "OK";
    else
        echo "Failure";
        #echo mysql_error();
    mysql_close();
    ?>  

使用mysqli扩展连接数据库

● php使用mysqli扩展连接数据库的测试代码
    <?php
    $mysqli=new mysqli("mysqlserver", "username", "password");
    if(mysqli_connect_errno()){
        echo "Failure";
        $mysqli=null;
        exit;
    }
    echo "OK";
    $mysqli->close();
    ?>  

使用PDO(PHP Data Object)扩展连接数据库

● php使用pdo扩展连接数据库的测试代码1
    <?php
    $dsn='mysql:host=mysqlhost;dbname=test';
    $username='root';
    $passwd='magedu';
    $dbh=new PDO($dsn,$username,$passwd);
    var_dump($dbh);
    ?> 
    
● php使用pdo扩展连接数据库的测试代码2
    <?php
    try {
    $user='root';
    $pass='magedu';
    $dbh = new PDO('mysql:host=mysqlhost;dbname=mysql', $user, $pass);
    foreach($dbh->query('SELECT user,host from user') as $row) {
    print_r($row);
    } $
    dbh = null;
    } catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
    }
    ?>  

常见LAMP应用

● PhpMyAdmin是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库
● WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可把 WordPress当作一个内容管理系统(CMS)来使用
● PHPWind:2003年发布了PHPWind的前身版本ofstar,并发展成为包含BBS、CMS、博客、 SNS等一系列程序的通用型建站软件, 于2008年加入阿里巴巴集团
● Crossday Discuz! Board(简称 Discuz!)是一套通用的社区论坛软件系统。自2001年6月面世以来,是全球成熟度最高、覆盖率最大的论坛软件系统之一。2010年8月23日,与腾讯达成收购协议
● ECShop是一款B2C独立网店系统,适合企业及个人快速构建个性化网上商店。系统是基于PHP语言及MYSQL数据库构架开发的跨平台开源程序。 2006年6月,ECShop推出第一个版本1.0  

布署phpMyadmin

yum -y install httpd mariadb-server php php-mysql
systemctl start httpd
systemctl start mariadb
mysql_secure_installation
下载:https://www.phpmyadmin.net/downloads/
tar xvf phpMyAdmin-4.0.10.20-all-languages.tar.xz cd /var/www/html
cd phpadmin/
cp config.sample.inc.php config.inc.php
yum -y install php-mbstring
systemctl reload httpd  

布署wordpress

● 下载地址:
    官网:https://cn.wordpress.org/
● 解压缩WordPress博客程序到网页站点目录下
    unzip wordpress-5.0.3-zh_CN.zip
● 新建wpdb库和wpuser用户
    mysql> create database wpdb;
    mysql> grant all privileges on wpdb.* to wpuser@'%' identified by "wppass";
● 打开http://webserver/wordpress进行页面安装
● 注意wordpress目录权限
    Setfacl –R –m u:apache:rwx wordpress  

小笔记:搭建wordpress

#A:server1: httpd + php B:serve2:mysql

#server-B(37.17)
yum install mariadb-server
systemctl start mariadb
mysql 
    create database wpdb;
    grant all on wpdb.* to wpuser@'192.168.37.%' identified by 'centos';
    flush privilieges;

#server-A(37.7)
yum install  httpd php php-mysql
vim /etc/php.ini
    date.timezone = Asia/Shanghai
systemctl start httpd
mysql -uwpuser -pcentos -h192.168.37.17     #测试连接
tar xf wordpress-5.0.4-zh_CN.tar.gz -C /var/www/html
chown -R apache:apache /var/www/html/wordpress 
cd /var/www/html/wordpress 
cp wp-config-sample.php wp-config.php
vim wp-config.php
    wpdb            #数据库名
    wpuser          #用户名
    centos          #密码
    192.168.37.17   #数据库服务器
    
#client
http://192.168.37.7/wordpress

小笔记:搭建Discuz

#server-B(37.17)
yum install mariadb-server
systemctl start mariadb
mysql 
    create database ultrax;
    grant all on ultrax.* to forum@'192.168.37.%' identified by 'centos';
    flush privilieges;

#server-A(37.7)
yum install  httpd php php-mysql
vim /etc/php.ini
    date.timezone = Asia/Shanghai
systemctl start httpd
unzip Discuz_X3.3_SC_UTF8.zip
mv upload /var/www/html/forum
setfacl -Rm u:apache:rwx /var/www/html/forum

#client
http://192.168.37.7/forum

PowerDNS

● PowerDNS 是一个跨平台的开源DNS服务组件,它是高性能的域名服务器,除了支持普通的BIND配置文件,PowerDNS还可从MySQL,Oracle,PostgreSQL等的数据库读取数据。 PowerDNS安装了Poweradmin(基于php实现),能实现Web管理DNS记录,非常方便
● PowerDNS官网:https://www.powerdns.com/
● PowerDNS文档:https://doc.powerdns.com/
● Poweradmin官网:http://www.poweradmin.org/  

实现WEB管理的PowerDNS

● 安装包:基于EPEL源
    yum install -y pdns pdns-backend-mysql
● 准备mariadb中的数据库,表和用户
    CREATE DATABASE powerdns;
    GRANT ALL ON powerdns.* TO 'powerdns'@'localhost' IDENTIFIED BY 'magedu';
    创建powerdns数据库中的表,参看下面文档实现
    https://doc.powerdns.com/md/authoritative/backend-generic-mysql/ 
● 配置PowerDNS使用mariadb作为后台数据存储
    vim /etc/pdns/pdns.conf,查找到包含launch= 的行,修改并添加下面的内容
    launch=gmysql
    gmysql-host=localhost
    gmysql-port=3306
    gmysql-dbname=powerdns
    gmysql-user=powerdns
    gmysql-password=magedu
● 启动服务
    systemctl start pdns
    systemctl enable pdns
● 安装httpd和php相关包
    yum -y install httpd php php-devel php-gd php-mcrypt php-imap php ldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-mbstring php mcrypt php-mhash gettext
    systemctl start httpd
    systemctl enable httpd
● 下载poweradmin程序,并解压缩到相应目录
    cd /var/www/html
    wget http://downloads.sourceforge.net/project/poweradmin/poweradmin-2.1.7.tgz
    tar xvf poweradmin-2.1.7.tgz
    mv poweradmin-2.1.7 poweradmin
    
● 访问下面地址,启动PowerAdmin的网页安装向导:
    http://powerdns服务器IP/poweradmin/install/
image.png
● 提供先前配置的数据库详情,同时为Poweradmin设置管理员密码 
image.png
● 为Poweradmin创建一个受限用户
● 说明:
    Username:PowerAdmin用户名
    Password:上述用户的密码
    Hostmaster:当创建SOA记录指定默认
    主机管理员
    Primary nameserver:主域名服务器
    Secondary namesever:辅域名服务器
image.png
● 按照下面页面说明,在数据库中创建用户并授权MariaDB [(none)]>GRANT SELECT, INSERT, UPDATE, DELETE ON powerdns.* TO poweradmin'@'localhost‘IDENTIFIED BY 'magedu';
image.png
● 按下面页面说明,创建config.in.php文件内容
    vim /var/www/html/poweradmin/inc/config.inc.php
image.png
● 安装完毕后,删除install目录
    rm -rf /var/www/html/poweradmin/install/
image.png
● 登录http://powerdns服务器IP/poweradmin/
    username:admin
    password:magedu 
image.png

小笔记:搭建powerdns

#服务端
yum install -y pdns pdns-backend-mysql
mysql 
    CREATE DATABASE powerdns;
    GRANT ALL ON powerdns.* TO 'powerdns'@'192.168.37.%' IDENTIFIED BY 'magedu';
    
    use powerdns;

#创建powerdns相关表
CREATE TABLE domains (
  id                    INT AUTO_INCREMENT,
  name                  VARCHAR(255) NOT NULL,
  master                VARCHAR(128) DEFAULT NULL,
  last_check            INT DEFAULT NULL,
  type                  VARCHAR(6) NOT NULL,
  notified_serial       INT DEFAULT NULL,
  account               VARCHAR(40) DEFAULT NULL,
  PRIMARY KEY (id)
) Engine=InnoDB;

CREATE UNIQUE INDEX name_index ON domains(name);
CREATE TABLE records (
  id                    BIGINT AUTO_INCREMENT,
  domain_id             INT DEFAULT NULL,
  name                  VARCHAR(255) DEFAULT NULL,
  type                  VARCHAR(10) DEFAULT NULL,
  content               VARCHAR(64000) DEFAULT NULL,
  ttl                   INT DEFAULT NULL,
  prio                  INT DEFAULT NULL,
  change_date           INT DEFAULT NULL,
  disabled              TINYINT(1) DEFAULT 0,
  ordername             VARCHAR(255) BINARY DEFAULT NULL,
  auth                  TINYINT(1) DEFAULT 1,
  PRIMARY KEY (id)
) Engine=InnoDB;

CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);
CREATE INDEX recordorder ON records (domain_id, ordername);
CREATE TABLE supermasters (
  ip                    VARCHAR(64) NOT NULL,
  nameserver            VARCHAR(255) NOT NULL,
  account               VARCHAR(40) NOT NULL,
  PRIMARY KEY (ip, nameserver)
) Engine=InnoDB;
CREATE TABLE comments (
  id                    INT AUTO_INCREMENT,
  domain_id             INT NOT NULL,
  name                  VARCHAR(255) NOT NULL,
  type                  VARCHAR(10) NOT NULL,
  modified_at           INT NOT NULL,
  account               VARCHAR(40) NOT NULL,
  comment               VARCHAR(64000) NOT NULL,
  PRIMARY KEY (id)
) Engine=InnoDB;

CREATE INDEX comments_domain_id_idx ON comments (domain_id);
CREATE INDEX comments_name_type_idx ON comments (name, type);
CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);
CREATE TABLE domainmetadata (
  id                    INT AUTO_INCREMENT,
  domain_id             INT NOT NULL,
  kind                  VARCHAR(32),
  content               TEXT,
  PRIMARY KEY (id)
) Engine=InnoDB;

CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);
CREATE TABLE cryptokeys (
  id                    INT AUTO_INCREMENT,
  domain_id             INT NOT NULL,
  flags                 INT NOT NULL,
  active                BOOL,
  content               TEXT,
  PRIMARY KEY(id)
) Engine=InnoDB;

CREATE INDEX domainidindex ON cryptokeys(domain_id);
CREATE TABLE tsigkeys (
  id                    INT AUTO_INCREMENT,
  name                  VARCHAR(255),
  algorithm             VARCHAR(50),
  secret                VARCHAR(255),
  PRIMARY KEY (id)
) Engine=InnoDB;

CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);

vim /etc/pdns/pdns.conf,查找到包含launch= 的行,修改并添加下面的内容
    launch=gmysql
    gmysql-host=192.168.37.17
    gmysql-port=3306
    gmysql-dbname=powerdns
    gmysql-user=powerdns
    gmysql-password=magedu
    
systemctl start pdns
yum -y install httpd php php-devel php-gd php-mcrypt php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-mbstring php mcrypt php-mhash gettext
systemctl restart httpd
cd /var/www/html
wget http://downloads.sourceforge.net/project/poweradmin/poweradmin-2.1.7.tgz
tar xf poweradmin-2.1.7.tgz
mv poweradmin-2.1.7 poweradmin

#客户端
http://192.168.37.7/poweradmin/install
image.png image.png image.png
第五步:
服务端执行:
GRANT SELECT, INSERT, UPDATE, DELETE ON powerdns.* TO 'poweradmin'@'192.168.37.%' IDENTIFIED BY 'magedu';
image.png
第六步:
服务端执行:
vim /var/www/html/poweradmin/inc/config.inc.php
<?php

$db_host        = '192.168.37.17';
$db_user        = 'poweradmin';
$db_pass        = 'magedu';
$db_name        = 'powerdns';
$db_type        = 'mysql';
$db_layer       = 'PDO';

$session_key        = 'id4mb]ZF!Lzkh+tl6}!_$o9MXMu!BQV0l-a4DnXKt*W(}!';

$iface_lang     = 'en_EN';

$dns_hostmaster     = 'dnsserver';
$dns_ns1        = '192.168.37.7';
$dns_ns2        = '';
image.png
第七步:
服务端执行:
rm -rf /var/www/html/poweradmin/install/
image.png
最后:
#客户端登录
http://192.168.37.7/poweradmin

php的加速器

● php的加速器:基于PHP的特殊扩展机制如opcode缓存扩展也可以将opcode
    缓存于php的共享内存中,从而可以让同一段代码的后续重复执行时跳过编译
    阶段以提高性能。这些加速器并非真正提高了opcode的运行速度,而仅是通过
    分析opcode后并将它们重新排列以达到快速执行的目的
● 常见的php加速器有:
    1、 APC (Alternative PHP Cache)
        遵循PHP License的开源框架,PHP opcode缓存加速器,目前的版本不适用于PHP 5.4
        项目地址http://pecl.php.net/package/APC
    2、 eAccelerator
        源于Turck MMCache,早期的版本包含了一个PHP encoder和PHP loader,目前encoder已经不在支持。
        项目地址 http://eaccelerator.net/  
    3、 XCache
        快速而且稳定的PHP opcode缓存,经过严格测试且被大量用于生产环境。项
        目地址:http://xcache.lighttpd.net/,收录EPEL源
    4、 Zend Optimizer和Zend Guard Loader
        Zend Optimizer并非一个opcode加速器,它是由Zend Technologies为
        PHP5.2及以前的版本提供的一个免费、闭源的PHP扩展,其能够运行由Zend
        Guard生成的加密的PHP代码或模糊代码。 而Zend Guard Loader则是专为
        PHP5.3提供的类似于Zend Optimizer功能的扩展。项目地址
        http://www.zend.com/en/products/guard/runtime-decoders
    5、 NuSphere PhpExpress
        NuSphere的一款开源PHP加速器,它支持装载通过NuSphere PHP Encoder
        编码的PHP程序文件,并能够实现对常规PHP文件的执行加速。项目地址,
        http://www.nusphere.com/products/phpexpress.htm  

CentOS7编译Php-xcache加速访问

● 官网:http://xcache.lighttpd.net/wiki/ReleaseArchive
● 安装方法
    rpm包:来自epel源
    编译安装
● 编译安装
    yum -y install php-devel
    下载并解压缩xcache-3.2.0.tar.bz2
    phpize 生成编译环境
    cd xcache-3.2.0
    ./configure --enable-xcache
    make && make install
    cp xcache.ini /etc/php.d/
    systemctl restart httpd.service
    
#小笔记:编译
wget http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz
tar xf xcache-3.2.0.tar.gz
cd xcache-3.2.0
phpize --clean && phpize
./configure --enable-xcache
make && make install
cp xcache.ini /etc/php.d/
systemctl restart httpd

php

● httpd+php结合的方式:
    module: php
    fastcgi : php-fpm
● php-fpm:
● CentOS 6:
    PHP-5.3.2之前:默认不支持fpm机制;需要自行打补丁并编译安装
    httpd-2.2:默认不支持fcgi协议,需要自行编译此模块
    解决方案:编译安装httpd-2.4, php-5.3.3+
● CentOS 7:
    httpd-2.4:rpm包默认编译支持fcgi模块
    php-fpm包:专用于将php运行于fpm模式  

配置fastcgi

● fcgi服务配置文件:/etc/php-fpm.conf, /etc/php-fpm.d/*.conf
● 官方文档:http://php.net/manual/zh/install.fpm.configuration.php
● 连接池: pm = static|dynamic
    static:固定数量的子进程;pm.max_children
    dynamic:子进程数量以动态模式管理,默认值
    pm.max_children = 50
    pm.start_servers =5
    pm.min_spare_servers =5
    pm.max_spare_servers =35
    pm.max_requests = 500 每个进程可以处理的请求数
● 确保运行php-fpm进程的用户对session目录有读写权限
    mkdir /var/lib/php/session
    chown apache.apache /var/lib/php/session
    
(1) 配置httpd,添加/etc/httpd/conf.d/fcgi.conf配置文件,内容类似
    DirectoryIndex index.php
    ProxyRequests Off
    ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1
    UDS(unix domain socket)方式
    ProxyPassMatch ^/(.*\.php)$
    unix:/var/run/php.sock|fcgi://localhost/app/httpd24/htdocs/$1
    参看:http://httpd.apache.org/docs/2.4/mod/mod_proxy_fcgi.html
    注意:在HTTPD服务器上必须启用proxy_fcgi_module模块,充当PHP客户端
    httpd –M |grep fcgi
    cat /etc/httpd/conf.modules.d/00-proxy.conf
    
(2) 虚拟主机配置
    vim /etc/httpd/conf.d/vhosts.conf
    DirectoryIndex index.php
    <VirtualHost *:80>
        ServerName www.b.net
        DocumentRoot /apps/vhosts/b.net
        ProxyRequests Off
        ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/apps/vhosts/b.net/$1
        <Directory "/apps/vhosts/b.net">
            Options None
            AllowOverride None
            Require all granted
        </Directory>
    </VirtualHost>  

CentOS 7安装LAMP(PHP-FPM模式)

● 安装PHP-FPM
    首先要卸载PHP
    yum install php-fpm
● 查看php-fpm所对应的配置文件
    rpm -ql php-fpm
    /usr/lib/systemd/system/php-fpm.service
    /etc/logrotate.d/php-fpm
    /etc/php-fpm.conf
    /etc/php-fpm.d
    /etc/php-fpm.d/www.conf
    /etc/sysconfig/php-fpm
    /run/php-fpm
● PHP-FPM常见配置
    daemonize = no //是否将程序运行在后台
    listen = 127.0.0.1:9000 //FPM 监听地址
    listen = /var/run/php.sock //UDF模式使用
    listen.mode= 0666 //UDF模式使用
    listen.backlog = -1 //等待队列的长度 -1表示无限制
    listen.allowed_clients = 127.0.0.1 //仅允许哪些主机访问
    pm = dynamic //PM是动态运行还是静态运行
    //static 固定数量的子进程,pm.max_childen
    //dynamic子进程数据以动态模式管理
    pm.start_servers
    pm.min_spare_servers
    pm.max_spare_servers
    pm.max_requests = 500
    php_value[session.save_handler] = files
    php_value[session.save_path] = /var/lib/php/session
    //设置session存放位置

#启动PHP-FPM
vim /etc/php-fpm.d/www.conf         #优化一下
    user = apache
    group = apache
    pm = dynamic
    pm.max_children = 500
    pm.start_servers = 30
    pm.min_spare_servers = 50
    pm.max_spare_servers = 60
    pm.max_requests = 500
    pm.status_path = /status
    ping.response = pong            #检测服务器是否为好
systemctl start php-fpm

● 安装httpd包
    yum install httpd
● 查看Httpd mod_fcgi模块是否加载
    httpd -M | grep fcgi
    proxy_fcgi_module (shared)
● 添加FCGI的配置文件
    DirectoryIndex index.php
    ProxyRequests off //是否开启正向代理
    ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1
    //开启FCGI反向代理,//前面的/相对于后面的/var/www/html而言,后面的$1是指前面的/(.*\.php)
● 重启Httpd:systemctl restart httpd

小笔记:php-fpm安装配置

yum remove php
yum install php-fpm
mkdir /var/lib/php/session
chown apache.apache /var/lib/php/session
vim /etc/httpd/conf.d/fcgi.conf
    DirectoryIndex index.php
    ProxyRequests Off
    ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1
systemctl httpd restart     
systemctl php-fpm start

小笔记:编译新版本httpd支持套接字

#httpd支持套接字需要2.4.9以上,centos7版本为2.4.6(尴尬)
#卸载旧版本httpd
yum remove httpd

#安装依赖包
yum install -y gcc pcre-devel openssl-devel expat-devel

#编译安装
ls *.bz2 | xargs -n1 tar xf
cp -r apr-1.7.0 httpd-2.4.39/srclib/apr
cp -r apr-util-1.6.1 httpd-2.4.39/srclib/apr-util
cd httpd-2.4.39

#开始编译安装
./configure \
  --prefix=/app/httpd24 \
  --enable-so \
  --enable-ssl \
  --enable-cgi \
  --enable-rewrite \
  --with-zlib \
  --with-pcre \
  --with-included-apr \
  --enable-modules=most \
  --enable-mpms-shared=all \
  --with-mpm=prefork
make && make install

echo 'PATH=/app/httpd24/bin:$PATH' > /etc/profile.d/httpd24.sh
. /etc/profile.d/httpd24.sh

#配置apache文件
useradd -s /sbin/nologin -r apache 
vim /app/httpd24/conf/httpd.conf
    User apache
    Group apache
    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
    DirectoryIndex index.php index.html
    #最后追加以下支持php文件
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps
    ProxyRequests Off
    ProxyPassMatch ^/(.*\.php(/.*)?)$ "unix:/var/run/php5-fpm.sock|fcgi://localhost/app/httpd24/htdocs"
apachectl start     #启动服务

#配置php-fpm文件
vim /etc/php-fpm.d/www.conf
    listen=/var/run/php5-fpm.sock
    listen.owner=apache
    listen.group=apache
    listen.mode=0666

#编译完毕后没有httpd.service启动文件,添加一份
vim /usr/lib/systemd/system/httpd.service
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
Environment=APACHE_STARTED_BY_SYSTEMD=true
ExecStart=/app/httpd24/bin/apachectl start
ExecStop=/app/httpd24/bin/apachectl stop
ExecReload=/app/httpd24/bin/apachectl graceful
PrivateTmp=true
Restart=on-abort

[Install]
WantedBy=multi-user.target

#启动测试
systemctl restart httpd
systemctl restart php-fpm   

小笔记:实现服务跨主机

#A:httpd    B:mysql     C:php-fpm
#A与B已经搭好

#C配置
yum install php-fpm php-mysql
vim /etc/php-fpm.d/www.conf
    listen = 9000
    ;listen.allowed_clients=127.0.0.1   ;注释掉
systemctl restart php-fpm

#A修改
vim /app/httpd24/conf/httpd.conf
    ProxyPassMatch ^/(.*\.php)$ "fcgi://192.168.37.27:9000/data/www"

CentOS7编译安装LAMP

● 在centos7上编译安装LAMP:
● mairadb:通用二进制格式,mariadb-5.5.56
● httpd:编译安装,httpd-2.4.25
● php5:编译安装,php-5.6.30
● phpMyAdmin:安装phpMyAdmin-4.4.15.10-all-languages
● Xcache:编译安装xcache-3.2.0
● php5.4依赖于mariadb-devel包
● 顺序:mariadb-->httpd-->php

● 二进制安装mariadb
ftp://172.16.0.1/pub/Source/7.x86_64/mariadb/mariadb-5.5-46-linux-x86_64.tar.gz
tar xvf mariadb-5.5-46-linux-x86_64.tar.gz -C /usr/local
cd /usr/local
ls -sv mariadb-5.5.46-linux-x86_64 mysql
cd mysql
chown -R root.mysql ./*
mkdir /mydata/data -p
chown -R mysql.mysql /mydata/data
mkdir /etc/mysql
cp support-files/my-large.cnf /etc/mysql/my.cnf
vim /etc/mysql/my.cnf
    [mysqld]加三行
    datadir =/mydata/data
    innodb_file_per_table = ON
    skip_name_resolve = ON
vim /etc/profile.d/mysql.sh
    export PATH=/usr/local/mysql/bin/:$PATH
cd /usr/local/mysql;scripts/mysql_install_db --user=mysql --datadir=/mydata/data
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
service mysqld start

● 编译安装httpd-2.4
yum install gcc pcre-devel openssl-devel expat-devel
./configure --prefix=/app/httpd24 \
    --enable-so \
    --enable-ssl \
    --enable-cgi \
    --enable-rewrite \
    --with-zlib \
    --with-pcre \
    --enable-modules=most \
    --enable-mpms-shared=all \
    --with-mpm=prefork \
    --with-included-apr
make -j 4 && make install

● 编译安装php-7.3.0
● 相关包:
    libxml2-devel bzip2-devel libmcrypt-devel (epel)
● ./configure --prefix=/app/php --enable-mysqlnd --with-mysqli=mysqlnd --with-openssl --with-pdo-mysql=mysqlnd --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --with-apxs2=/app/httpd24/bin/apxs --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --enable-maintainer-zts --disable-fileinfo
● 注意:php-7.0以上版本使用--enable-mysqlnd --with-mysqli=mysqlnd ,原--with-mysql不再支持

● 为php提供配置文件
    cp php.ini-production /etc/php.ini
● 编辑apache配置文件httpd.conf,以使apache支持php
    vim /etc/httpd24/conf/httpd.conf
    1加二行
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps
    
    2 定位至DirectoryIndex index.html
    修改为DirectoryIndex index.php index.html
    apachectl restart
    
yum install libxml2-devel bzip2-devel libmcrypt-devel (epel)
tar xvf php-7.3.5.tar.bz2
cd php-7.3.5/
./configure --prefix=/app/php \
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-openssl \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir=/usr \
--with-config-file-path=/etc \
--with-config-file-scan-dir=/etc/php.d \
--enable-mbstring \
--enable-xml \
--enable-sockets \
--enable-fpm \
--enable-maintainer-zts \
--disable-fileinfo
make && make install

cp php.ini-production /etc/php.ini
cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
chkconfig --add php-fpm
chkconfig php-fpm on
cd /app/php/etc
cp php-fpm.conf.default php-fpm.conf
cp php-fpm.d/www.conf.default php-fpm.d/www.conf
service php-fpm start

● 配置httpd支持php
    vim /app/httpd24/conf/httpd.conf
    取消下面两行的注释
        LoadModule proxy_module modules/mod_proxy.so
        LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
    修改下面行
        <IfModule dir_module>
            DirectoryIndex index.php index.html
        </IfModule>
    加下面四行
        AddType application/x-httpd-php .php
        AddType application/x-httpd-php-source .phps
        ProxyRequests Off
        ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/app/httpd24/htdocs/$1

CentOS6编译安装PHP-FPM模式的LAMP

● 在centos6上编译安装LAMP:
    mairadb:通用二进制格式,mariadb-5.5.56
    httpd:编译安装,httpd-2.4.27
    php5:编译安装,php-5.6.30
    Wordpress: 安装wordpress-4.8-zh_CN.tar.gz
    Xcache:编译安装xcache-3.2.0
● php5.4依赖于mariadb-devel包
● 实现顺序:mariadb-->httpd-->php  

小笔记:自编译LAMP

1、A:httpd+php   B:mariadb
    在centos7上编译安装LAMP:
    mairadb:通用二进制格式,mariadb-10.2.25.tar.bz2
    httpd:编译安装,httpd-2.4.39.tar.bz2
    apr-1.7.0.tar.bz2
    apr-util-1.6.1.tar.bz2
    php:编译安装,php-7.3.7.tar.xz
    Discuz_X3.3_SC_UTF8.zip 
    wordpress-5.2.2.tar.gz

2、B上安装mariadb
useradd -r -s /sbin/nologin -m -d /data/mysql mysql
chown mysql:mysql /data/mysql
tar xf mariadb-10.2.25.tar.bz2 -C /usr/local
cd /usr/local
ln -s mariadb-10.2.25 mysql
chown -R mysql:mysql mysql/
echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
. /etc/profile.d/mysql.sh
scripts/mysql_install_db --datadir=/data/mysql --user=mysql
cp support-files/my-huge.cnf /etc/my.cnf -b
vim /etc/my.cnf
    [mysqld]
    datadir=/data/mysql
cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
servcie mysqld start
mysql
    mysql>create database wordpress;
    mysql>create database discuz;
    mysql>grant all on wordpress.* to wordpress@'192.168.37.%' identified by 'magedu';
    mysql>grant all on discuz.* to discuz@'192.168.37.%' identified by 'magedu';
    
3、A上安装httpd
#http
ls *.bz2 | xargs -n1 tar xf
yum install gcc prce-devel openssl-devel expat-devel -y
tar -xf httpd-2.4.39.tar.bz2
useradd -r -s /sbin/nologin apache
./configure \
  --prefix=/app/httpd24 \
  --enable-so \
  --enable-ssl \
  --enable-cgi \
  --enable-rewrite \
  --with-zlib \
  --with-pcre \
  --with-included-apr \
  --enable-modules=most \
  --enable-mpms-shared=all \
  --with-mpm=prefork
make -j 4 && make install

echo 'PATH=/app/httpd24/bin:$PATH' > /etc/profile.d/httpd24.sh
. /etc/profile.d/httpd24.sh
vim /app/httpd24/conf/httpd.conf
    User apache
    Group apache
    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.soproxy_fcgi_module
    DirectoryIndex index.php index.html
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps
    ProxyRequests Off
    <virtualhost *:80>
        <directory /data/wordpress>
            require all granted
        </directory>
        servername blog.magedu.com
        documentroot /data/wordpress
        ProxyPassMatch ^/(.*\.php)$ "fcgi://127.0.0.1:9000/data/wordpress/$1"
    </virtualhost>
    <virtualhost *:80>
        <directory /data/discuz>
            require all granted
        </directory>
        servername forum.magedu.com
        documentrott /data/discuz
        ProxyPassMatch ^/(.*\.php)$ "fcgi://127.0.0.1:9000/data/discuz/$1"
    </virtualhost>
mkdir /data/{wordpress,discuz}
unzip Discuz_X3.3_SC_UTF8.zip 
mv Discuz_X3.3_SC_UTF8/* /data/discuz/
tar xf wordpress-5.2.2.tar.gz 
mv upload/* /data/discuz/wordpress
setfacl -Rm u:apache:rwx /data/{wordpress,discuz}

4、A上安装php-fpm
yum install libxml2-devel bzip2-devel libmcrypt-devel
tar xvf php-7.3.7.tar.xz 
cd php-7.3.7/
./configure --prefix=/app/php \
  --enable-mysqlnd \
  --with-mysqli=mysqlnd \
  --with-pdo-mysql=mysqlnd \
  --with-openssl \
  --with-freetype-dir \
  --with-jpeg-dir \
  --with-png-dir \
  --with-zlib \
  --with-libxml-dir=/usr \
  --with-config-file-path=/etc \
  --with-config-file-scan-dir=/etc/php.d \
  --enable-mbstring \
  --enable-xml \
  --enable-sockets \
  --enable-fpm \
  --enable-maintainer-zts \
  --disable-fileinfo
make && make install

cp php.ini-production /etc/php.ini
cp  sapi/fpm/init.d.php-fpm  /etc/init.d/php-fpm 
chmod +x /etc/init.d/php-fpm
cd /app/php/etc
cp php-fpm.conf.default php-fpm.conf
cd php-fpm.d/
cp www.conf.default www.conf
vim www.conf
    user = apache
    group = apache

apachectl start
service php-fpm start
上一篇 下一篇

猜你喜欢

热点阅读