Lmap

#实现LAMP架构php

1. LAMP介绍

在这里插入图片描述

  • 什么是LAM(M)P
    一套开源组合,用来构建应用程序服务器css

    1. L:linux
    2. A:apache (httpd)
      承载客户端链接,处理静态资源,经过客户端适配器转发动态资源至后端服务器
    3. M: mysql, mariadb
      数据库选择,与编程语言没有关系,与程序员解决方案有关系
    4. (M):memcached
    5. P:php, perl, python
      程序运行所须要的环境
  • 数据分类html

    1. 非机构化数据
      数据结构不规则或不完整,没有预约义的数据模型,不方便用数据库二维逻辑表来表现的数据
    2. 结构化数据
      可使用关系型数据库表示和存储,表现为二维形式的数据。通常特色是:数据以行为单位,一行数据表示一个实体的信息,每一行数据的属性是相同的
    3. 半结构化数据
      半结构化数据是结构化数据的一种形式,它并不符合关系型数据库或其余数据表的形式关联起来的数据模型结构,但包含相关标记,用来分隔语义元素以及对记录和字段进行分层
  • WEB资源类型前端

    1. 静态资源
      原始形式与响应内容一致,在客户端浏览器执行
    2. 动态资源
      原始形式一般为程序文件,须要在服务器端执行以后,将执行结果返回给客户端,客户端与服务器端看到的源码不一样
  • httpd怎么处理动态资源python

    1. httpd只是一个纯粹的静态http协议,所能完成的工做为分析用户请求报文,理解用户请求资源,根据本地的路径映射基于本地磁盘加载内容,将内容自己封装为一个响应报文,并发还给客户端
    2. 咱们不少时候指望web程序经过MIME识别出用户请求类型后,将执行结果返回给用户,而不是请求的内容,这就须要经过适配机制(例如CGI),将用户的动态资源请求,转发到后端服务器(例如php),将客户端请求执行后以数据流的形式,经过web服务器响应给用户
  • CGI:Common Gateway Interface(通用网关接口)
    可让一个客户端,从网页浏览器经过http服务器向执行在网络服务器上的程序传输数据;CGI描述了客户端和服务器程序之间传输的一种标准mysql

    1. 请求流程:
      Client – (httpd) --> httpd – (cgi) --> application server (program file) – (mysql) --> mysql
      1. 客户端发送一个请求访问动态页面,经过http协议访问网站
      2. httpd服务器不能处理动态资源,经过cgi协议,发送给cgi应用程序
      3. cgi应用程序执行后,经过mysql调用数据,再经过httpd将结果返回给客户端
    2. FastCGI
      早期CGI与web服务是在同一台主机上的,web服务器承载大量的用户请求服务于静态资源,同时还须要调用另外一个组件来执行动态资源,生成结果,给单台服务器带来巨大压力
      FastCGI,经过套接字来完成先后端的分离,前端服务器经过反向代理的方式与后端服务器通讯,当动态文件数据量较大时,一般不会放在本地的文件中,为了加速较大量数据的解锁,须要设置专业的数据存储系统,
      1. 不须要文件自身作处理,只须要经过API调对方的服务接口
      2. 剥离数据与文件的关系,单独存储
  • php
    PHP是通用服务器端脚本编程语言,其主要用于web开发以实现动态web页面,它也是最先实现将脚本嵌入HTML源码文档中的服务器端脚本语言之一。同时,php还提供了一个命令行接口,所以,其也能够在大多数系统上做为一个独立的shell来使用,意味着php能够在其交互式窗口直接运行linux

    1. 官方网站
      官网:http://www.php.net/
    2. Zend Engine
      开源的、PHP脚本语言的解释器,将PHP代码的处理过程分红了两个阶段
      1. 分析PHP代码并将其转换为称做Zend opcode的二进制格式opcode(相似Java的字节码),并将其存储于内存中
      2. 使用Zend Engine去执行这些转换后的Opcode
    3. php的加速器
      基于PHP的特殊扩展机制如opcode缓存扩展也能够将opcode缓存于php的共享内存中,从而可让同一段代码的后续重复执行时跳过编译阶段以提升性能。这些加速器并不是真正提升了opcode的运行速度,而仅是经过分析opcode后并将它们从新排列以达到快速执行的目的
      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缓存,通过严格测试且被大量用于生产环境,收录EPEL源
        项目地址:http://xcache.lighttpd.net/
      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

2. 在httpd中使用php的方法

  • httpd+php结合的方式:程序员

    1. Modules:将php编译成依附于httpd服务的子模块,处理动态资源时,生成子进程处理,配置文件生效须要重启httpd服务
      1. 缺点
        每启动一个httpd进程就会装载一次php模块,不管是否使用
      2. 启动
        配置文件生效须要重启httpd服务
    2. FastCGI:PHP以独立的服务器使用(fastcgi server)运行,用fpm实现,php自己只是解释器,配合fpm,让php以守护进程的方式运行,监听在某个套接字上,接收前端的httpd的请求
      1. 运行过程
        请求资源先发送给httpd,经过httpd内部的fastcgi客户端模块,经过此模块可以做为客户端去请求fastcgi的服务端(fpm运行的php server),一般为tcp协议的9000端口
      2. 启动
        配置文件生效须要重启php-fpm服务
        systemctl start php-fpm
        php配置
      3. 版本要求
        1. CentOS 6:须要编译安装httpd-2.4, php-5.3.3+
          PHP-5.3.2以前:默认不支持fpm机制;须要自行打补丁并编译安装
          httpd-2.2:默认不支持fcgi协议,须要自行编译此模块
        2. CentOS 7:
          httpd-2.4:rpm包默认编译支持fcgi模块
          php-fpm包:专用于将php运行于fpm模式
      4. 模块要求
        在HTTPD服务器上必须启用proxy_fcgi_module模块,充当PHP客户端,查看方式:
        1. httpd –M |grep fcgi
        2. cat /etc/httpd/conf.modules.d/00-proxy.conf
  • 在LAMP中设计的PHP程序web

    1. php-mysql
      让mysql支持php解释器
    2. php
      php解释器主程序包,包含向Apache HTTP服务器添加php解释器支持的模块
    3. php-fpm
      (FastCGI Process Manager)是PHP FastCGI的另外一种备选方案,具备一些额外的特性,对任何规模的站点都有用,特别是比较繁忙的站点
  • php通用配置文件
    配置文件在php解释器启动时被读取正则表达式

    1. 主配置文件
      /etc/php.ini
    2. 子配置文件
      /etc/php.d/*.ini
    3. 配置文件来源:安装php或php-fpm都会经过依赖关系安装php-common
             
             
             
             
      • 1
      • 2
      [root@hai7-6 ~]$rpm -qf /etc/php.ini php-common-5.4.16-45.el7.x86_64
    4. /etc/php.ini配置文件格式
      1. 格式
                 
                 
                 
                 
        • 1
        • 2
        [foo]:Section Header directive = value
      2. 描述
        [foo]:表示段落名称
        ;:没空格的表示能够启用的选项
        ;:加空格的表示纯粹的说明信息
    5. /etc/php.ini配置文件经常使用项
      1. php.ini的核心配置选项文档:
        http://php.net/manual/zh/ini.core.php
      2. php.ini配置选项列表:
        http://php.net/manual/zh/ini.list.php
             
             
             
             
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      max_execution_time= 30 <==最长执行时间30s,高并发状况下,能够考虑调小 max_input_time = 60 <==最大输入时间 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();?> ,原格式为<?php phpinfo(); ?>
  • 如下实验会用到的测试代码

    1. php测试代码
             
             
             
             
      • 1
      • 2
      • 3
      • 4
      <?php echo date("Y/m/d H:i:s"); phpinfo(); ?>
    2. Php使用mysql扩展链接数据库
             
             
             
             
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      <?php $conn = mysql_connect(‘mysqlserver','username','password'); if ($conn) echo "OK"; else echo "Failure"; ?>
    3. Php使用mysqli扩展链接数据库测试代码
             
             
             
             
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      <?php $mysqli=new mysqli("mysqlserver",“username",“password"); if(mysqli_connect_errno()){ echo "Failure"; $mysqli=null; exit; } echo “OK"; $mysqli->close(); ?>
    4. 使用pdo扩展链接数据库的测试代码1
             
             
             
             
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      <?php $dsn='mysql:host=localhost;dbname=mysql'; $username='root'; $passwd='centos'; $dbh=new PDO($dsn,$username,$passwd); var_dump($dbh); ?>
    5. 使用pdo扩展链接数据库的测试代码2
             
             
             
             
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      try { $user='root'; $pass=‘centos'; $dbh = new PDO('mysql:host=localhost;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(); } ?>

3. 实现LAMP架构

  • 以模块(Modules)方式实现
    CentOS 7:涉及安装程序
    Modules:httpd, php, php-mysql, mariadb-server
    CentOS 6:涉及安装程序
    Modules:httpd, php, php-mysql, mysql-server

    1. 安装,若是已经安装了httpd,直接安装php,会经过依赖关系会默认安装php-cli和php-common
             
             
             
             
      • 1
      [root@hai7-7 ~]$yum install php
    2. 安装成功后,会在/etc/httpd/conf.d/下生成新的配置文件,php.conf
             
             
             
             
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      [root@hai7-7 ~]$vim php.conf <FilesMatch \.php$> SetHandler application/x-httpd-php <==全部以.php结尾的文件,都交给httpd-php处理 </FilesMatch> DirectoryIndex index.php <==设置默认主页 php_value session.save_handler "files" php_value session.save_path "/var/lib/php/session" <==保存session目录
    3. 在httpd模块目录下,/etc/httpd/conf.modules.d/会增长一个php模块配置文件,10-php.conf
             
             
             
             
      • 1
      • 2
      • 3
      • 4
      [root@hai7-7 conf.modules.d]$vim 10-php.conf <IfModule prefork.c> <==只要在prefork.c模型下才会装载名为php5_module的模块 LoadModule php5_module modules/libphp5.so </IfModule>
      也就是说httpd以线程模式运行的话,须要装入的模块为php-zts,在extras仓库
    4. 检查php5模块是否已装载,若是未加载,须要检查配置文件和安装的程序包是否相匹配
             
             
             
             
      • 1
      root@hai7-7 conf.modules.d]$httpd -M
    5. 测试,在httpd页面路径下建一个.php文件,而后访问主页,若是能够看到php设置环境界面,说明php模块能够正常运行
             
             
             
             
      • 1
      • 2
      • 3
      • 4
      [root@hai7-7 html]$vim index.php <?php phpinfo(); ?>
    6. 安装mysql,同时让php支持链接mysql,须要组件为 php-mysq
             
             
             
             
      • 1
      [root@hai7-6 ~]$yum -y install mariadb-server php-mysql
    7. 在web服务器主机,编辑一个测试代码
             
             
             
             
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      <?php $conn = mysql_connect('127.0.0.1','root',''); <本机测试用,生产环境不能够用root,配置文件容易丢 if ($conn) echo "OK"; else echo "Failure"; ?>
    8. 重启服务后,访问web页面,若是出现“Failure”错误,说明php扩展没有问题,只是链接数据库失败,多是数据库没有启动,或者帐号密码错误,或者数据服务器端口错误等。若是出现ok界面,说明能够正常链接至数据库,IMP平台也就搭建成功,php程序放在网页目录下就能够对外提供服务了
  • 以FastCGI实现(php-fpm)
    php包与php-fpm包是互斥的,只能安装一种,若是测试机上有php须要先卸载
    FastCGI涉及程序:httpd, php-fpm, php-mysql, mariadb-server

    1. 安装程序包,httpd、php-mysql、mariadb-server
             
             
             
             
      • 1
      [root@hai7-7 ~]$yum install httpd php-mysql php-fpm mariadb-server -y
    2. 修改mysql数据库配置文件,不容许反向解析ip
             
             
             
             
      • 1
      • 2
      • 3
      [root@hai7-7 ~]$vim /etc/my.cnf.d/server.cnf [mysqld] skip_name_resolve=ON
    3. httpd要适配到FastCGI服务端,依赖于模块proxy_fcgi_module,2.4默认启动状态,2.2须要在epel源安装
             
             
             
             
      • 1
      • 2
      [root@hai7-7 ~]$httpd -M |grep cgi proxy_fcgi_module (shared)
    4. 编辑fastCGI服务器端配置文件/etc/php-fpm.conf用来配置php守护进程工做特性(如何管理本身的进程),/etc/php.ini依然生效,用来配置加载那些模块,修改了模块设置,就须要要重启php-fpm服务
             
             
             
             
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      [root@hai7-7 ~]$vim /etc/php-fpm.conf include=/etc/php-fpm.d/*.conf <==模块化配置加载此目录下全部的配置文件 [global] pid = /run/php-fpm/php-fpm.pid <==守护进程的pid error_log = /var/log/php-fpm/error.log <==错误日志 log_level = notice <==日子记录级别 daemonize = no <==表示是否以守护进程的方式运行,定义为no,由于要托管到 systemd上 ;;;;;;;;;;;;;;;;;;;; ; Pool Definitions ; ;;;;;;;;;;;;;;;;;;;; ; See /etc/php-fpm.d/*.conf <==Connection Pool链接池的定义都在php-fpm.d/下模块化的配置文件中
    5. 定义链接池的配置文件
             
             
             
             
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      [root@hai7-7 ~]$vim /etc/php-fpm.d/www.conf [www] <==链接池的名字,此名能够自定义 listen = 127.0.0.1:9000 <==监听在哪一个地址哪一个端口上,本机全部ipv4地址可用修改成0.0.0.0 listen.backlog = -1 <==队列长度,-1表示在服务器承载范围内不设限,队列时放在内存中的,防止didos攻击,推荐设限 #listen.allowed_clients = 127.0.0.1 <==访问控制,注释掉 user = apache <==表示子进程以哪一个身份运行 group = apache pm = dynamic <==定义管理链接池的模式,有两个值static和dynamic static: <==静态模式,直接启用全部子进程 dynamic: <==动态管理模式 following directives: pm.max_children:'最大链接数,动态静态都有用,默认值50,经过压测肯定' pm.start_servers:'服务启动时启动的进程数,此参数动态模式有用,默认值5' pm.min_spare_servers:'空闲进程数,此参数动态模式有用,默认值5' pm.max_spare_servers:'最大空闲进程数,此参数动态模式有用,默认值35' pm.max_requests = 500 <==进程最大服务数,达到此值就会kill生成新的,设为0表示不设限 pm.status_path = /status <==pm状态页面 ping.path = /ping <==判断服务工做状态的URL ping.response = pong <==判断/ping后返回的结果,能够自定义 php_value[session.save_handler] = files <==定义会话管理模式 php_value[session.save_path] = /var/lib/php/session <==会话保存路径,确保此文件存在,且apache有读写权限
    6. 建立session(会话)管理目录,而且修改成apache具备读写权限
             
             
             
             
      • 1
      • 2
      [root@hai7-7 ~]$mkdir /var/lib/php/session [root@hai7-7 ~]$chown apache.apache /var/lib/php/session/
    7. 在虚拟主机上配置http,须要手动指明默认主页文件使用index.php
      1. '编辑http配置文件,添加FCGI的配置'
      [root@hai7-7 data]$vim /etc/httpd/conf.d/text.conf
      DirectoryIndex index.php       <==指明默认主页文件为index.php
      <VirtualHost *:80>
      ServerName www.v9.com
      DocumentRoot /data/virtual/v9.com
      ProxyRequests Off              <==关闭正向代理
      ProxyPassMatch ^/(.*\.php)$  fcgi://192.168.50.115:9000/apps/vhosts/b.net/$1  <==反向代理,以php结尾的URL,转发给fcgi由/apps/vhosts/b.net/$1提供,后面的$1是指前面的/(.*\.php)

<Directory “/data/virtual/v9.com”> <==受权限制目录
Options None
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 在指定的页面路径下建一个网页测试文件,重启服务
      
      
      
      
    • 1
    • 2
    • 3
    • 4
    [root@hai7-7 v9.com]$ vim /data/virtual/v9.com/index.php <?php phpinfo(); ?>
  • 4. 常见LAMP应用

    • phpmyadmin
      一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库
      1. 获取站点
        下载:https://www.phpmyadmin.net/downloads/
      2. 布置phpmyadmin
        1. 将工具包解压后,移动至httpd服务的DocumentRoot下,作一个指向软链接,方便切换版本
                 
                 
                 
                 
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          1. '解压文件' [root@hai7-7 ~]$tar xf phpMyAdmin-4.0.10.20-all-languages.tar.gz 2. '移动至页面目录下' [root@hai7-7 ~]$mv phpMyAdmin-4.0.10.20-all-languages /data/virtual/ 3. '作软链接' [root@hai7-7 ~]$ln -sv phpMyAdmin-4.0.10.20-all-languages v9.com
        2. 进入phpMyAdmin-4.0.10.20-all-languages目录,将配置文件模板,修改成配置文件,去掉sample
                 
                 
                 
                 
          • 1
          [root@hai7-7 ~]$cp config.sample.inc.php config.inc.php
        3. 修改配置文件config.inc.php
                 
                 
                 
                 
          • 1
          • 2
          • 3
          [root@hai7-7 ~]$vim /data/virtual/phpMyAdmin-4.0.10.20-all-languages/config.inc.php $cfg['blowfish_secret'] = '123456'; <==输入一个随机字符串 $cfg['Servers'][$i]['host'] = 'localhost'; <==修改链接地址,与数据库中受权的用户地址要相同
        4. 安装php相关组件,重启服务后,即在httpd页面登入工具,帐号密码为数据库受权的帐户
                 
                 
                 
                 
          • 1
          • 2
          • 3
          yum install php-mbstring <==多字符支持 yum install php-mcrypt <==加密相关 systemctl restart php-fpm <==重启php-fpm
    • WordPress
      WordPress是一款开源的我的网站搭建程序,用户能够在支持PHP和MySQL数据库的服务器上架设属于本身的网站
      1. 获取地址
        https://cn.wordpress.org/
      2. 部署WordPress
        1. 将得到的压缩包,解压到网页目录中,进入目录找到配置文件模板,将其重命名为wp-config.php
                 
                 
                 
                 
          • 1
          • 2
          [root@hai7-7 ~]$cd /var/www/html/wordpress-4.9 [root@hai7-7 wordpress-4.9]$cp wp-config-sample.php wp-config.php
        2. 修改配置文件权限,保证Apache有读写权限
                 
                 
                 
                 
          • 1
          [root@hai7-7 ~]$chmod 666 wp-config.php
        3. 在数据库中建立一个网站专用数据库,专用帐户
                 
                 
                 
                 
          • 1
          • 2
          • 3
          [root@hai7-7 ~]$mysql MariaDB [(none)]> CREATE DATABASE wpdb; MariaDB [(none)]> GRANT ALL ON phptest.* TO 'wpuser'@'172.20.0.%'IDENTIFIED BY 'centos';
        4. 编辑配置文件,修改以下项,以链接数据库
                 
                 
                 
                 
          • 1
          • 2
          • 3
          • 4
          • 5
          [root@hai7-7 ~]$vim /var/www/html/wordpress-4.9/wp-config.php define('DB_NAME', 'phptest'); <==指定数据库名 define('DB_USER', 'root'); <==指定用户名 define('DB_PASSWORD', ''); <==指定密码 define('DB_HOST', '192.168.50.115'); <==指定主机
        5. 或者将配置文件删除,访问网站,会出现配置页面,填写相关信息后,会生成配置文件,将内容复制到wordpress目录下生成一个配置文件wp-config.php

    5. 将httpd/fpm分别以独立主机运行

    • 独立搭建服务器优势

      1. 不须要文件自身作处理,只须要经过API调对方的服务接口
      2. 剥离数据与文件的关系,单独存储
    • 搭建过程
      规划以110为httpd服务器,107为php-fpm服务器,基于FastCGI

      1. 在107上安装php,若是须要链接数据库,还要安装php-mysql组件
             
             
             
             
        • 1
        [root@hai7-7 ~]$yum install php-fpm php-mysql
      2. php服务器没有httpd服务,因此将web的php相关程序单独存放在一个目录下,新建目录/data/website
             
             
             
             
        • 1
        [root@hai7-7 ~]$mkdir /data/website
      3. 修改Php服务器的监听端口,默认状况是监听本地127.0.0.1上,须要修改成监听在网络ip,或者直接写端口,表示全部地址的9000均可以访问,重启服务
             
             
             
             
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        [root@hai7-7 website]$vim /etc/php-fpm.d/www.conf listen = 9000 [root@hai7-7 website]$systemctl restart php-fpm [root@hai7-7 website]$ss -ntl State Recv-Q Send-Q Local Address:Port LISTEN 0 128 *:9000 <==看到*就说明全部地址均可以访问
      4. 在110服务器上安装Apache服务,并修改配置文件为代理服务器
             
             
             
             
        • 1
        • 2
        • 3
        • 4
        • 5
        [root@hai7-8 ~]$yum install httpd [root@hai7-8 ~]$vim /etc/httpd/conf.dfcgi.conf DirectoryIndex index.php ProxyRequests Off ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.50.107:9000/data/website/$1 <==目标地址改成php服务器

    6 搭建虚拟主机,在同一台服务器上运行2个网站

    • 实验目标
      实现LAMP架构,在web服务器上维护两个网站
    • 使用的网页资源
      1. wordpress-4.9.4-zh_CN.tar.gz
      2. Discuz_X3.2_SC_UTF8.zip
    • 搭建过程
      1. 数据库服务器

        1. 先搭建数据库服务器,这里以服务器C(107)为例
                 
                 
                 
                 
          • 1
          [root@hai7-6 ~]$yum install mariadb-server
        2. 计划运行两个网页,因此在数据库中创建相应数据库和帐户
                 
                 
                 
                 
          • 1
          • 2
          • 3
          • 4
          1. '为wordpress网页创建数据库和帐户' [root@hai7-6 ~]$mysql -e "CREATE DATABASE wpdb;GRANT ALL ON wpdb.* TO wpuser@'192.168.50.%' IDENTIFIED BY 'centos'" 2. '为Discuz网页创建数据库和帐户' [root@hai7-6 ~]$mysql -e "CREATE DATABASE Dzdb;GRANT ALL ON Dzdb.* TO dzuser@'192.168.50.%' IDENTIFIED BY 'centos'"
      2. php-fpm服务器

        1. 服务器B(110),安装php-fpm,链接数据库组件php-mysql
                 
                 
                 
                 
          • 1
          [root@hai7-6 ~]$yum install php-fpm php-mysql
        2. 分别创建2个网站对应的网页目录,Discuz稍后重命名
                 
                 
                 
                 
          • 1
          [root@hai7-6 ~]$mkdir /data/wordpress
        3. 在官网获取页面文件包wordpress-4.9.4-zh_CN.tar.gz和Discuz_X3.2_SC_UTF8.zip,分别解压至对应网页目录
                 
                 
                 
                 
          • 1
          • 2
          • 3
          • 4
          [root@hai7-6 ~]$tar xvf wordpress-4.9.4-zh_CN.tar.gz [root@hai7-6 ~]$unzip Discuz_X3.2_SC_UTF8.zip 'Discuz解压后的目录为upload,重命名为discuz' [root@hai7-6 ~]$mv upload/ discuz
        4. 修改wordpress配置文件
                 
                 
                 
                 
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10
          • 11
          • 12
          1. '进入wordpress目录下,将配置文件模板修改成配置文件' [root@hai7-8 ~]$mv wp-config-sample.php wp-config.php 2. '修改配置文件' [root@hai7-8 ~]$vim /data/wordpress/wp-config.php /** WordPress数据库的名称 */ define('DB_NAME', 'wpdb'); /** MySQL数据库用户名 */ define('DB_USER', 'wpuser'); /** MySQL数据库密码 */ define('DB_PASSWORD', 'centos'); /** MySQL主机 */ define('DB_HOST', '192.168.50.107');
        5. 让Apache对discuz目录具备写权限
                 
                 
                 
                 
          • 1
          [root@hai7-8 /data]$setfacl -R -m u:apache:rwx discuz/
      3. httpd服务器

        1. 安装httpd服务
                 
                 
                 
                 
          • 1
          [root@hai7-8 ~]$yum -y install httpd
        2. 修改httpd配置文件,定义两个虚拟主机,并受权目录
          [root@hai7-8 ~]$vim /etc/httpd/conf.d/test.conf
          DirectoryIndex index.php         <==指定默认网页文件为index.php
          <VirtualHost *:80>       		 <==设立虚拟主机
          ServerName www.wordpress.net     <==服务名
          DocumentRoot /data/wordpress/    <==web服务页面路径
          ProxyRequests Off       		 <==不启用正向代理
          ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/data/wordpress/$1        <==启用反向代理
          <Directory "/data/wordpress/">   <==受权虚拟主机服务目录
          Require all granted
          </Directory>
          </VirtualHost>

    <VirtualHost :80> <==第二个虚拟机
    ServerName www.discuz.net
    DocumentRoot /data/discuz/
    ProxyRequests Off
    ProxyPassMatch ^/(.
    .php)$ fcgi://127.0.0.1:9000/data/discuz/$1
    <Directory “/data/discuz/”>
    Require all granted
    </Directory>
    </VirtualHost>

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
  • 客户端
    在客户端D上修改hosts文件,模拟DNS解析,登陆网页检测

      
      
      
      
    • 1
    • 2
    [root@hai6 ~]$vim /etc/hosts 192.168.50.110 www.wordpress.net www.discuz.net
  • 7 CentOS7编译安装LAMP,基于fastcgi方式

    • 编译环境
      1. httpd可移植运行库
        apr-1.6.3.tar.gz
        apr-util-1.6.1.tar.gz
      2. Apache源码
        httpd-2.4.34.tar.bz2
      3. mariadb二进制文件
        mariadb-10.2.15-linux-x86_64.tar.gz
      4. php解释器
        php-7.1.18.tar.bz2
      5. 页面文件
        wordpress-4.9.4-zh_CN.tar.gz
    • 编译顺序
      mariadb–>httpd–>php
      mariadb和httpd前后能够随意,php依赖于mariadb,须要最后安装
    • 编译流程
      1. 准备开发包组
             
             
             
             
        • 1
        [root@hai7-8 ~]$yum groupinstall "Development Tools"
      2. 编译httpd
        1. 安装依赖包
                 
                 
                 
                 
          • 1
          [root@hai7-7 ~]$yum install pcre-devel openssl-devel expat-devel -y
        2. 官方下载httpd源码,以及依赖的apr包(apr-1.6.3.tar.gz、apr-util-1.6.1.tar.gz 、httpd-2.4.34.tar.bz2),导入linux中,而后解压缩
                 
                 
                 
                 
          • 1
          • 2
          • 3
          [root@hai7115 srcd]$tar xf apr-1.6.3.tar.gz [root@hai7115 srcd]$tar xf apr-util-1.6.1.tar.gz [root@hai7115 srcd]$tar xf httpd-2.4.34.tar.bz2
        3. 将apr和apr-util整个目录拷贝到httpd-2.4.34/srclib/目录下,而且更名(必须)为apr和apr-util
                 
                 
                 
                 
          • 1
          • 2
          [root@hai7115 srcd]$cp -r apr-1.6.3 httpd-2.4.34/srclib/apr [root@hai7115 srcd]$cp -r apr-util-1.6.1 httpd-2.4.34/srclib/apr-util
        4. 编译,./configure做用,检查系统环境和配置生成makefile文件,检查全部所须要的编译操做的依赖环境是否能够知足,若是能够知足,将检查结果和命令行定义的选项特性结合makefile.in生成为makefile文件
          –enable-so \ enable表示启用某个内建特性;
          –disable表示禁用程序自带的特性;
          –with表示须要调用另一个软件程序一块儿安装;
          –without表示不结合;
                 
                 
                 
                 
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10
          • 11
          • 12
          • 13
          '进入httpd解压后的目录,运行configure' ./configure\ --prefix=/app/httpd24\ --enable-so\ <==是否支持动态模块 --enable-ssl\ <==是否支持加密 --enable-cgi\ --enable-rewrite\ --with-zlib\ --with-pcre\ <==正则表达式 --with-included-apr\ <==表示已经将apr相关须要编译的内容放在httpd相关的路径下,能够一块儿编译 --enable-modules=most\ <==是否支持大部分模块 --enable-mpms-shared=all\ --with-mpm=prefork <==是否支持mpm的prefork工做模型
        5. 构造和安装,make为项目管理工具,组织项目间的依赖关系,让最终的构建者可以快速构建项目代码,调用GCC等编译器,编译成特定程序包。
          安装步骤为大量的cp操做,将编译好的二进制程序放到对应目录下,make install会调用相应脚本执行cp动做。
          建立apache帐号,不建立系统默认启动的帐号为daemon
                 
                 
                 
                 
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          1. '构造和安装 ' [root@hai7115 httpd-2.4.34]$make -j 8 && make install 2. '建立用户' [root@hai7-7 ~]$useradd -r -s /sbin/nologin apache 3. '修改配置文件中的用户项,将httpd帐号修改成apache' [root@hai7-7 ~]$vim /app/httpd24/conf/httpd.conf User apache Group apache
        6. 编译安装目录
                 
                 
                 
                 
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10
          • 11
          • 12
          • 13
          • 14
          [root@hai7-8 /app/httpd24]$ll bin build cgi-bin <==动态资源存放目录,cgi脚本 conf error <==错误页(例如访问页面不存在返回404等) htdocs <==网页测试页面 icons include <==调用当前开发库作二次开发,须要知道API接口有哪些接口可被调用,对于c语言而言,都在include里用头文件标识 lib <==当前程序提供的库文件,分为共享库和开发库,共享库,被本程序的多个程序或程序包共享使用,开发库时作二次开发的的调用接口 logs <==日志文件 man <==帮助手册 manual <==超连接手册,须要web服务进行访问,在主配置文件中启用 #Include conf/extra/httpd-manual.conf行,配置文件在include后面为manual配置文件,须要启用negotiation_module模块 modules <==以编译的模块
        7. 将二进制程序放入PATH变量中,启动测试,测试所见页面文件来自/app/httpd24/htdocs目录下
                 
                 
                 
                 
          • 1
          • 2
          • 3
          • 4
          1. '加入PATH列表' [root@hai7-7 ~]$echo PATH=/app/httpd24/bin:$PATH > /etc/profile.d/lamp.sh 2. '重启生效' [root@hai7-7 ~]$. /etc/profile.d/lamp.sh
        8. 让自编译httpd开机启动,将其放入系统启动脚本rc.local,加上执行权限。或者写启动脚本,写启动脚本能够用service控制启动
                 
                 
                 
                 
          • 1
          • 2
          • 3
          • 4
          • 5
          1. '将启动程序放在启动脚本中' [root@hai7-7 rc.d]$vim /etc/rc.d/rc.local /app/httpd24/bin/apachectl 2. '加上执行权限' [root@hai7-7 rc.d]$chmod +x /etc/rc.d/rc.local
      3. 二进制编译数据库
        1. 解压数据库二进制包到指定目录下,目录必须/usr/local
                 
                 
                 
                 
          • 1
          [root@hai7-7 ~]$tar xvf mariadb-10.2.15-linux-x86_64.tar.gz -C /usr/local
        2. 解压后程序名为mariadb,须要修改成mysql,建一个软链接,创建一个系统mysql帐号,修改全部者和所属组
                 
                 
                 
                 
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          1. '进入解压目录' [root@hai7-7 ~]$cd /usr/local/ 2. '创建软链接,重命名程序' [root@hai7-7 local/]$ln -s mariadb-10.2.15-linux-x86_64/ mysql 3. '创建系统帐户' [root@hai7-7 local/]$useradd -r -s /sbin/nologin mysql 4. '修改权限' [root@hai7-7 local]$chown -R mysql.mysql mysql/
        3. 准备数据目录
                 
                 
                 
                 
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          1. '创建数据库目录' [root@hai7-7 ~]$mkdir /app/mysql 2. '将目录所属组所属者修改成mysql' [root@hai7-7 ~]$chown mysql.mysql /app/mysql 3. '运行解压包带的脚本,生成系统数据库,必须在解压目录(/usr/local/mysql)运行,指定路径为新建的数据库目录,指定帐号' [root@hai7-7 mysql]$scripts/mysql_install_db --datadir=/app/mysql --user=mysql
        4. 准备配置文件
                 
                 
                 
                 
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          1. '在etc下建一个独立配置文件目录' [root@hai7-7 ~]$mkdir /etc/mysql 2. '拷贝二进制包中模板来修改' [root@hai7-7 ~]$cp /usr/local/mysql/support-files/my-huge.cnf /etc/mysql/my.cnf 3. '修改配置文件,指定数据库目录' [root@hai7-7 ~]$vim /etc/mysql/my.cnf [mysqld] datadir=/app/mysql
        5. 准备服务脚本,压缩包有模板文件,而后加入服务脚本启动列表中
                 
                 
                 
                 
          • 1
          • 2
          [root@hai7-7 ~]$cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld [root@hai7-7 ~]$chkconfig --add mysqld
        6. 将mysql下的bin放入PATH变量中,加入httpd自定义变量文件中
                 
                 
                 
                 
          • 1
          • 2
          • 3
          • 4
          [root@hai7-7 bin]$vim /etc/profile.d/lamp.sh PATH=/app/httpd24/bin:/usr/local/mysql/bin:$PATH '生效一下' [root@hai7-7 bin]$. /etc/profile.d/lamp.sh
        7. 跑一下安全脚本mysql_secure_installation后,为wordpress创建一个使用的帐号
                 
                 
                 
                 
          • 1
          • 2
          '创建wordpress网页用的帐号和数据库' [root@hai7-7 bin]$mysql -e "CREATE DATABASE wpdb2;GRANT ALL ON wpdb2.* TO wpuser@'localhost' IDENTIFIED BY 'centos'"
      4. 编译php
        1. 安装依赖包
          libxml2-devel:php有些功能启用时,须要使用代码处理xml格式的文档,必须兼容使用xml的开发库
          bzip2-devel:php自己使用压缩解压功能,所依赖的库
          libmcrypt-devel :加密解密功能(epel)
                 
                 
                 
                 
          • 1
          [root@hai7-7 bin]$yum -y install libxml2-devel bzip2-devel libmcrypt-devel
        2. 解压php源码文件,进入目录,运行configure
          基于模块方式编译,加以下项,不可与fpm模式共用,使用apxs2编译成httpd模块
          –with-apxs2=/app/httpd24/bin/apxs
          基于fpm模式编译
          –enable-fpm
          注意:php-7.0以上版本使用–enable-mysqlnd --with-mysqli=mysqlnd ,原–with-mysql再也不支持
                 
                 
                 
                 
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10
          • 11
          • 12
          • 13
          • 14
          • 15
          • 16
          • 17
          • 18
          • 19
          • 20
          • 21
          • 22
          • 23
          • 24
          • 25
          1. '解压源码包' [root@hai7-7 data]$tar xvf php-7.1.18.tar.bz2 2. '进入目录' [root@hai7-7 data]$cd php-7.1.18/ 3. '运行configure' [root@hai7-7 php-7.1.18]$./configure --prefix=/app/php \ --enable-mysqlnd \ --with-mysqli=mysqlnd \ <==链接数据库的3种方法之一 --with-openssl \ --with-pdo-mysql=mysqlnd \ <==链接数据库的方法之一,基于对象方式来访问数据的接口 --enable-mbstring \ <==支持多字节 --with-freetype-dir \ <==与字体处理相关联的库 --with-jpeg-dir \ <==与图形处理相关的 --with-png-dir \ <==png图形处理相关 --with-zlib \ <==压缩解压缩相 --with-libxml-dir=/usr \ <==处理xml格式文档 --enable-xml \ <==启用xml功能 --enable-sockets \ <==支持基于sockets本地进行通信 --enable-fpm \ <==基于fpm工做 --with-config-file-path=/etc \ <==指明config路径 --with-config-file-scan-dir=/etc/php.d \ <==模块化配置文件路径 --enable-maintainer-zts \ <==mpm若是是prefork不须要此项,此项为启用线程化的php模块 --disable-fileinfo 禁止访问file信息 4. '构造和安装' [root@hai7-7 php-7.1.18]$make -j 8 && make install
        3. 将php的bin目录加入PATH变量
                 
                 
                 
                 
          • 1
          • 2
          [root@hai7-7 bin]$cat /etc/profile.d/lamp.sh PATH=/app/httpd24/bin:/usr/local/mysql/bin:/app/php/bin:$PATH
        4. 为php提供配置文件,在编译目录下复制一份到etc目录下,命名为php.ini,默认设置,除时区外,一般不须要修改
          php.ini-development(开发环境)和php.ini-production(生成环境),两者配置参数不一样,根据环境选择
                 
                 
                 
                 
          • 1
          [root@hai7-7 ~]$cp /data/php-7.1.18/php.ini-production /etc/php.ini
        5. 在Apache配置文件中加入一些设置,让其识别php程序,创建一个独立子配置文件
          1. '先在主配置文件中加入include,让其能够包含子配置文件'
          [root@hai7-7 ~]$vim /app/httpd24/conf/httpd.conf
          Include conf/extra/php.conf
          2. '创建子配置文件,加入FCGI配置项'
          [root@hai7-7 ~]$cd /app/httpd24/conf/extra/
          [root@hai7-7 extra]$vim php.conf
          AddType application/x-httpd-php .php          <==让httpd能够识别php文件
          AddType application/x-httpd-php-source .phps

    ProxyRequests Off <==不启动正向代理
    ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/app/httpd24/htdocs/$1 <==启动反向代理```

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
  • 启用httpd的两个模块,定位到LoadModule,去掉注释便可,指定默认页面文件为php
      
      
      
      
    • 1
    • 2
    • 3
    • 4
    [root@hai7-7 ~]$vim /app/httpd24/conf/httpd.conf DirectoryIndex index.php index.html <==指定默认页面文件为php文件,没有在读取html LoadModule proxy_module modules/mod_proxy.so <==须要启动的模块 LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so <==须要启动的模块
  • 准备启动脚本
      
      
      
      
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1. '将解压目录下init.d.php-fpm文件做为模板,拷贝到init.d中' [root@hai7-7 ~]$cp /data/php-7.1.18/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm 2. '为其加上执行权限' [root@hai7-7 ~]$chmod +x /etc/init.d/php-fpm 3. '加入到启动服务列表' [root@hai7-7 ~]$chkconfig --add php-fpm
  • 准备php配置文件,和www的子配置文件
      
      
      
      
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    1. '编译后已经生成,只是文件后缀不符合要求,进入/app/php/etc目录,修改后缀,启动服务' [root@hai7-7 ~]$cd /app/php/etc [root@hai7-7 etc]$cp php-fpm.conf.default php-fpm.conf <==主配置文件 2.' 进入 /app/php/etcphp-fpm.d' [root@hai7-7 etc]$cd php-fpm.d/ [root@hai7-7 php-fpm.d]$cp www.conf.default www.conf <==子配置文件 3. '在子配置文件中修改运行帐号,还能够定义监听端口等' [root@hai7-7 php-fpm.d]$vim www.conf user = apache <==将运行帐号修改成apache group = apache 4. '启动服务' [root@hai7-7 php-fpm.d]$service php-fpm start
  • workpress
    1. 解压workpress文件,拷贝到网页文件目录下(/app/httpd24/htdocs/)
          
          
          
          
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      1. '解压文件' [root@hai7-7 data]$tar xvf wordpress-4.9.4-zh_CN.tar.gz 2. '拷贝到页面目录下' [root@hai7-7 data]$cp -r wordpress/* /app/httpd24/htdocs/ 3. '准备wordpress的配置文件' [root@hai7-7 htdocs]$cp wp-config-sample.php wp-config.php 4. '修改配置,链接数据库' [root@hai7-7 htdocs]$vim wp-config.php /** WordPress数据库的名称 */ define('DB_NAME', 'wpdb2'); /** MySQL数据库用户名 */ define('DB_USER', 'wpuser'); /** MySQL数据库密码 */ define('DB_PASSWORD', 'centos'); /** MySQL主机 */ define('DB_HOST', 'localhost');
  • 8 CentOS6编译安装PHP-FPM模式的LAMP

    • 编译环境
      1. mairadb:通用二进制格式,mariadb-5.5.56
      2. httpd:编译安装,httpd-2.4.27
      3. php5:编译安装,php-5.6.30
      4. Wordpress: 安装wordpress-4.8-zh_CN.tar.gz
      5. Xcache:编译安装xcache-3.2.0
    • 实现顺序
      mariadb–>httpd–>php
    • 编译过程
    1. 安装相关包
      bzip2-devel libxml2-devel libmcrypt-devel(epel源)
    2. 编译安装php
      1. 进入解压目录
        cd php-5.6.30/
      2. 编译安装
        1. 运行configure脚本
          ./configure --prefix=/app/php5 --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --enable-fpm --with-mcrypt --with-config-file-path=/etc/php5 --with-config-file-scan-dir=/etc/php5.d --with-bz2
        2. 构造和安装
          make -j 4 && make install
        3. 实现php的配置文件和服务脚本
          1. mkdir /etc/php5 /etc/php5.d/
          2. cd php-5.6.30/
          3. cp php.ini-production /etc/php5/php.ini
          4. cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
          5. chmod +x /etc/rc.d/init.d/php-fpm
          6. chkconfig --add php-fpm
          7. chkconfig --list php-fpm
    3. 编辑php配置文件
      1. cd /app/php5/etc
      2. cp php-fpm.conf.default php-fpm.conf
      3. vim /app/php5/etc/php-fpm.conf
        pm.max_children = 50
        pm.start_servers = 5
        pm.min_spare_servers = 2
        pm.max_spare_servers = 5 和pm.start_servers一致
        pid = /app/php5/var/run/php-fpm.pid
      4. service php-fpm restart
    4. 修改httpd24的配置文件
      1. vim /app/apache24/conf/httpd.conf
        说明:启用httpd的相关模块
        在Apache httpd 2.4之后已经专门有一个模块针对FastCGI的实现,此模块为mod_proxy_fcgi.so,它实际上是做为mod_proxy.so模块的扩充,所以,这两个模块都要加载
        去掉下面两行注释
        LoadModule proxy_module modules/mod_proxy.so
        LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
        添加以下二行
        AddType application/x-httpd-php .php
        AddType application/x-httpd-php-source .phps
        定位至DirectoryIndex index.html
        修改成:
        DirectoryIndex index.php index.html
        加下面两行
        ProxyRequests Off 关闭正向代理
        ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/app/httpd24/htdocs/$1
        service httpd24 restart
    5. 测试
      vim /app/httpd24/htdocs/index.php
         
         
         
         
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      <?php $link = mysql_connect('127.0.0.1','root','magedu'); if ($link) echo "Success..."; else echo "Failure..."; mysql_close(); phpinfo(); ?>
    </div>
    					<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-7f770a53f2.css" rel="stylesheet">
                </div>
    相关文章
    相关标签/搜索