第十二周作业

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

    1)建立或处理连接:接收请求或拒绝请求;

    2)接收请求:接收来自于网络的请求报文中对某资源的一次请求的过程;接收请求的方式通常是并发访问响应模型;

    3)处理请求:对请求报文进行解析,并获取请求的资源及请求方法等相关信息,解析后的报文信息首部称为元数据;

    4)构建响应报文:根据用户请求的资源MIME类型以及URL重定向进行报文响应;

    5)发送响应报文;

    6)记录日志信息。

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

    1)prefork:多进程模型,每个进程响应一个请求;一个主进程负责生成n个子进程,子进程也成为工作进程,每个子进程处理一个用户请求;即便没有用户请求,也会预先生成多个空闲进程,随时等待请求到达;最大不会超过1024个;

    优点:成熟稳定,兼容所有新老模块。
    缺点:一个进程相对占用更多的系统资源,消耗更多的内存。而且,它并不擅长处理高并发请求,理论上不会超过1024个,在大并发场景下,它会将请求放进队列中,一直等到有可用进程,请求才会被处理。
    2)worker:多线程模型,每个线程响应一个请求;一个主进程生成多个子进程,每个子进程负责生成多个线程,每个线程响应一个请求;如有m个进程,每个进程有n个线程,则可处理的请求个数为:m*n

    优点:占据更少的内存,高并发下表现更优秀。

    缺点:(1)线程的管理要比进程复杂得多。线程之间很多资源是共享的,所以它没有prefork模型那种一个进程服务一个服务请求那么安全稳定;

             (2)worker是一个线程服务一个请求,在请求没有完成之前,该线程是与它服务的请求绑定的。worker需要大量的创建进程生成线程,销毁线程,杀死进程的过程;

             (3)由于linux不是真线程的操作系统,所以worker在linux上的表现与prefork相比并没有明显优势。

    3)event:事件驱动模型,是基于信号驱动I/O 通知机制,每个线程响应n个请求;

    优点:并发能力强,并且解决了worker模型下由于线程与请求绑定而导致的线程资源浪费的问题;

    缺点:2.4之前的版本仅为测试用,只有2.4之后event才可在生产使用。

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

    二进制方式安装Mariadb

    1)创建mysql用户

]# useradd -r mysql

     2)二进制方式安装mariadb

]# tar xf mariadb-5.5.46-linux-x86_64.tar.gz -C /usr/local

     3)创建链接并更改安装目录权限

]# cd /usr/local
]# ln -sv mariadb-5.5.46-linux-x86_64/ mysql
]# cd mysql
]# chown -R root.mysql ./*

     4)创建数据文件目录并赋权

]# mkdir -p /mydata/data
]# chown -R mysql.mysql /mydata/data/

     5)创建mariadb配置文件

]# cd /usr/local/mysql/support-files
]# cp my-large.cnf /etc/my.cnf

     6)在配置文件中添加参数:

]# vim /etc/my.cnf
[mysqld]
.
.
.
datadir = /mydata/data
innodb_file_per_table = ON
skip_name_resolve = ON

     7)创建启动脚本

]# cd /usr/local/mysql/support-files
]# cp mysql.server /etc/rc.d/init.d/mysqld
]# chmod +x /etc/rc.d/init.d/mysqld 

     8)初始化数据库

]# cd /usr/local/mysql/
]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data

     9)启动mariadb

]# /etc/init.d/mysqld start
Starting MySQL.. SUCCESS!

    编译安装Apache:

    1)安装依赖包

]# yum groupinstall "Development Tools" "Server Platform Development" -y
]# yum install pcre-devel apr-devel apr-util-devel openssl-devel -y

    2)编译安装apache

]# tar xf httpd-2.4.9.tar.bz2
]# cd httpd-2.4.9
]# ./configure --prefix=/usr/local/apache -sysconfdir=/etc/httpd \
--enable-so --enable-ssl --enable-rewrite --with-zlib --with-pcre \
--with-apr=/usr --with-apr-util=/usr --enable-modules=most \
--enable-mpms-shared=all --with-mpm=prefork
]# make && make install

    3)修改环境变量,便于httpd相关命令的使用

]# touch /etc/profile.d/httpd.sh
]# echo "export PATH=/usr/local/apache/bin:$PATH" >>/etc/profile.d/httpd.sh
]# source /etc/profile

     4)启动httpd服务

]# apachectl start
]# ps -ef|grep httpd
root      35159      1  0 15:59 ?        00:00:00 /usr/local/apache/bin/httpd -k start
daemon    35160  35159  0 15:59 ?        00:00:00 /usr/local/apache/bin/httpd -k start
daemon    35161  35159  0 15:59 ?        00:00:00 /usr/local/apache/bin/httpd -k start
daemon    35162  35159  0 15:59 ?        00:00:00 /usr/local/apache/bin/httpd -k start
daemon    35163  35159  0 15:59 ?        00:00:00 /usr/local/apache/bin/httpd -k start
daemon    35164  35159  0 15:59 ?        00:00:00 /usr/local/apache/bin/httpd -k start
root      35166   6129  0 15:59 pts/0    00:00:00 grep --color=auto httpd

     编译安装php:

    1)安装依赖包

]# yum install libxml2-devel libmcrypt-devel bzip2-devel -y

     2)编译安装php

]# tar xf php-5.4.26.tar.bz2
]# cd 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-png-dir --with-jpeg-dir --with-freetype-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
]# make && make install

     3)生成配置文件

]# cp php.ini-production /etc/php.ini

     4)修改httpd配置文件,使其能够支持php

]# vim /etc/httpd/httpd.conf
.
.
.
<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

AddType application/x-httpd-php .php

     5)测试httpd与php

]# vim /usr/local/apache/htdocs/index.php
<?php
        phpinfo()
?>

第十二周作业

    6)测试php与mariadb的联动

]# vim /usr/local/apache/htdocs/index.php
<?php
        $conn = mysql_connect('127.0.0.1','root','');
        if ($conn)
                echo "OK";
        else
                echo "Failure";
?>

第十二周作业

    测试成功,开始安装WordPress

    1)数据库中创建用户

MariaDB [(none)]> create database wpdb;
MariaDB [(none)]> grant all on wpdb.* to wpuser@'192.168.0.%' identified by 'magedu';
MariaDB [(none)]> flush privileges;

     2)将wordpress安装包解压到主页目录下

]# cd /usr/local/apache/htdocs
]# unzip wordpress-3.3.1-zh_CN.zip

     3)修改wordpress配置文件

]# cd wordpress
]# cp wp-config-sample.php wp-config.php
]# vim wp-config.php
define('DB_NAME', 'wpdb');

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

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

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

    4)通过页面进行安装

第十二周作业

    5)安装完成,打开BLOG

第十二周作业

4、建立httpd服务器(基于编译的方式进行),要求:

     提供两个基于名称的虚拟主机:
    (a)www1.stuX.com,页面文件目录为/web/vhosts/www1;错误日志为/var/log/httpd/www1.err,访问日志为/var/log/httpd/www1.access
    (b)www2.stuX.com,页面文件目录为/web/vhosts/www2;错误日志为/var/log/httpd/www2.err,访问日志为/var/log/httpd/www2.access;
    (c)为两个虚拟主机建立各自的主页文件index.html,内容分别为其对应的主机名;

    (d)通过www1.stuX.com/server-status输出httpd工作状态相关信息,且只允许提供帐号密码才能访问(status:status);

    1)创建主页目录,日志目录和主页文件

]# mkdir -p /web/vhosts/{www1,www2}
]# mkdir -p /var/log/httpd
]# echo "www1.stuX.com" >/web/vhosts/www1/index.html
]# echo "www2.stuX.com" >/web/vhosts/www2/index.html

     2)创建认证用户

]# htpasswd -c -m /etc/httpd/.htpasswd status

     3)创建虚拟主机配置文件

]# cd /etc/httpd/extra/
]# vim vhosts.conf
<VirtualHost 192.168.0.111:80>
    DocumentRoot "/web/vhosts/www1"                      #主页目录
    <Directory "/web/vhosts/www1">
        Options None
        AllowOverride None
        Require all granted
    </Directory>

    <Location /server-status>                            
        SetHandler server-status
        AuthType Basic                                   #认证模块
        AuthName "Admin Realm, show something"
        AuthUserFile "/etc/httpd/.htpasswd"              #指定认证文件
        Require user status                              #指定认证用户
    </Location>
    ServerName www1.stuX.com
    ErrorLog "/var/log/httpd/www1.err"                   #错误日志文件        
    CustomLog "/var/log/httpd/www1.access" common        #登录日志文件
</VirtualHost>

<VirtualHost 192.168.0.111:80>
    DocumentRoot "/web/vhosts/www2"
    <Directory "/web/vhosts/www2">
        Options None
        AllowOverride None
        Require all granted
    </Directory>
    ServerName www2.stuX.com
    ErrorLog "/var/log/httpd/www2.err"
    CustomLog "/var/log/httpd/www2.access" common
</VirtualHost>

     4)修改httpd主配置文件,使自定义的虚拟机配置文件生效

]# cd /etc/httpd/
]# vim httpd.conf
Include /etc/httpd/extra/vhosts.conf

     5)重启httpd服务,使配置生效

]# apachectl restart

     6)修改客户端的hosts文件

192.168.0.111 www1.stuX.com   www2.stuX.com

     7)客户端使用浏览器访问页面进行测试

第十二周作业

第十二周作业

第十二周作业

5、为第4题中的第2个虚拟主机提供https服务,使得用户可以通过https安全的访问此web站点;

   (1)要求使用证书认证,证书中要求使用的国家(CN)、州(HA)、城市(ZZ)和组织(MageEdu);

   (2)设置部门为Ops,主机名为www2.stuX.com,邮件为admin@stuX.com;

    1)CA服务器端生成私钥

]# cd /etc/pki/CA/
]# (umask 077;openssl genrsa -out private/cakey.pem 2048)
Generating RSA private key, 2048 bit long modulus
.........+++
.....................................................................+++
e is 65537 (0x10001)

     2)CA服务端生成自签证书

]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:HA
Locality Name (eg, city) [Default City]:ZZ
Organization Name (eg, company) [Default Company Ltd]:MagEdu 
Organizational Unit Name (eg, section) []:ops
Common Name (eg, your name or your server's hostname) []:www2.stuX.com
Email Address []:admin@stuX.com
]# touch serial index.txt
]# echo 01 >serial 

     

    3)web服务器端生成私钥

]# cd /etc/httpd/
]# mkdir ssl
]# cd ssl/
]# (umask 077;openssl genrsa -out httpd.key 1024)
Generating RSA private key, 1024 bit long modulus
...............++++++
..++++++
e is 65537 (0x10001)

    4)web服务器端生成证书签署请求

]# openssl req -new -key httpd.key -out httpd.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:HA
Locality Name (eg, city) [Default City]:ZZ
Organization Name (eg, company) [Default Company Ltd]:MagEdu
Organizational Unit Name (eg, section) []:ops
Common Name (eg, your name or your server's hostname) []:www2.stuX.com
Email Address []:admin@stuX.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

     5)web服务器将证书签署请求发送给CA服务器

]# scp httpd.csr root@192.168.0.120:/tmp/

     6)CA服务器签署证书

]# openssl ca -in /tmp/httpd.csr -out certs/httpd.crt

     7)CA服务器将证书发送给web服务器端

]# scp certs/httpd.crt root@192.168.0.111:/etc/httpd/ssl

     8)web服务器安装mod_ssl模块

]# yum install mod_ssl -y

     9)编辑ssl模块配置文件

]# vim /etc/httpd/conf.d/ssl.conf
DocumentRoot "/web/vhosts/www2"
ServerName www2.stuX.com
SSLCertificateFile /etc/httpd/ssl/httpd.crt
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key

     10)重启httpd服务

]# apachectl restart

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

fpm方式:

    1)安装httpd,php-fpm,mariadb,php-mysql

]# yum install php-fpm httpd mariadb-server php-mysql -y

     2)创建fcgi配置文件

]# cd /etc/httpd/conf.d/
]# vim fcgi.conf
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1

     3)修改httpd主配置文件,指定首页默认文件为index.php

]# vim /etc/httpd/conf/httpd.conf
<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

     4)创建php测试页面

]# cd /var/www/html/
]# vim index.php
<?php
    phpinfo()
?>

     5)启动http和php-fpm服务

]# systemctl reload httpd.service
]# systemctl start php-fpm.service

php以模块方式来支持httpd的方式在上面第3题已经提供了部署过程,这里不再赘述。

原创文章,作者:N26-西安-方老喵,如若转载,请注明出处:http://www.178linux.com/71598

(1)
N26-西安-方老喵N26-西安-方老喵
上一篇 2017-03-27
下一篇 2017-03-27

相关推荐

  • 开机启动流程

    grub and boot Centos5,6的开机启动流程 grub Centos7的开机启动流程 Centos5,6的开机启动流程 initrd / initramfs 一般存储在/boot目录下,以.img为结尾的文件,是一个小型的根目录系统的映像文件,里面存放了各类系统必须的模组,为了解决内核在加载完成之后没有模组无法访问磁盘加载rootfs的问题。…

    Linux干货 2016-04-11
  • 一个“蝇量级” C 语言协程库

    协程(coroutine)顾名思义就是“协作的例程”(co-operative routines)。跟具有操作系统概念的线程不一样,协程是在用户空间利用程序语言的语法语义就能实现逻辑上类似多任务的编程技巧。实际上协程的概念比线程还要早,按照 Knuth 的说法“子例程是协程的特例”,一个子例程就是一次子函数调用,那么实际上协程就是类函数一样的程序组件,你可以…

    Linux干货 2016-08-15
  • 安装包管理

       软件包管理 软件的运行和编译 ABI 由于window和linux不兼容 linux是ELF window 是PE 对应的内核解析方式不同,可以用虚拟化 API 只程序与程序的公用的接口,相互调用方式 程序源代码 –>预处理–>编译–>汇编–>链接 预处理只会引…

    Linux干货 2017-04-24
  • 文件系统挂载

    挂载: 将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为 卸载: 为解除此关联关系的过程 把设备关联挂载点:mount Point mount 卸载时:可使用设备,也可以使用挂载点 umount mount   umount命令都是临时生效,机器重启后失效 挂载点下原有文件在挂载完成…

    Linux干货 2017-04-30
  • Linux三剑客awk命令

    1 .awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。 awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。 awk其名称得自…

    2017-09-08
  • 2016-08-18作业

    斐波那契数列 fibonacciSequenceFun.sh #!/bin/bash function fibonacci_sequence {   if [ $1 -eq 0 ]; then     echo 0      elif [ $1 -eq 1 ]; then    …

    Linux干货 2016-09-19

评论列表(1条)

  • 马哥教育
    马哥教育 2017-03-30 14:18

    非常非常棒,再接再励。