N26-博客作業-week12

1、請描述一次完整的http請求處理過程;

(1) 建立或處理連接:接收請求或拒絕請求;
(2) 接收請求:接收來自于網絡上的主機請求報文中對某特定資源的一次請求的過程;
(3) 處理請求:對請求報文進行解析,獲取客戶端請求的資源及請求方法等相關信息;
(4) 訪問資源:獲取請求報文中請求的資源;
(5) 構建響應報文:
(6) 發送響應報文:
(7) 記錄日志:

2、httpd所支持的處理模型有哪些,他們的分別使用于哪些環境。

prefork模型:多進程模型,每個進程響應一個請求;一個主進程:負責生成n個子進程,子進程也稱為工作進程,每個子進程處理一個用戶請求;即便沒有用戶請求,也會預先生成多個空閑進程,隨時等待請求到達;子進程數最大不會超過1024個。
worker模型:多線程模型,每個線程響應一個請求;一個主進程:生成多個子進程,每個子進程負責生成多個線程,每個線程響應一個請求。m進程,n線程:最大的并發響應數是m*n。
event模型:事件驅動模型,每個線程響應n個請求;一個主進程:生成m個子進程,每個進程直接響應n個請求;最大并發響應數是m*n。

3、源碼編譯安裝LAMP環境(基于wordpress程序),并寫出詳細的安裝、配置、測試過程。

安裝開發環境
[root@localhost ~]# yum groupinstall "Development Tools" "Server Platform Development" -y

編譯安裝Apache
(1)編譯安裝apr
[root@localhost ~]# tar xf apr-1.5.2.tar.gz 
[root@localhost ~]# cd apr-1.5.2/
[root@localhost apr-1.5.2]# ./configure --prefix=/usr/local/apr
root@localhost ~]# make && make install 
(2)編譯安裝apr-util
[root@localhost ~]# tar xf apr-util-1.5.4.tar.bz2 
[root@localhost ~]# cd apr-util-1.5.4/
[root@localhost apr-util-1.5.4]# ./configure --prefix=/usr/local/apr-util 
  --with-apr=/usr/local/apr 
[root@localhost apr-util-1.5.4]# make && make install 
(3)httpd-2.4.16依賴于pcre-devel軟件包
[root@localhost ~]# yum -y install pcre-devel  openssl-devel
編譯安裝httpd-2.4.25
[root@localhost ~]# tar xf httpd-2.4.25.tar.bz2 
[root@localhost ~]# cd httpd-2.4.25/
[root@localhost httpd-2.4.25]# ./configure --prefix=/usr/local/apache24 
  --sysconfdir=/etc/httpd --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=prefork
[root@localhost ~]# make -j 4 && make install
[root@localhost ~]# vim /etc/profile.d/httpd.sh
添加
export PATH=/usr/local/apache24/bin:$PATH
[root@localhost ~]# . /etc/profile.d/httpd.sh 

配置服務腳本
[root@localhost ~]cd /etc/rc.d/init.d/
[root@localhost init.d]cp httpd httpd24
vim httpd24
apachectl=/usr/local/apache24/bin/apachectl
httpd=${HTTPD-/usr/local/apache24/bin/httpd}
pidfile=${PIDFILE-/usr/local/apache24/logs/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd24}

chkconfig --add httpd24
chkconfig --level 2345 httpd24 on

[root@localhost ~]# service httpd24 start

編譯安裝MySQL
#添加mysql用戶
[root@localhost ~]# groupadd mysql
[root@localhost ~]# useradd -g mysql -s /sbin/nologin mysql 
#安裝mysql依賴的軟件包
[root@localhost ~]# yum -y install cmake ncurses-devel
#編譯安裝mysql 
[root@localhost ~]# tar xf mysql-5.6.26.tar.gz -C /usr/local/
[root@localhost ~]# cd /usr/local/mysql-5.6.26/
[root@localhost mysql-5.6.26]# cmake  --DCMAKE_INSTALL_PREFIX=/usr/local/mysql  
  --DMYSQL_UNIX_ADDR=/tmp/mysql.sock   --DDEFAULT_CHARSET=utf8  
  --DDEFAULT_COLLATION=utf8_general_ci  --DWITH_EXTRA_CHARSETS=all  
  --DWITH_MYISAM_STORAGE_ENGINE=1 --DWITH_INNOBASE_STORAGE_ENGINE=1  
  --DWITH_MEMORY_STORAGE_ENGINE=1  --DWITH_READLINE=1  --DENABLED_LOCAL_INFILE=1  
  --DMYSQL_DATADIR=/usr/local/mysql/data  --DMYSQL-USER=mysql
[root@localhost mysql-5.6.26]# make -j 4 && make install
[root@localhost mysql-5.6.26]# chown -R mysql:mysql /usr/local/mysql/
[root@localhost ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@localhost ~]# sed  -i 's#^basedir=#basedir=/usr/local/mysql#' /etc/init.d/mysqld
[root@localhost ~]# sed  -i 's#^datadir=#datadir=/usr/local/mysql/data#' /etc/init.d/mysqld
[root@localhost ~]# cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
[root@localhost ~]# sed -i '/^\[mysqld\]/adatadir = /usr/local/mysql/data' /etc/my.cnf
[root@localhost ~]# sed -i '/^\[mysqld\]/abasedir = /usr/local/mysql' /etc/my.cnf
[root@localhost ~]# chkconfig mysqld on
[root@localhost ~]# /usr/local/mysql/scripts/mysql_install_db --defaults-file=/etc/my.cnf
  --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/ --user=mysql
[root@localhost ~]# ln -s /usr/local/mysql/bin/* /bin/
[root@localhost ~]# service mysqld start

安裝PHP
#安裝PHP依賴的軟件包
[root@localhost ~]# yum -y install libxml2-devel
#編譯安裝PHP
[root@localhost ~]# tar xf php-5.6.13.tar.bz2 
[root@localhost ~]# cd php-5.6.13/
[root@localhost php-5.6.13]# ./configure --prefix=/usr/local/php 
  --with-mysql=/usr/local/mysql/ --with-apxs2=/usr/local/apache/bin/apxs 
  --with-config-file-path=/usr/local/php
[root@localhost php-5.6.13]# make && make install 
[root@localhost php-5.6.13]# cp php.ini-production /usr/local/php/php.ini
[root@localhost ~]# sed -i 's/index.html/index.html index.php/' /etc/httpd/httpd.conf
[root@localhost ~]#  sed -i '377a    AddType application/x-httpd-php .php' 
  /etc/httpd24/httpd.conf 
[root@localhost ~]# sed -i '378a    AddType application/x-httpd-php-source .phps' 
  /etc/httpd24/httpd.conf 
[root@localhost ~]# service httpd  restart

wordpress程序的安裝
[root@localhost ~]# wordpress-4.7.5.zip
[root@localhost ~]# unzip wordpress-4.7.5.zip
[root@localhost ~]# cp -f wordpress/ /web/vhosts/
[root@localhost htdocs]# cd /web/vhosts/wordpress
[root@localhost wordpress]# cp wp-config-sample.php wp-config.php

創建數據庫
[root@localhost ~]# mysql
mysql> CREATE DATABASE wpdb;
mysql> GRANT ALL ON wpdb.* TO wpuser@'192.168.12.%' IDENTIFIED BY 'wppass'; 
mysql> \q

[root@localhost wordpress]# vim wp-config.php
define('DB_NAME', 'wpdb');
define('DB_USER', 'wpuser');
define('DB_PASSWORD', 'wppass');

[root@localhost ~]# vim /etc/http24/httpd.conf
<VirtualHost *:80>
    ServerName www.wp.com
    DocumentRoot "/web/vhosts/wordpress"
    Errorlog "/var/log/httpd/wp.err"
    CustomLog "/var/log/httpd/wp.access" common
    <Directory "/web/vhosts/wordpress">
        Options None
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>

[root@localhost ~]# service httpd  restart
[root@localhost ~]# vim /etc/hosts
192.168.12.136 www.wp.com

在瀏覽器中輸入
www.wp.com
設置注冊用戶的用戶名和密碼,完成安裝wordPress

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
(1) apr-1.4+
    tar -xf apr-1.5.2.tar.bz2 
    cd apr-1.5.2
    ./configure  --prefix=/usr/local/apr
    make && make install
    
(2) apr-util-1.4+
    tar xf apr-util-1.5.4.tar.bz2 
    cd apr-util-1.5.4
    ./configure  --prefix=/usr/local/apr-util  --with-apr=/usr/local/apr
    make && make install
    
(3) httpd-2.4
    tar xf httpd-2.4.25.tar.bz2
    cd httpd-2.4.25
    ./configure --prefix=/usr/local/apache24 --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=prefork
    make  && make install
    
配置服務腳本
cd /etc/rc.d/init.d/
cp httpd httpd24
vim httpd24
apachectl=/usr/local/apache24/bin/apachectl
httpd=${HTTPD-/usr/local/apache24/bin/httpd}
pidfile=${PIDFILE-/usr/local/apache24/logs/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd24}

chkconfig --add httpd24
chkconfig --level 2345 httpd24 on

配置虛擬主機      
mkdir -f /web/vhosts/{www1,www2}
vim /web/vhosts/www1/index.html
<h1>www1.stux.com</h1>
vim /web/vhosts/www2/index.html
<h1>www2.stux.com</h1>
vim /etc/httpd24/httpd.conf
<VirtualHost *:80>
    ServerName www1.stux.com
    DocumentRoot "/web/vhosts/www1"
    Errorlog "/var/log/httpd/www1.err"
    CustomLog "/var/log/httpd/www1.access" common
    <Directory "/web/vhosts/www1">
        Options None
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>

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

修改host
vim /etc/hosts
192.168.12.136 www1.stux.com
192.168.12.136 www2.stux.com

配置安全域
htpasswd -c -m /etc/httpd24/.htpasswd status
password:status
vim /etc/httpd24/httpd.conf
<Location /server-status>
    SetHandler server-status
    Order allow,deny
    Allow from www1.stux.com
    AuthType Basic
    AuthName "Need Authentication!"
    AuthUserFile "/etc/httpd24/.htpasswd"
    require user status
</Location>

5、為第4題中的第2個虛擬主機提供https服務,使得用戶可以通過https安全的訪問此web站點;
   (1)要求使用證書認證,證書中要求使用的國家(CN)、州(HA)、城市(ZZ)和組織(MageEdu);
   (2)設置部門為Ops,主機名為www2.stuX.com,郵件為admin@stuX.com;

CA服務器(192.168.12.130)
cd /etc/pki/CA/
(umask 077;openssl genrsa -out private/cakey.pem 2048)
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650
證書信息輸入
touch serial index.txt
echo 01 > serial

httpd服務器(192.168.12.136)
cd /etc/httpd24
mkdir ssl
cd /etc/pki/CA/
(umask 077;openssl genrsa -out httpd.key 1024)
openssl req -new -key httpd.key -out httpd.csr
證書信息輸入
scp httpd.csr root@192.168.12.130:/tmp/

CA服務器簽署證書
openssl ca -in /tmp/http.csr -out certs/httpd.crt
scp /certs/httpd.crt root@192.168.12.136:/etc/httpd24/ssl/

httpd服務器配置
vim /etc/httpd24/httpd.conf
Listen 443
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule ssl_module modules/mod_ssl.so
<VirtualHost *:443>
    ServerName www2.stux.com
    SSLCertificateFile /etc/httpd24/ssl/httpd.crt
    SSLCertificateKeyFile /etc/pki/CA/private/httpd.key
    DocumentRoot "/web/vhosts/www2"
    Errorlog "/var/log/httpd/www2.err"
    CustomLog "/var/log/httpd/www2.access" common
    <Directory "/web/vhosts/www2">
        Options None
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>
Include /etc/httpd24/extra/httpd-ssl.conf

vim /etc/httpd24/extra/httpd-ssl.conf
DocumentRoot "/web/vhosts/www2"
ServerName www2.stux.com:443
ServerAdmin admin@stux.com
SSLCertificateFile /etc/httpd24/ssl/httpd.crt
SSLCertificateKeyFile /etc/pki/CA/private/httpd.key

httpd -t
service httpd24 restart

6、在LAMP架構中,請分別以php編譯成httpd模塊形式和php以fpm工作為獨立守護進程的方式來支持httpd,列出詳細的過程。

httpd模塊形式編譯安裝PHP
[root@localhost ~]# tar xf php-5.6.13.tar.bz2 
[root@localhost ~]# cd php-5.6.13/
#以httpd模塊方式運行,所以需要在編譯時指定apache的apxs2的目錄路徑 
  --with-apxs2=/usr/local/apache/bin/apxs 
[root@localhost php-5.6.13]# ./configure --prefix=/usr/local/php --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/lib64 --enable-xml  
  --enable-sockets --with-apxs2=/usr/local/apache/bin/apxs 
  --with-mcrypt=/usr/local/libcrympt  --with-config-file-path=/etc 
  --with-config-file-scan-dir=/etc/php.d --with-bz2  --enable-maintainer-zts
[root@localhost php-5.6.13]# make -j 4 && make install
[root@localhost php-5.6.13]# cp php.ini-production /etc/php.ini && cd
#編輯apache配置文件
[root@localhost ~]#sed -i 's/index.html/index.html index.php/' /etc/httpd/httpd.conf
[root@localhost ~]#sed -i '377a    AddType application/x-httpd-php .php' 
  /etc/httpd/httpd.conf
[root@localhost ~]#sed -i '378a    AddType application/x-httpd-php-source .phps' 
  /etc/httpd/httpd.conf
[root@localhost ~]#service httpd  restart
[root@localhost ~]#echo '<?php phpinfo();  ?>' >/usr/local/apache/htdocs/index.php
訪問http://192.168.12.130/index.php進行測試

以fpm模式運行
[root@localhost ~]# sed -i '1a/usr/local/libmcrypt/lib' /etc/ld.so.conf
[root@localhost ~]# sed -i '2a/usr/local/mysql/lib' /etc/ld.so.conf
[root@localhost ~]# yum install php-pear -y
[root@localhost ~]# ldconfig
[root@localhost ~]# echo 'ldconfig' >> /etc/rc.local
[root@localhost ~]# tar xf php-5.6.13.tar.bz2 
[root@localhost ~]# cd php-5.6.13/
#以fpm模式運行,使能fpm選項,--enable-fpm, --with-apxs2一項就不需要啟用了
[root@localhost php-5.6.13]# ./configure --prefix=/usr/local/php 
  --with-config-file-path=/usr/local/php --with-mysql=/usr/local/mysql 
  --with-mysqli=/usr/local/mysql/bin/mysql_config --with-iconv-dir --with-freetype-dir 
  --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml 
  --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem 
  --enable-inline-optimization --with-curl --enable-mbregex --enable-fpm 
  --enable-mbstring --with-gd --enable-gd-native-ttf --with-openssl --with-mhash 
  --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap 
  --with-mcrypt=/usr/local/libmcrypt
[root@localhost php-5.6.13]# make -j 4 && make install
[[root@localhost php-5.6.13]# cp php.ini-production /usr/local/php/php.ini && cd
[root@localhost php-5.6.13]# cp /usr/local/php/etc/php-fpm.conf.default 
  /usr/local/php/etc/php-fpm.conf
[root@localhost php-5.6.13]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@localhost php-5.6.13]#  chmod +x /etc/init.d/php-fpm
[root@localhost php-5.6.13]# chkconfig php-fpm on
[root@localhost php-5.6.13]# /etc/init.d/php-fpm start
Starting php-fpm  done
[root@localhost php-5.6.13]# netstat -antup | grep php-fpm
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      
  9769/php-fpm: maste 
#編輯apache配置文件
[root@localhost ~]# sed -i 's/^#LoadModule proxy_fcgi/LoadModule proxy_fcgi/' 
  /etc/httpd/httpd.conf
[root@localhost ~]# sed -i 's/^#LoadModule proxy_module/LoadModule proxy_module/' 
  /etc/httpd/httpd.conf
[root@localhost ~]#sed -i 's/index.html/index.html index.php/' /etc/httpd/httpd.conf
[root@localhost ~]#sed -i '377a    AddType application/x-httpd-php .php' 
  /etc/httpd/httpd.conf
[root@localhost ~]#sed -i '378a    AddType application/x-httpd-php-source .phps' 
  /etc/httpd/httpd.conf
[root@localhost ~]#service httpd  restart
[root@localhost ~]#echo '<?php phpinfo();  ?>' >/usr/local/apache/htdocs/index.php
訪問http://192.168.12.130/index.php進行測試 


原創文章,作者:浙江-咲,如若轉載,請注明出處:http://www.www58058.com/76797

(0)
浙江-咲浙江-咲
上一篇 2017-05-23
下一篇 2017-05-23

相關推薦

  • DNS 的搭建 子域授權及轉發(正向解析)

           dns(名稱解析服務).它的作用就是將主機名解析成ip地址的過程,同時它是一個分布式,分層次的主機名管理架構。為了我們能更好的了解與理解,實驗才是更好的。     安裝部署DNS服務: 一.首先安裝DNS服務器軟件 bind,還有其他相關的軟件包,有bind-libs(庫文件),bin…

    2017-07-31
  • linux下解壓命令大全

    .tar  解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是壓縮?。?——————————————— .gz 解壓1:gunzip FileName.gz 解壓2:gzip -d FileName.gz 壓縮:gzip FileName .tar.gz 和 .t…

    Linux干貨 2017-07-11
  • 8月4號作業

    正則表達式表示18位身份證號 egrep "\b[0-9]{17}(x|X|[0-9])\b" 正則表達式表示手機號 egrep "\b1[3,5,8,7][0-9]{9}\b" phone 正則表達式表示郵箱 grep -E "\b[[:alnum:]].*@[[:alnum:]]{2,3}.[[:alnu…

    Linux干貨 2016-08-08
  • Linux基礎–命令幫助的獲取及history歷史命令

    第一部分    Linux系統如何獲取命令幫助     1、命令類型以及簡單幫助的獲取         linux系統上,基本命令分為兩類,一類是內建命令,一類是外部命令。所謂內建命令,是指由linux內核自帶的系統命令…

    Linux干貨 2016-07-28
  • 馬哥教育網絡班18期+第10周課程練習

    博客作業10周.md—E:\Documents CentOS啟動流程 1. 加電自檢 2. 引導加載次序:BOOT Sequence 3. bootloader: 4. GRUB引導加載器 5. 進入Kernel 6. 運行init 7. 運行初始化腳本 8.啟動系統服務 9. 設置登陸終端 整體總結 習題 習題1 習題2 習題3 習題4 習題5 習題6 練…

    Linux干貨 2016-06-23
  • shell與kernel的理解

    Shell 的英文釋義是外殼,與kernel 內核名詞遙相呼應,一外一內,一殼一核。內核就像瑞士銀行的金庫,存放著客戶的黃金等眾多的(硬件)資產,閑雜人等(包括客戶)當然是嚴格禁止入內的,而作為客戶要存取金庫中的資產則需要通過專門的特定管理人員代為操作完成,并把存?。ú僮鳎┑慕Y果呈現給客戶。在Linux操作系統中,shell的職能就類似于金庫的操作人員,客戶…

    Linux干貨 2016-02-14

評論列表(1條)

  • luoweiro
    luoweiro 2017-06-26 22:56

    實驗過程很詳細,如果有關于壓測相關的性能數據就好了,比如perfork,worker模式這些對比數據,然后再結合工作機制去調整驗證,掌握的會更加扎實。

欧美性久久久久