马哥教育网络班21期+第12周课程练习

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

  • 建立或处理请求:接受请求或拒绝请求;

  • 接收请求:接收来自于网络的请求报文中对某资源的一次请求的过程;

  • 处理请求:对请求报文进行解析,并获取请求的资源及请求方法等相关信息;

  • 访问资源:获取请求报文中请求的资源;

  • 构建相应报文;

  • 发送响应报文;

  • 记录日志

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

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

  • worker:多线程模型,每个线程响应一个请求;一个主进程,负责生成多个子进程,每个子进程负责生成多个线程,每个线程响应一个请求。

  • event:事件驱动模型,每个线程响应n个请求;一个主进程,生成m个子进程,每个进程响应n个请求。

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

安装httpd2.4

准备开发环境

# yum groupinstall -y "Development Tools" "Server Platform Development"

解决依赖关系

apr-1.4+,apr-util-1.4+,pcre-devel

安装httpd2.4

./configure --prefix=/usr/local/apache --sysconf=/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

修改环境变量:

# vim /etc/profile.d/httpd24.sh
export PATH=/usr/local/apache/bin:$PATH
# . /etc/profile.d/httpd24.sh

修改并添加服务脚本

# chkconfig  --add httpd24

安装mariadb-5.5

创建用户及相关文件

# groupadd -r mysql
# useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql
# chown -R mysql:mysql /mydata/data

安装并初始化mariadb

# tar xf mariadb-5.5.36-linux-x86_64.tar.gz -C /usr/local
# cd /usr/local/
# ln -sv mariadb-5.5.36-linux-x86_64  mysql
# cd mysql 
# chown -R mysql:mysql ./
# scripts/mysql_install_db --user=mysql --datadir=/mydata/data
# chown -R root ./

提供配置文件

# cd /usr/local/mysql
# cp support-files/my-large.cnf  /etc/my.cnf
# vim /etc/my.cnf
datadir = /mydata/data

提供服务脚本并添加到服务列表

# cd /usr/local/mysql
# cp support-files/mysql.server  /etc/rc.d/init.d/mysqld
# chkconfig --add mysqld

安装php-5.4

解决依赖关系

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

编译安装php-5.4

# ./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

提供配置文件

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

编辑httpd配置文件

# vim /etc/httpd24/httpd.conf
AddType application/x-httpd-php  .php
DirectoryIndex  index.php  index.html

测试

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

安装WordPress-4.5

# tar xf wordpress-4.5.3-zh_CN.tar.gz -C /usr/local/apache/htdocs/
# cd /usr/local/apache/htdocs/wordpress
# cp wp-config-sample.php wp-config.php
# vim !$
define('DB_NAME', 'wpdb');

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

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

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

创建相关数据库文件

验证

验证WordPress.png

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);

基于上一题目中编译安装的httpd进行配置

禁用中心主机

# vim /etc/httpd24/httpd.conf
#DocumentRoot "/usr/local/apache/htdocs"

编辑主配置文件使其可以读取/etc/httpd24/extra/httpd-vhosts.conf

# vim /etc/httpd24/httpd.conf
Include /etc/httpd24/extra/httpd-vhosts.conf

编辑虚拟主机

# vim /etc/httpd24/extra/httpd-vhosts.conf
<VirtualHost 192.168.71.130:80>
    ServerName www1.stuX.com
    DocumentRoot "/web/vhosts/www1"
    ErrorLog "/var/log/httpd/www1.err"
    CustomLog "/var/log/httpd/www1.access" common
</VirtualHost>
<Directory "/web/vhosts/www1">
    Options none
    Require all granted
</Directory>
<VirtualHost 192.168.71.130:80>
    DocumentRoot "/web/vhosts/www2"
    ServerName www2.stuX.com
    ErrorLog "/var/log/httpd/www2.err"
    CustomLog "/var/log/httpd/www2.access" common
</VirtualHost>
<Directory "/web/vhosts/www2">
    Options none
    Require all granted
</Directory>

提供主页面文件

验证虚拟主机

[root@www extra]# curl www1.stuX.com
<h1>www1.stuX.com </h1>
[root@www extra]# curl www2.stuX.com
<h1>www2.stuX.com<h1>

基于账号实现内置status页面的访问控制

# vim /etc/httpd24/extra/httpd-vhosts.conf
<Location /server-status>
    SetHandler server-status
    AuthType Basic
    AuthName "test status"
    AuthUserFile "/etc/httpd24/.htpasswd"
    Require valid-user
</Location>
# htpasswd -c -m /etc/httpd24/.htpasswd status

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

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

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

CA自签证书

[root@junfeng CA]# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
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) []:ca.magedu.com
Email Address []:

证书请求

[root@www httpd24]# openssl req -new -key ./httpd.key -days 365 -out ./httpd.csr
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

修改主配置文件,加载相关模块

# vim /etc/httpd24/httpd.conf
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule ssl_module modules/mod_ssl.so
Include /etc/httpd24/extra/httpd-ssl.conf

修改http-ssl.conf

# vim /etc/httpd24/extra/httpd-ssl.conf
DocumentRoot "/web/vhosts/www2"
SSLCertificateFile "/etc/httpd24/httpd.crt"
SSLCertificateKeyFile "/etc/httpd24/httpd.key"

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

模块形式在上述过程即已实现

# vim /etc/httpd24/httpd.conf
LoadModule php5_module        modules/libphp5.so

以fpm工作为独立的进程

apache、MySQL和php的编译

apache和MySQL的编译安装与上述步骤相同,而对于php来说,在编译时要指明--enable-fpm,并且与之前不同的是要去掉--with-apxs2。

配置php-fpm

为php-fpm提供服务脚本,并添加至服务列表
# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
# chmod +x /etc/rc.d/init.d/php-fpm
# chkconfig --add php-fpm 
为php-fpm提供配置文件
# cp /PATH/TO/PHP_DIR/etc/php-fpm.conf.default /PATH/TO/PHP_DIR/etc/php-fpm.conf
根据主机参数配置相关php-fpm选项,并启用pid文件
# vim php-fpm.conf
pid=/PATH/TO/PID_OF_PHP-FPM
启动php-fpm
# service php-fpm start

原创文章,作者:Jeason,如若转载,请注明出处:http://www.178linux.com/52448

(0)
JeasonJeason
上一篇 2016-10-24 09:10
下一篇 2016-10-24 09:10

相关推荐

  • 网络管理

    vpn:virtual private network RJ-45:类似电话接头  电话线接头为RJ-11 hub:集线器,多端口中继器,不具有记忆功能 switch:交换机 router:路由器 物理拓扑分类:总线,环装,星型 OSI:国际网络标准,实际采用为TCP/IP OSI七层模型:应用层:application   表…

    Linux干货 2016-09-05
  • Web缓存核心技术点需知

    Edit Web缓存核心技术点需知 5.1 HTTP首部控制 5.2 基于新鲜度检测机制: 2.1 特征1:时间局部性 2.2 特征2:空间局部性 2.3 缓存的优点 2.4 哪类数据应该被缓存 2.5 哪类数据可缓存但不应该被缓存 2.6 缓存命中率决定缓存有效性 2.7 缓存数据生命周期 2.8 缓存处理步骤 2.9 缓存和普通数据读取的区别 1. 完整…

    Linux干货 2016-11-14
  • 网络基础

    什么是计算机网络? 是指将地理位置不同的具有独立功能的多台计算机及外部设备,借助于某种网络介质连接起来,实现资源共享和信息传递的计算机系统 计算机网络的特点? 1、能实现数据信息的快速传输和集中处理 2、可共享计算机系统资源 3、提高了计算机的可靠性及可用性 4、能均衡负载互相协作 常见的网络应用程序 Web 浏览器(Chrome、IE、Firef…

    Linux干货 2016-09-09
  • javascript快速入门

    标识符多了一个美元符号python中只有字母和下划线和数字,数字不能开头数据类型有number(整形和浮点型),boolean,string,null,undefined(声明未赋值),symbol(新引入),object类型(基本类型和特殊类型外的其他类型) 引入一个变量要先申明,var a,let b常量类型,声明时定义,python中不存在const …

    Linux干货 2018-01-15
  • 设计模式 ( 十六 ) 观察者模式Observer(对象行为型)

    1.概述 一些面向对象的编程方式,提供了一种构建对象间复杂网络互连的能力。当对象们连接在一起时,它们就可以相互提供服务和信息。 通常来说,当某个对象的状态发生改变时,你仍然需要对象之间能互相通信。但是出于各种原因,你也许并不愿意因为代码环境的改变而对代码做大的修改。也许,你只想根据你的具体应用环境而改进通信代码。或者,你只想简单的重新构造通信代码来避免类和类…

    Linux干货 2015-07-24
  • 搜索引擎-处理查询

     我们从用户的角度来看,用户不关心什么索引结构是倒排还是签名文件,也不需要知道相关排序算法。用户提交了查询,就需要获取满意的搜索结果。这个搜索结果就是搜索引擎是否提供有效的服务。 1.查询流程 查询流程图: 1)用户提交查询 2)分析查询      查询预处理:    …

    Linux干货 2015-12-10

评论列表(1条)

  • 马哥教育
    马哥教育 2016-10-24 23:00

    1、排版很好,内容很完整。
    2、请继续加油