12.http学习与应用实现

1、请描述一次完整的http请求处理过程;


1)建立或处理连接:客户端发送http请求报文,服务器端接收或拒绝请求;
2)接收请求:服务器端接收来自客户端对某些资源的请求;
3)处理请求:服务器端解析客户端请求报文,获取客户端请求的资源及请求方法等信息;
4)访问资源:服务器端获取客户端请求的资源;
5)构建响应报文;
6)发送响应报文;
7)日志记录;

2、httpd所支持的处理模型有哪些,他们的分别使用于哪些环境。


1)prefork:
多进程模型,每个进程响应一个请求;
一个主进程:负责生成及回收子进程、创建套接字、接收请求、派发请求给子进程;
多个子进程:负责处理来自主进程派发的客户端请求,每个子进程处理一个请求;
工作模式:服务器端会预先生成几个空闲进程,用于响应客户端请求;
         可以在配置文件中设置最大及最小空闲子进程数目;
2)worker:
多进程多线程模型,每个线程响应一个请求;
一个主进程:负责生成及回收子进程、创建套接字、接收请求、派发请求给子进程;
多个子进程:每个子进程生成多个线程;
n个线程:每个线程响应一个请求;
并发数量:子进程数目x每个子进程所能生成的最大线程数
3)event:
事件驱动模型,多进程模型,每个进程响应多个请求;
一个主进程:负责生成及回收子进程、创建套接字、接收请求、派发请求给子进程;
多个子进程:每个子进程基于事件驱动机制响应多个请求;

3、源码编译安装LAMP环境(基于wordpress程序),并写出详细的安装、配置、测试过程。


环境:linux 2.6.32-358.el6.x86_64 + httpd 2.4.9 + mysql-5.5.33 + php-5.4.26

安装编译环境:
[root@web ~]# yum groupinstall "Desktop Platform Development" "Development tools" -y
[root@web ~]# yum install mode_ssl openssl-devel pcre-devel -y
注:这个必须得安装,编译Apache的时候用

一、编译安装Apache
1.解决依赖关系
httpd-2.4.9需要较新版本的apr和apr-util,因此需要事先对其进行升级。
升级方式有两种,一种是通过源代码编译安装,
一种是直接升级rpm包。这里选择使用编译源代码的方式进行。
APR(Apache portable Run-time libraries,Apache可移植运行库)
的目的如其名称一样,主要为上层的应用程序提供
一个可以跨越多操作系统平台使用的底层支持接口库。在早期 的Apache版本中,
应用程序本身必须能够处理各种具体操作系统平台的细节,
并针对不同的平台调用不同的处理函数。

(1)编译安装apr
[root@web ~]# tar xf apr-1.5.0.tar.bz2 
[root@web ~]# cd apr-1.5.0
[root@web apr-1.5.0]# ./configure --prefix=/usr/local/apr
[root@web apr-1.5.0]# make && make install

(2)编译安装apr-util
[root@web ~]# tar xf apr-util-1.5.3.tar.bz2 
[root@web ~]# cd apr-util-1.5.3
[root@web apr-util-1.5.3]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@web apr-util-1.5.3]# make && make install

2.编译安装httpd
[root@web ~]# tar xf httpd-2.4.9.tar.bz2 
[root@web ~]# cd httpd-2.4.9
[root@web httpd-2.4.9]# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 --enable-so 
                        --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre 
                        --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util 
                        --enable-modules=most --enable-mpms-shared=all --with-mpm=event
[root@web httpd-2.4.9]# make && make install 

注:configure后跟的参数解释
--prefix=/usr/local/apache设定httpd的安装目录
--sysconfdir=/etc/httpd24 设定httpd的配置文件目录
--enable-so   支持共享模块,如果没有这个PHP模块无法加入
--enable--ssl 支持ssl
--enable-cgi  支持cgi
--enable-rewrite  支持url重写
--with-zlib   支持zlib压缩,传输层的压缩(不指定具体的路径,默认在系统中搜索)
--with-pcre   支持正则化(不指定具体的路径,默认在系统中搜索)
--with-apr=/usr/local/apr   指定apr的路径
--with-apr-util=/usr/local/apr-util  指定apr-util的路径
--enable-modules=most   指定要编译的模块(most/all)
--enable-mpms-shared=all   指定要编译mpm
--with-mpm=event  指定httpd默认的MPM的工作方式


3.修改主配置文件,添加PidFile路径
[root@web ~]# vim /etc/httpd24/httpd.conf
PidFile "/var/run/httpd24.pid"

4.提供SysV服务脚本/etc/rc.d/init.d/httpd,内容如下:
[root@web ~]# vim /etc/init.d/httpd24
这里是复制的/etc/init.d/httpd的脚本做了修改,具体修改内容:
        apachectl=/usr/local/apache/bin/apachectl
        httpd=${HTTPD-/usr/local/apache/bin/httpd}
        prog=httpd24
        pidfile=${PIDFILE-/var/run/httpd24.pid}
        lockfile=${LOCKFILE-/var/lock/subsys/httpd24}

[root@web ~]# chmod +x /etc/init.d/httpd24

5.将httpd24加入服务列表并启动httpd24服务
[root@web ~]# chkconfig --add httpd24
[root@ftp ~]# service httpd24 start

出现了报错:
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, 
         using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
解决方法:
[root@web ~]# vim /etc/httpd24/httpd.conf
ServerName localhost:80

6.可以将新编译的httpd24加入环境变量
[root@web ~]# vim /etc/profile.d/httpd24.sh
export PATH=/usr/local/apache/bin:$PATH
[root@web ~]# source /etc/profile.d/httpd24.sh

二、编译安装mysql-5.5.33
1.安装编译环境和需要的包
[root@web ~]# yum install ncurses-devel.x86_64 cmake.x86_64 -y

2.创建mysql用户和对应的mysql数据目录
[root@web ~]# groupadd  -r mysql
[root@web ~]# useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql
[root@web ~]# chown -R mysql:mysql /mydata/data

3.编译安装mysql-5.5.33
[root@web ~]# tar xf /mysql-5.5.33.tar.gz -C /usr/local/
[root@web ~]# ln -sv /usr/local/mysql-5.5.33/ /usr/local/mysql
[root@web ~]# cd /usr/local/mysql
[root@web mysql]# cmake .
[root@web mysql]# make install
[root@web mysql]# chmod +x scripts/mysql_install_db
[root@web mysql]# scripts/mysql_install_db --basedir=/usr/local/mysql 
                   --user=mysql --datadir=/mydata/data

4.为mysql提供配置文件
[root@web mysql]# mv /etc/my.cnf{,.bak}
[root@web mysql]# cp support-files/my-large.cnf /etc/my.cnf
[root@web mysql]# vim /etc/my.cnf   
    thread_concurrency = 2   //这里为cpu个数乘以2
    datadir = /mydata/data   //这行自己添加,为数据文件目录

5.为mysql提供SysV服务脚本
[root@web mysql]# cp support-files/mysql.server /etc/init.d/mysqld
[root@web mysql]# chmod +x /etc/init.d/mysqld
[root@web mysql]# chkconfig --add mysqld
[root@web mysql]# chkconfig mysqld on
[root@web mysql]# service mysqld start

6.配置环境变量,使mysql的命令可以直接使用
[root@web mysql]# vim /etc/profile.d/mysql.sh
     export PATH=/usr/local/mysql/bin:$PATH
[root@web mysql]# chmod +x /etc/profile.d/mysql.sh 
[root@web mysql]# source /etc/profile.d/mysql.sh

7.配置mysql的man手册
[root@web mysql]# vim /etc/man.config
 MANPATH  /usr/local/mysql/man

8.配置mysql的头文件到系统头文件
[root@web mysql]# ln -sv /usr/local/mysql/include  /usr/include/mysql

9.配置mysql的库文件到系统库查找路径
[root@web mysql]# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
[root@web mysql]# ldconfig //重新载入系统库

三、编译安装php-5.4.26
1.安装编译php时需要的包
[root@web ~]# yum install bzip2-devel libmcrypt-devel libxml2-devel -y

2.编译安装php
[root@web ~]# tar xf php-5.4.26.tar.bz2
[root@web ~]# cd php-5.4.26/
[root@web php-5.4.26]# ./configure --prefix=/usr/local/php --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 --with-apxs2=/usr/local/apache/bin/apxs 
                        --with-mcrypt  --with-config-file-path=/etc 
                        --with-config-file-scan-dir=/etc/php.d --with-bz2  
                        --enable-maintainer-zts

说明:
(1)这里为了支持apache的worker或event这两个MPM,编译时使用了--enable-maintainer-zts选项。
(2)如果使用PHP5.3以上版本,为了链接MySQL数据库,可以指定mysqlnd,这样在本机就不需要先安装MySQL
   或MySQL开发包了。mysqlnd从php 5.3开始可用,可以编译时绑定到它(而不用和具体的MySQL客户端库
   绑定形成依赖),但从PHP 5.4开始它就是默认设置了。
   [root@web php-5.4.26]# ./configure --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd 
                                     --with-mysqli=mysqlnd

[root@web php-5.4.26]# make
[root@web php-5.4.26]# make test
[root@web php-5.4.26]# make intall

3.为php提供配置文件:
[root@web php-5.4.26]# cp php.ini-production /etc/php.ini

4.编辑apache配置文件httpd.conf,以apache支持php
 [root@web php-5.4.26]# vim /etc/httpd/httpd.conf
 添加如下二行
   AddType application/x-httpd-php  .php
   AddType application/x-httpd-php-source  .phps

 定位至DirectoryIndex index.html 
 修改为:
  DirectoryIndex  index.php  index.html

5.重启httpd24服务
[root@web php-5.4.26]# service httpd24 restart


四、编译安装wordpress
1.解压wordpress包到/usr/local/appache/htdocs
[root@web ~]# tar -xf wordpress-4.7-zh_CN.tar.gz -C /usr/local/apache/htdocs

2.创建数据库并授权登录用户
[root@web ~]# mysql
   mysql> create database wordpress;
   mysql> grant all on wordpress.* to wpuser@'192.168.%.%' identified by 'password';

3.编辑wordpress的配置文件
[root@web ~]# cp /usr/local/apache/htdocs/wordpress/wp-config-sample.php 
                 /usr/local/apache/htdocs/wordpress/wp-config.php 

[root@web ~]# vim /usr/local/apache/htdocs/wordpress/wp-config.php

    /** WordPress数据库的名称 */
    define('DB_NAME', 'wordpress');

    /** MySQL数据库用户名 */
    define('DB_USER', 'wpuser');

    /** MySQL数据库密码 */
    define('DB_PASSWORD', 'password');

    /** MySQL主机 */
    define('DB_HOST', '192.168.82.58');

4.在浏览器中访问并配置
http://192.168.82.58/wordpress/

4 5 跳过

6、在LAMP架构中,请分别以php编译成httpd模块形式和php以fpm工作为独立守护进程的方式来支持httpd,列出详细的过程。


php编译成模块形式在第三题中做过,Apache和mysql编译安装与第三题相同。

1.安装所需要的环境
yum install bzip2-devel libmcrypt-devel libxml2-devel -y

2.编译安装php-5.4.26
[root@web ~]# tar xf php-5.4.26.tar.bz2
[root@web ~]# cd php-5.4.26
[root@web php-5.4.26]#  ./configure --prefix=/usr/local/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 
        --with-config-file-scan-dir=/etc/php.d --with-bz2
[root@web php-5.4.26]# make
[root@web php-5.4.26]# make test
[root@web php-5.4.26]# make intall

3.为php提供配置文件
[root@web php-5.4.26]# cp php.ini-production /etc/php.ini

4.为php-fpm提供SysV脚本并添加到服务列表
[root@web php-5.4.26]# cp sapi/fpm/init.d.php-fpm  
                        /etc/rc.d/init.d/php-fpm
[root@web php-5.4.26]# chmod +x /etc/rc.d/init.d/php-fpm
[root@web php-5.4.26]# chkconfig --add php-fpm
[root@web php-5.4.26]# chkconfig php-fpm on

5.为php-fpm提供配置文件
[root@web php-5.4.26]# cp /usr/local/php5/etc/php-fpm.conf.default
                         /usr/local/php5/etc/php-fpm.conf

6.编辑php-fpm配置文件内容
[root@web php-5.4.26]# vim /usr/local/php5/etc/php-fpm.conf
    pm.max_children = 50
    pm.start_servers = 5
    pm.min_spare_servers = 2
    pm.max_spare_servers = 8
    pid = /usr/local/php5/var/run/php-fpm.pid 

7.启动php-fpm并检测
[root@web php-5.4.26]# service php-fpm start

[root@web php-5.4.26]# ps aux | grep php-fpm
    root  81568  0.0  0.0 154960  3940 ?Ss   Aug10   0:00 php-fpm: master 
                                process (/usr/local/php5/etc/php-fpm.conf)  
    nobody81569  0.0  0.0 154960  3496 ?SAug10   0:00 php-fpm: pool www   
    nobody81570  0.0  0.0 154960  3496 ?SAug10   0:00 php-fpm: pool www   
    nobody81571  0.0  0.0 154960  3496 ?SAug10   0:00 php-fpm: pool www   
    nobody81572  0.0  0.0 154960  3496 ?SAug10   0:00 php-fpm: pool www   
    nobody81573  0.0  0.0 154960  3496 ?SAug10   0:00 php-fpm: pool www   
    root  81623  0.0  0.0 103244   840 pts/0S+   00:11   0:00 grep php-fpm
此命令输出有中几个php-fpm进程就说明启动成功了
[root@web php-5.4.26]# netstat -tnlp | grep php-fpm
tcp0  0 127.0.0.1:9000  0.0.0.0:*   LISTEN  81568/php-fpm 
fpm监听在127.0.0.1的9000端口

8.编辑httpd的配置文件使支持php-fpm
[root@web php-5.4.26]# vim /etc/httpd24/httpd.conf  
    LoadModule proxy_module modules/mod_proxy.so  //这行取消注释
    LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so //这行取消注释
    Include /etc/httpd24/extra/httpd-vhosts.conf   //这行取消注释
#DocumentRoot "/usr/local/apache/htdocs"  //这行注释掉
    AddType application/x-httpd-php  .php //添加这行
AddType application/x-httpd-php-source  .phps  //添加这行
    DirectoryIndex  index.php  index.html  //这行修改
在Apache httpd 2.4以后已经专门有一个模块针对FastCGI的实现,
此模块为mod_proxy_fcgi.so,它其实是作为mod_proxy.so模块的扩充,
因此,这两个模块都要加载。

9.创建虚拟主机目录并创建所需php测试文件
[root@web php-5.4.26]# mkdir -p /web/vhosts/www1
[root@web php-5.4.26]# echo '<? php  phpinfo() ?>' > /web/vhosts/www1/index.php

10.编辑虚拟主机配置文件使支持使用fcgi
[root@web php-5.4.26]# vim /etc/httpd24/extra/httpd-vhosts.conf
    <VirtualHost 192.168.82.58:80>
    DocumentRoot "/web/vhosts/www1"
    ServerName www1.stuX.com
    ErrorLog "/var/log/httpd/www1.err"
    CustomLog "/var/log/httpd/www1.access" common

            ProxyRequests Off
    ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/web/vhosts/www1/$1

            <Directory "/web/vhosts/www1">
    Options None
    AllowOverride None
    Require all granted
    </Directory>
    </VirtualHost>

    ProxyRequests Off:关闭正向代理
    ProxyPassMatch:把以.php结尾的文件请求发送到php-fpm进程,
    php-fpm至少需要知道运行的目录和URI,所以这里直接在fcgi://127.0.0.1:9000后
    指明了这两个参数,其它的参数的传递已经被mod_proxy_fcgi.so进行了封装,不需要手动指定。

11.重启httpd24服务并测试
[root@web php-5.4.26]# service httpd24 restart

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/87437

(0)
N27_jiangyefanN27_jiangyefan
上一篇 2017-09-20 00:12
下一篇 2017-09-20 14:38

相关推荐

  • 文件查找命令之locate、find简析

    文件查找命令之locate、find简析    在工作中经常会在文件系统上查找符合条件的文件,今天学习了文件查找命令,在此简析locate和find两个文件查找工具。 一、杂项知识整理 1、find的选项-user的实质是通过UID查找,如果两个用户的UID相同,其会显示两个用户的所有符合条件的文件。 2、查找时-name "*…

    Linux干货 2016-08-15
  • raid各级别特性

      简介 RAID是一个我们经常能见到的名词。但却因为很少能在实际环境中体验,所以很难对其原理 能有很清楚的认识和掌握。本文将对RAID技术进行介绍和总结,以期能尽量阐明其概念。 RAID全称为独立磁盘冗余阵列(Rdeundant Array of Independent Disks),基本思想就是把 多个相对便宜的硬盘组合起来,成为一个硬盘阵列组…

    Linux干货 2016-01-19
  • Linux系统网络属性管理

        每台计算机主机连入internet都必须给主机设定以个合法的IP地址。这些IP参数大概包括IP地址、子网掩码、网关、路由、DNS等。在Linux中,大多数命令配置网络配置都是临时生效,想要网络服务永久有效就必须写入配置文件中,所以有时候更改配置重启主机是为了让内核重读配置文件到内核中,因为配置文件属于用户空间的文件。大多数网络配置…

    Linux干货 2016-09-18
  • Memcached + MSM 实现Tomcat Session保持

    Memcached + MSM 实现Tomcat Session保持 tomcat memcached 前言 Memcached介绍 MSM介绍 实验拓扑 实验环境 实验步骤 安装配置Tomcat 安装配置Nginx负载均衡 安装配置Memcached + MSM 总结 前言 上篇文章我们实现了session sticky和session clus…

    2016-04-22
  • 第八周作业

    shell脚本简用

    Linux干货 2017-11-27
  • LVM理论及实践

    LVM综述创建LV创建PV:pvcreate DEVICES创建VG:vgcreate VG_NAME PV_DEVICES创建lv格式化:mkfs.ext4 /dev/vg0/lv0挂载LVM的扩展扩展LV:lvextend扩展后检查挂载文件夹大小,发现扩展前后没有变化这是因为硬盘的修改需要同步:resize2fs /dev/vg0/lv0假设这时候VG的…

    Linux干货 2016-09-19