linux第九周微职位

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

HTTP通讯机制是在一次完整的HTTP通讯过程当中,Web浏览器与Web服务器之间将完成下列7个步骤:html

  1. 创建TCP链接mysql

    在HTTP工做开始以前,Web浏览器首先要经过网络与Web服务器创建链接,该链接是经过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,所以Internet又被称做是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议创建以后才能进行更高层协议的链接,所以,首先要创建TCP链接,通常TCP链接的端口号是80;nginx

  2. Web浏览器向Web服务器发送请求命令 c++

    一旦创建了TCP链接,Web浏览器就会向Web服务器发送请求命令。例如:GET/sample/hello.jsp HTTP/1.1;web

  3. Web浏览器发送请求头信息 正则表达式

    浏览器发送其请求命令以后,还要以头信息的形式向Web服务器发送一些别的信息,以后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。sql

  4. Web服务器应答 数据库

    客户机向服务器发出请求后,服务器会客户机回送应答, HTTP/1.1 200 OK ,应答的第一部分是协议的版本号和应答状态码;
    apache

  5. Web服务器发送应答头信息 

    正如客户端会随同请求发送关于自身的信息同样,服务器也会随同应答向用户发送关于它本身的数据及被请求的文档;

  6. Web服务器向浏览器发送数据

    Web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据;

  7. Web服务器关闭TCP链接 

      通常状况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP链接,而后若是浏览器或者       服务器在其头信息加入了这行代码:Connection:keep-alive;

      TCP链接在发送后将仍然保持打开状态,因而,浏览器能够继续经过相同的链接发送请求。保持链接       节省了为每一个请求创建新链接所需的时间,还节约了网络带宽。

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

Apache有两种工做模型,一种是基于进程的preforker模型,一种是基于线程和进程混合的Worker模型

   1)prefork模式

prefork模式能够算是很古老可是很是稳定的Apache模式。Apache在启动之初,就预先fork一些子进程,而后等待请求进来。之因此这样作,是为了减小频繁建立和销毁进程的开销。每一个子进程只有一个线程,在一个时间点内,只能处理一个请求;

优势:成熟稳定,兼容全部新老模块。同时,不须要担忧线程安全的问题。(咱们经常使用的mod_php,PHP的拓展不须要支持线程安全);

缺点:一个进程相对占用更多的系统资源,消耗更多的内存。并且,它并不擅长处理高并发请求,在这种场景下,它会将请求放进队列中,一直等到有可用进程,请求才会被处理。

   2)worker模式

worker模式比起上一个,是使用了多进程和多线程的混合模式。它也预先fork了几个子进程(数量比较少),而后每一个子进程建立一些线程,同时包括一个监听线程。每一个请求过来,会被分配到1个线程来服务。线程比起进程会更轻量,由于线程一般会共享父进程的内存空间,所以,内存的占用会减小一些。在高并发的场景下,由于比起prefork有更多的可用线程,表现会更优秀一些。

有些人会以为奇怪,那么这里为何不彻底使用多线程呢,还要引入多进程?

缘由主要是须要考虑稳定性,若是一个线程异常挂了,会致使父进程连同其余正常的子线程都挂了(它们都是同一个进程下的)。为了防止这场异常场景出现,就不能所有使用线程,使用多个进程再加多线程,若是某个线程出现异常,受影响的只是Apache的一部分服务,而不是整个服务。

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

缺点:必须考虑线程安全的问题,由于多个子线程是共享父进程的内存地址的。若是使用keep-alive的长链接方式,某个线程会一直被占据,也许中间几乎没有请求,须要一直等待到超时才会被释放。若是过多的线程,被这样占据,也会致使在高并发场景下的无服务线程可用。

    3)EVENT模式

这个是Apache中最新的模式,在如今版本里的已是稳定可用的模式。它和worker模式很像,最大的区别在于,它解决了keep-alive场景下,长期被占用的线程的资源浪费问题(某些线程由于被keep-alive,空挂在哪里等待,中间几乎没有请求过来,甚至等到超时)。event

MPM中,会有一个专门的线程来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又容许它释放。这样加强了高并发场景下的请求处理能力。


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

一、编译安装httpd-2.4.9

1)编译安装apr-1.5.0.tar.bz2

]# tar xvjf apr-1.5.0.tar.bz2

]# cd apr-1.5.0

]# ./configure --prefix=/usr/local/apr

]# make && make install

2)编译安装apr-util-1.5.2.tar.bz2

]# tar xjf apr-util-1.5.2.tar.bz2

]# cd apr-util-1.5.2

]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/

]# make && make install

3)编译安装pcre-8.38.tar.gz

]# tar xzf pcre-8.38.tar.gz

]# cd pcre-8.38

]# ./configure --prefix=/usr/local/pcre

]# make && make install

4)建立系统组和用户

#] groupadd -r apache

#] useradd -r -g apache apache

编译安装httpd

]# tar xjf httpd-2.4.9.tar.bz2

]# cd httpd-2.4.9

]# ./configure --prefix=/usr/local/apache \

> --sysconfdir=/etc/httpd \    # 指定配置文件路径

> --enable-so \    # 支持动态加载DSO模块

> --enable-ssl \    # 开启SSL功能,支持https

> --enable-cgi \    # 启用与外部应用程序的cgi接口功能

> --enable-rewrite \    # 支持url重写

> --with-zlib \    # 支持web页面压缩传送

> --with-pcre=/usr/local/pcre \    # 加强型的正则表达式分析工具,nginx等程序依赖,依赖于pcre-devel开发包

> --with-apr=/usr/local/apr \    # 指定高版本apr程序路径,不指定则会自动指定系统默认版本

> --with-apr-util=/usr/local/apr-util \    # 指定apr-util路径

> --enable-mpms-shared=all \    # 支持动态装卸载全部mpm

> --with-mpm=prefork \    # mpm默认使用prefork

> --enable-modules=all    # all为安装全部模块,most为安装经常使用模块(安装不表明启用)

]# make && make install


二、编译安装mysql

1)添加组  ,添加用户

[root@www mysql]# groupadd -r -g 306 mysql

[root@www mysql]# useradd -g 306 -r -u 306 mysql

[root@www mysql]# chown -R mysql.mysql /usr/local/mysql/*     #更改mysql目录下的属组和属主

建立用户存储数据库的目录mkdir /mydata/data -pv

更改目录的属组和属主 ]# chown -R mysql.mysql /mydata/data/

2)解压]# tar xzf mysql-5.6.13.tar.gz

3)安装编译代码所须要的包]# yum -y install make gcc-c++ cmake bison-devel ncurses-devel libaio        

4)编译  ]#  cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql  \              [MySQL安装的根目录]

-DMYSQL_DATADIR=/mydata/mysql/data  \                       [MySQL数据库文件存放目录]

-DSYSCONFDIR=/etc \                                                          [MySQL配置文件所在目录]

-DMYSQL_USER=mysql \                                                      [MySQL用户名]      

-DWITH_MYISAM_STORAGE_ENGINE=1 \                            [MySQL的数据库引擎]

-DWITH_INNOBASE_STORAGE_ENGINE=1 \                         [MySQL的数据库引擎]

-DWITH_ARCHIVE_STORAGE_ENGINE=1 \                            [MySQL的数据库引擎]

-DWITH_MEMORY_STORAGE_ENGINE=1 \                           [MySQL的数据库引擎]

-DWITH_READLINE=1 \                                                          [MySQL的readline library]

-DMYSQL_UNIX_ADDR=/var/run/mysql/mysql.sock \           [MySQL的通信目录]

5)而后    #] make && make install进行安装

三、编译安装php

1)#] tar xjf php-5.4.26.tar.bz2   解压

2)配置 #] cd php-5.4.26

[root@www php-5.4.26]# ./configure --enable-opcache --prefix=/etc/local/php \

> --with-config-file-path=/usr/local/php/etc \

> --with-mysql=/usr/local/mysql \

> --with-mysqli=/usr/local/mysql/bin/mysql_config \

> --enable-mbstring=all \

> --with-pdo-mysql \

> --enable-sockets \

> --enable-mbstring \

> --enable-fpm \

> --with-curl \

> --with-iconv-dir=/usr/local \

> --with-freetype-dir \

> --with-jpeg-dir \

> --with-png-dir \

> --with-zlib \

> --enable-xml \

> --with-gd \

> --with-libxml-dir=/usr \

> --with-openssl \

> --with-iconv

我这里编译报错libxml2没有找到,可使用yum install libxml2-devel -y 便可解决,

通常报错某某包没有找到,就使用yum install xxx.devel -y安装便可(xxx表明提示没有安装的)

wKiom1miQ7Wx2XGwAAAnJnR5BYI844.png

如上图提示错误:解决办法以下

centos32位系统:

yum install libjpeg libpng freetype libjpeg-devel libpng-devel freetype-devel -y
如果64位系统
解决方法:

yum install libjpeg.x86_64 libpng.x86_64 freetype.x86_64 libjpeg-devel.x86_64 libpng-devel.x86_64 freetype-devel.x86_64 -y

执行make && make install 便可


#] scripts/mysql_install_db--user=mysql--datadir=/mydata/data/(初始化mysql)

chown -R root /usr/local/mysql/*(万一有人攻破mysql进程,则不安全,因此改成root用户)

但要注意实际data目录要mysql.mysql。如今data目录咱们设为/mydata/data,因此此目录里的所属用户为root也没事儿,不影响。ls/etc/init.d/(无mysqld)

cp support-files/mysql.server /etc/init.d/mysqld

ll/etc/init.d/mysqld

chkconfig--addmysqld(为系统增长mysql服务)chkconfig--listmysqld(看看默认是否会启用,3,4,5是“on”状态便可)


下面添加mysql配置文件:

安装包给咱们提供的也有配置文件,也在support-files下

mv/etc/my.cnf/etc/my.cnf.bak将原来的配置文件重命名(让它不起做用)

service mysqld start

netstat-tnlp

发现3306已启动

ls/usr/local/mysql/bin/发现客户端已安装

vim/etc/profile.d/mysql.sh

写入:export PATH=$PATH:/usr/local/mysql/bin

注销root从新登陆

mysql(便可进入mysql)\q退出mysql。

为保证在必定条件能正确使用mysql库文件,就要将mysql库文件输出。将mysql库文件输出的方法以下:

vim /etc/ld.so.conf.d/mysql.conf添加以下内容

/usr/local/mysql/lib

ldconfig -v使其生效

同时应将mysql的include也在/usr/include/下作个连接,确保完美运行。方法以下:

ln -sv /usr/local/mysql/include /usr/include/mysql

ls /usr/include/mysql/


补充个小知识:

CentOS系统中那么忘记了mysql的登陆密码,怎么办?使用安全模式吧.

首先须要在CentOS系统中中止mysql:

#service mysqld stop
#/usr/local/mysql/bin/mysqld_safe --skip-grant-tables &

下面在CentOS系统继续输入:
msql> mysql -u root -p

下面的密码直接键入回车便可.

下面既是在CentOS系统从新设置密码: 
mysql> update mysql.user set password=password("新密码") where user="root";

刷新权限 
mysql>flush privileges;

退出 
mysql>exit;

启动mysql,继续以往的登陆动做便可. 
# /rc.d/init.d/mysqld start 

重启若是提示:

2017-08-27T14:33:49.450752Z 0 [ERROR] InnoDB: Unable to lock ./ibdata1, error: 11

须要使用 ]# ps aux |grep mysql* 查看有没有mysqld_safe相关的进程,有就使用kill -9 进程号

# mysql -u root -p

进去mysql里面若是提示密码简单,那就在myslq命令行从新设置下密码>SET PASSWORD=PASSWORD('123456');便可



四、创建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)编译安装apr-1.5.0.tar.bz2

]# tar xvjf apr-1.5.0.tar.bz2

]# cd apr-1.5.0

]# ./configure --prefix=/usr/local/apr

]# make && make install

2)编译安装apr-util-1.5.2.tar.bz2

]# tar xjf apr-util-1.5.2.tar.bz2

]# cd apr-util-1.5.2

]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/

]# make && make install

3)编译安装pcre-8.38.tar.gz

]# tar xzf pcre-8.38.tar.gz

]# cd pcre-8.38

]# ./configure --prefix=/usr/local/pcre

]# make && make install

4)建立系统组和用户

#] groupadd -r apache

#] useradd -r -g apache apache

编译安装httpd

]# tar xjf httpd-2.4.9.tar.bz2

]# cd httpd-2.4.9

]# ./configure --prefix=/usr/local/apache \

> --sysconfdir=/etc/httpd \    # 指定配置文件路径

> --enable-so \    # 支持动态加载DSO模块

> --enable-ssl \    # 开启SSL功能,支持https

> --enable-cgi \    # 启用与外部应用程序的cgi接口功能

> --enable-rewrite \    # 支持url重写

> --with-zlib \    # 支持web页面压缩传送

> --with-pcre=/usr/local/pcre \    # 加强型的正则表达式分析工具,nginx等程序依赖,依赖于pcre-devel开发包

> --with-apr=/usr/local/apr \    # 指定高版本apr程序路径,不指定则会自动指定系统默认版本

> --with-apr-util=/usr/local/apr-util \    # 指定apr-util路径

> --enable-mpms-shared=all \    # 支持动态装卸载全部mpm

> --with-mpm=prefork \    # mpm默认使用prefork

> --enable-modules=all    # all为安装全部模块,most为安装经常使用模块(安装不表明启用)

]# make && make install

5)配置虚拟主机

咱们须要对www1.stuX.com的状态信息网页进行用户访问控制:

建立虚拟用户]# htpasswd -c -m /etc/httpd/conf.d/.htpasswd status(status用户)

查看编译有没有状态信息模块:

]# ls /usr/local/apache/modules/ |grep mod_status

咱们须要在网页查看apache的状态信息,apache状态信息模块是默认开启的

]# vim /etc/httpd24/httpd.conf

LoadModule status_modulemodules/mod_status.so

wKiom1miinGAU7kMAABS-XFZr_k802.jpg

或者在以下虚拟机配置中添加也能够

wKioL1miffjwxa-xAABZKWcD_6E643.jpg

6)修改配置文件vim /etc/httpd/httpd.conf 

wKiom1mif3ew2cgmAAA_Xw6mEz0498.jpg

7)配置服务,cp /usr/local/apache/bin/apachectl /etc/init.d/httpd

重启apache服务 service restart httpd

8)访问结果

wKioL1migRDiiboyAAA58c2tOdo326.jpg

wKiom1migSCgTmykAAAzd6r52uY085.jpg


安全访问


wKioL1mihe7jE2fRAABlQSyIq0U703.jpg

wKioL1mijVLwXdJWAAEYb_YhKsU785.jpg

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

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

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

一、生成一个自签署证书

1)先查看有没有安装openssl,rpm -ql openssl

2)切换到cd /etc/pki/CA     ,而后运行 (umask 0755; openssl genrsa -out private/cakey.pem 2048)

wKiom1mioVmxjHmuAACDoNyYD0s392.jpg

为CA服务器创建一个本身的签名证书

wKioL1miodTygTAjAABlqRUQkiU005.jpg

在安装有apache服务的也安装个CA证书,在/etc/httpd/目录下建立ssl目录

wKioL1mio7ywHqloAACZ-Wwgj5E084.jpg而后在CA服务器上把客户端的发送过来的证书进行签名

wKiom1mipgzCQTk0AACAzgfT4K0898.jpg

wKioL1mipx3QjjCzAABshDFjDcU399.jpg如上图中,签名后CA目录发生变化,其中serial内容由01变成02


wKiom1miqHbivP2GAABKrUClcME953.jpgwKiom1miqVHxVd7cAACCM40u0Dk334.jpgwKiom1miqf7T14OsAAAYJlqKiPs922.jpg

添加httpd中ssl配置

]# vim /etc/httpd/conf.d/httpd_ssl.conf         #编辑ssl配置文件

LoadModule ssl_module modules/mod_ssl.so        #添加须要加载的模块

LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

ServerName www2.stuX.com

DocumentRoot "/vhosts/www2.stuX.com"

<Directory "/vhosts/www2.stuX.com">

    <RequireAll>

        Require all granted

    </RequireAll>

</Directory>

SSLCertificateFile "/etc/httpd/ssl/httpd.crt"        #定义证书文件路径

SSLCertificateKeyFile /etc/httpd/ssl/httpd.key        #定义证书文件私钥


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

1.编译安装php

1)#] tar xjf php-5.4.26.tar.bz2   解压

2)配置 #] cd php-5.4.26

[root@www php-5.4.26]# ./configure --enable-opcache --prefix=/etc/local/php \

> --with-config-file-path=/usr/local/php/etc \

> --with-mysql=/usr/local/mysql \

> --with-mysqli=/usr/local/mysql/bin/mysql_config \

> --enable-mbstring=all \

> --with-pdo-mysql \

> --enable-sockets \

> --enable-mbstring \

> --enable-fpm \

> --with-curl \

> --with-iconv-dir=/usr/local \

> --with-freetype-dir \

> --with-jpeg-dir \

> --with-png-dir \

> --with-zlib \

> --enable-xml \

> --with-gd \

> --with-libxml-dir=/usr \

> --with-openssl \

> --with-iconv

我这里编译报错libxml2没有找到,可使用yum install libxml2-devel -y 便可解决,

通常报错某某包没有找到,就使用yum install xxx.devel -y安装便可(xxx表明提示没有安装的)

]# make && make install


[root@localhost php-5.4.26]# cp /opt/php-5.4.26/php.ini-development /etc/local/php/etc/php.ini

[root@localhost php-5.4.26]# cd /etc/local/php/etc/

[root@localhost etc]# ls

pear.conf  php-fpm.conf.default  php.ini

[root@localhost etc]# cp php-fpm.conf.default php-fpm.conf

]# vim /etc/httpd/httpd.conf    #编辑配置文件,添加下面三行使httpd支持php

DirectoryIndex index.php index.html

AddType application/x-httpd-php .php

AddType application/x-httpd-php-source .phps

wKioL1mivSKwNNJQAAAa09FKFR0155.jpg

2.php编译fpm模式

]#./configure –prefix=/usr/local/php5 –with-mysql=mysqlnd –with-openssl

 –with-mysqli=mysqlnd –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

]# make && make install

]# cp php.ini-production /etc/php.ini    #拷贝配置文件至/etc目录

]# cp /usr/local/php5/etc/php-fpm.conf.default  /usr/local/php5/etc/php-fpm.conf

]# vim /usr/local/php5/etc/php-fpm.conf

pid = /usr/local/php5/var/run/php-fpm.pid    #取消pid选项的注释

]# cp init.d.php-fpm /etc/rc.d/init.d/php-fp    #添加服务脚本

]# chmod +x /etc/rc.d/init.d/php-fpm

]# chkconfig –add php-fpm

]# service php-fpm start    #启动php-fpm

]# vim /etc/httpd/httpd.conf 

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

ProxyRequests Off                        #添加php文件的访问经过fpm

ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/usr/local/apache24/htdocs/$1

相关文章
相关标签/搜索