第十二周作業

 

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

簡介?一次完整的HTTP請求過程從TCP三次握手建立連接成功后開始,客戶端按照指定的格式開始向服務端發送HTTP請求,服務端接收請求后,解析HTTP請求,處理完業務邏輯,最后返回一個HTTP的響應給客戶端,HTTP的響應內容同樣有標準的格式。無論是什么客戶端或者是什么服務端,大家只要按照HTTP的協議標準來實現的話,那么它一定是通用的

1)客戶端發起http請求階段

客戶端在與服務端TCP三次握手建立連接成功后,開始按照指定的格式開始向服務端發送HTTP請求。HTTP請求格式主要有四部分組成,分別是:請求行、請求頭、空行、消息體,每部分內容占一行

111

請求行:請求行是請求消息的第一行,由三部分組成:分別是請求方法(GET/POST/DELETE/PUT/HEAD)、請求資源的URI路徑、HTTP的版本號

請求頭:請求頭中的信息有和緩存相關的頭(Cache-Control,If-Modified-Since)、客戶端身份信息(User-Agent)等等。

消息體:請求體是客戶端發給服務端的請求數據,這部分數據并不是每個請求必須的。

2)服務端接收客戶端http請求階段

服務端接收來自于網絡上的主機請求報文中對某特定資源的一次請求的過程

3)服務端處理客戶端http請求階段

對請求報文進行解析,獲取客戶端請求的資源及請求方法等相關信息;根據請求報文的頭信息,來確定請求合適,編碼等

4)服務端根據客戶端http請求與訪問自己本地資源

獲取請求報文中請求的資源,根據請求,從應用->系統內核->驅動->資源存放媒介(硬盤、內存)獲取客戶端需要的信息

5)服務端構建http響應報文

服務器接收處理完請求后返回一個HTTP相應消息給客戶端。HTTP響應消息的格式包括:狀態行、響應頭、空行、消息體。每部分內容占一行。

112

狀態行:狀態行位于相應消息的第一行,有HTTP協議版本號,狀態碼和狀態說明三部分構成。

響應頭:響應頭是服務器傳遞給客戶端用于說明服務器的一些信息,以及將來繼續訪問該資源時的策略。

響應體:響應體是服務端返回給客戶端的HTML文本內容,或者其他格式的數據,比如:視頻流、圖片或者音頻數據。

狀態碼:HTTP的響應狀態碼由5段組成:

  • 1xx 消息,一般是告訴客戶端,請求已經收到了,正在處理,別急…
  • 2xx 處理成功,一般表示:請求收悉、我明白你要的、請求已受理、已經處理完成等信息.
  • 3xx 重定向到其它地方。它讓客戶端再發起一個請求以完成整個處理。
  • 4xx 處理發生錯誤,責任在客戶端,如客戶端的請求一個不存在的資源,客戶端未被授權,禁止訪問等。
  • 5xx 處理發生錯誤,責任在服務端,如服務端拋出異常,路由出錯,HTTP版本不支持等。

6)服務端將http響應報文發送給客戶端

就是在已建立的tcp鏈接之上將相應報文及客戶請求的數據從應用層,傳輸層、傳輸層、鏈路層、物理層層層打包頭依次傳輸到客戶端的物理層、鏈路層、傳輸層、應用層層層解包,最后客戶端獲得自己http請求的數據。

7)服務器關閉tcp連接

 

?

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程序),并寫出詳細的安裝、配置、測試過程

首先編譯安裝httpd

下載安裝源碼包 apr apr-util httpd

安裝環境 [root@localhost ~]# yum -y groupinstall “Development Tools” “Server Platform Development”

yum -y install expat-devel zlib zlib-devel openssl openssl-devel gcc build-essential pcre-devel

然后編譯安裝apr

tar xf apr-1.6.3.tar.gz

cd apr-1.6.3

./configure –prefix=/usr/local/apr

make && make install

 

然后編譯apr-util

tar xf apr-util-1.6.1.tar.gz

cd apr-util-1.6.1

./configure –prefix=/usr/local/apr-util –with-apr=/usr/local/apr

make && make install

 

然后編譯安裝httpd

tar xf httpd-2.4.29.tar.gz

./configure –prefix=/usr/local/apache24 –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 –libdir=/usr/lib64/

make && make install

 

設置環境變量

vim /etc/profile.d/httpd.sh

chmod +x /etc/profile.d/httpd.sh

exec /etc/profile.d/httpd.sh

 

防火墻設置

[root@localhost]# iptables -A INPUT -s 0/0 -d 192.168.208.129 -p tcp -j ACCEPT

[root@localhost]# iptables -A OUTPUT -d 0/0 -s 192.168.208.129 -p tcp -j ACCEPT

 

 

編譯安裝mariadb

yum -y install ncurses-devel

yum -y install cmake

tar xf mariadb-5.5.57.tar.gz

ln -sv mariadb-5.5.57 mysql

cd mysql/

groupadd -r -g 300 mysql

cd mysql/

chown -R root:mysql ./*

mkdir -pv /mydata/data

useradd mysql -u 27 -g 300

chown mysql:mysql /mydata/data/ -R

cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/mydata/data -DSYSCONFDIR=/etc -DWITHOUT_TOKUDB=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STPRAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWIYH_READLINE=1 -DWIYH_SSL=system -DVITH_ZLIB=system -DWITH_LOBWRAP=0 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci

make && make install

./scripts/mysql_install_db –user=mysql –basedir=/usr/local/mysql/ –datadir=/mydata/data/ –skip-name-resolve

mv /etc/my.cnf{,.bak}

cp support-files/my-large.cnf /etc/my.cnf

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

113

[root@localhost ~]# vim /etc/my.cnf

 

table_open_cache = 256

sort_buffer_size = 1M

read_buffer_size = 1M

read_rnd_buffer_size = 4M

myisam_sort_buffer_size = 64M

thread_cache_size = 8

query_cache_size= 16M

# Try number of CPU’s*2 for thread_concurrency

thread_concurrency = 8

datadir = /mydata/data

basedir = /usr/local/mysql

skip_name_resolve = ON

innodb_file_per_table = ON

 

cd /etc/rc.d/init.d/

chmod +x mysqld

service mysql start

chkconfig –list mysqld

vim /etc/profile.d/mysql.sh

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

chmod +x /etc/profile.d/mysql.sh

exec /etc/profile.d/mysql.sh

 

編譯安裝php

tar xf php-5.6.32.tar.gz

yum -y install bzip2-devel libmcrypt-devel libxml2-devel php-mysql

libmcrypt-devel這個組件默認光盤里沒有,要用有epel源rpm安裝

vim /etc/yum.repos.d/epel.repo

[epel]

name=Fedora EPEL

baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/

gpgcheck=0

 

cd php-5.6.32

./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/apache24/bin/apxs –with-mcrypt –with-config-file-path=/etc/ –with-config-file-scan-dir=/etc/php.d –with-bz2 –enable-maintainer-zts

make && make install

 

修改httpd.conf文件

添加AddType application/x-httpd-php .php

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

修改 DirectoryIndex index.html index.php

測試:cd /usr/local/apache24/htdocs/

vim index.php

<?php

phpinfo();

?>

114

安裝wordpress

wget https://cn.wordpress.org/wordpress-4.8.1-zh_CN.zip

[root@localhost wordpress]# unzip wordpress-4.8.1-zh_CN.zip

cp wp-config-sample.php wp-config.php

vim wp-config.php

MariaDB [mysql]> CREATE DATABASE wpdb;

MariaDB [mysql]> GRANT ALL ON wpdb.* TO wpuser@’192.168.%.%’ IDENTIFIED BY ‘wppass’;

MariaDB [mysql]> flush priviliges;

115

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

 

mkdir -pv /web/vhosts/{www1,www2}

vim /web/vhosts/www1/index.html

vim /web/vhosts/www2/index.html

然后編輯httpd.conf

去掉#? 啟用虛擬主機

Include conf/extra/httpd-vhosts.conf

然后在最后添加

<Directory “/web/vhosts/www1”>

options none

allowoverride none

Require all granted

</Directory>

 

<Directory “/web/vhosts/www2”>

options none

allowoverride none

Require all granted

</Directory>

 

vim /usr/local/apache24/conf/extra/httpd-vhosts.conf

mkdir /var/log/httpd/

 

<VirtualHost *:80>

ServerAdmin webmaster@dummy-host.example.com

DocumentRoot “/web/vhosts/www1/”

ServerName www1.stux.com

ServerAlias www.dummy-host.example.com

ErrorLog “/var/log/httpd/www1.err”

CustomLog “/var/log/httpd/www1.access” common

</VirtualHost>

 

<VirtualHost *:80>

ServerAdmin webmaster@dummy-host2.example.com

DocumentRoot “/web/vhosts/www2/”

ServerName www2.stux/com

ErrorLog “/var/log/httpd/www2.err”

CustomLog “/var/log/httpd/www2.access” common

</VirtualHost>

在C:\Windows\System32\drivers\etc中找到host文件,然后添加

192.168.208.129 www1.stux.com

192.168.208.129 www2.stux.com

116

117

編輯httpd-vhosts.conf文件

<VirtualHost *:80>

DocumentRoot “/web/vhosts/www1/”

ServerName www1.stux.com

ServerAlias www.dummy-host.example.com

ErrorLog “/var/log/httpd/www1.err”

CustomLog “/var/log/httpd/www1.access” common

<Location “/server-status”>

SetHandler server-status

Options None

AllowOverride None

AuthType Basic

AuthName “Admin”

AuthUserfile “/usr/local/apache24/.htpasswd”

Require user status

</Location>

</VirtualHost>

118

 

5、為第四題中的第2個虛擬主機提供https服務,使得用戶可以通過https安全的訪問此web站點;

1)要求使用證書認證,證書中要求使用的國家(CN)、州(HA)、城市(ZZ)和組織(MageEdu);

2)設置部門為Ops,主機名為www2.stuX.com,郵件為admin@stuX.com

 

第一步:CA服務器生成私鑰

[root@centos ~]# cd /etc/pki/CA/

[root@centos CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048)

Generating RSA private key, 2048 bit long modulus

……………….+++

……………………………………………………………………..+++

e is 65537 (0x10001)

[root@centos CA]#

 

第二步:CA服務器生成自簽證書

[root@centos CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365

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]:MageEdu

Organizational Unit Name (eg, section) []:Ops

Common Name (eg, your name or your server’s hostname) []:www2.stux.com

Email Address []:admin@stux.com

 

第三步:為CA提供所需的目錄及文件

[root@centos CA]# touch serial index.txt

[root@centos CA]# echo 01 > serial

 

第四步:web服務器生成私鑰

[root@localhost ~]# cd /usr/local/apache24/

[root@localhost apache24]# mkdir ssl

[root@localhost apache24]# cd ssl/

[root@localhost ssl]# (umask 077;openssl genrsa -out httpd.key 1024)

Generating RSA private key, 1024 bit long modulus

………………………………………………….++++++

………………………++++++

e is 65537 (0x10001)

 

第五步:web服務器生成證書簽署請求

[root@localhost ssl]# openssl req -new -key httpd.key -out httpd.csr -days 365

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]:MageEdu

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 []:

 

第六步:web服務器將請求發給CA服務器

[root@localhost ssl]# scp httpd.csr root@192.168.208.128:/tmp

 

第七步:CA服務器簽署證書

[root@centos CA]# openssl ca -in /tmp/httpd.csr -out certs/httpd.crt -days 365

Using configuration from /etc/pki/tls/openssl.cnf

Check that the request matches the signature

Signature ok

Certificate Details:

Serial Number: 1 (0x1)

Validity

Not Before: Nov 11 01:15:00 2017 GMT

Not After : Nov 11 01:15:00 2018 GMT

Subject:

countryName?????????????? = CN

stateOrProvinceName?????? = HA

organizationName????????? = MageEdu

organizationalUnitName??? = Ops

commonName??????????????? = www2.stux.com

emailAddress????????????? = admin@stux.com

X509v3 extensions:

X509v3 Basic Constraints:

CA:FALSE

Netscape Comment:

OpenSSL Generated Certificate

X509v3 Subject Key Identifier:

22:C3:53:3A:22:1A:BA:00:47:0E:9E:93:26:58:D9:E6:7D:5D:27:E4

X509v3 Authority Key Identifier:

keyid:AB:86:4B:09:28:03:65:A8:F9:63:02:A9:35:36:3F:3C:BB:03:E4:0B

 

Certificate is to be certified until Nov 11 01:15:00 2018 GMT (365 days)

Sign the certificate? [y/n]:y

 

 

1 out of 1 certificate requests certified, commit? [y/n]y

Write out database with 1 new entries

Data Base Updated

 

第八步:CA服務器將證書發送到web服務器

[root@centos CA]# scp certs//httpd.crt 192.168.208.129:/usr/local/apache24/ssl/

 

第九步:配置httpd支持ssl

[root@localhost ssl]# yum -y install mod_ssl

啟用ssl模塊

LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

LoadModule ssl_module modules/mod_ssl.so

Include conf/extra/httpd-ssl.conf

[root@localhost extra]# vim httpd-ssl.con

<Directory “/web/vhosts/www2/”>

Options None

AllowOverride None

Require all granted

</Directory>

修改SSLCertificateFile “/usr/local/apache24/ssl/httpd.crt”

SSLCertificateKeyFile “/usr/local/apache24/ssl/httpd.key”

 

第十步:將caert.pem導入受信任機構

將httpd.crt導入

打開https站點

119

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

[root@localhost]# yum -y install httpd php-fpm mariadb-server php-mysql

[root@localhost]# vim /etc/php-fpm.d/www.conf

修改listen = 0.0.0.0:9000

[root@localhost ~]# vim /etc/php-fpm.d/www.conf

#設置默認主頁

DirectoryIndex index.php

#是否開啟正向代理

ProxyRequests off

#.php后綴的URL請求轉發給后端,$1表示小括號內的內容

ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1

 

[root@localhost ~]# vim /var/www/html/index.php

<?php

phpinfo();

?>

[root@localhost ~]# systemctl start php-fpm

[root@localhost ~]# systemctl start httpd

 

120

 

 

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/88316

(1)
N27_flypigN27_flypig
上一篇 2017-11-12 11:23
下一篇 2017-11-12

相關推薦

  • 為大家準備了幾道簡單的小題,不知道看過這篇文章后能否做出來?(考驗你能力的時候到了,接招吧。。。) 1、將0-9分別替代成a-j 2、將/etc/issue文件中的內容轉換為大寫后保存至/tmp/issue.out文件中 3、計算1+2+3+..+99+100的值 4、處理字符串“xt.,l 1 jr#!$mn2 c*/fe 3 uz 4”,只保留其中的數字…

    2017-07-22
  • 優云老王(四)干貨總結:數據帶來的奇妙世界

    作為產品經理的我們,不僅僅需要業務敏感的直覺,還需要數據驅動我們的產品不斷創新!關于如何看數據,我列了主要的四個場景。 場景一:看頁面點擊,了解用戶關注什么,卡在哪里 給誰看:產品經理和交互設計師 看什么: 由于我們對Web應用的所有界面,可交互元素都做了埋點,那么我們就可以看用戶在頁面里都做了哪些點擊動作。首先是整個頁面的橫向比較,每個頁面本身的操作數(重…

    2016-09-19
  • suid, sgid, sticky簡介

    SUID屬性 passwd命令可以用于更改用戶的密碼,一般用戶可以使用這個命令修改自己的密碼。但是保存用戶密碼的/etc/shadow文件的權限是000,也就是說只有文件的所有者root用戶可以寫入,那為什么其他用戶也可以修改自己的密碼呢?這就是由于Linux的文件系統中的文件有SUID屬性。 [root@centos6 ~]# ll /etc/shadow…

    Linux干貨 2017-07-27
  • N22-第一周作業

    馬哥教育網絡班22期第1周課程練習 第一部分,計算機構成和功能簡述 一、計算機體系 從最初的計算機ENIAC到當今時代的計算機都采用馮●諾依曼體系結構,該結構宗旨為:數字計算機的數制采用二進制;計算機應該按照程序順序執行。 二、計算機硬件組成 計算機基本硬件由以下組件構成: CPU:       &…

    Linux干貨 2016-08-22
  • Awk

    awk各種詳細使用方法

    Linux干貨 2018-01-02
  • Linux下硬連接和軟連接的區別

    Linux下硬鏈接與軟鏈接的區別   鏈接,是指在計算機文件之間傳遞參數和控制命令,并把它們組成一個可執行的整體的過程。例如我們常見的windows系統下的“快捷方式”,它是一種鏈接,人們可以通過它來直接訪問計算機上的某個文件,不必逐級在硬盤目錄下尋找;互聯網上的“超文本鏈接”,它用文字鏈接的形式來指向一個頁面,人們可以通過此鏈接快速訪問網站的頁面…

    Linux干貨 2016-10-21

評論列表(1條)

  • 馬哥教育
欧美性久久久久