從Linux小白到大?!c狼共舞的日子12(上)

馬哥教育網絡班21期+第12周課程練習

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


1)建立或處理連接:客戶端發送http請求報文,服務器端接收或拒絕請求;
2)接收請求:服務器端接收來自客戶端對某些資源的請求;
3)處理請求:服務器端解析客戶端請求報文,獲取客戶端請求的資源及請求方法等信息;
4)訪問資源:服務器端獲取客戶端請求的資源;
5)構建響應報文;
6)發送響應報文;
7)日志記錄;

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


1)prefork:
多進程模型,每個進程響應一個請求;
一個主進程:負責生成及回收子進程、創建套接字、接收請求、派發請求給子進程;
多個子進程:負責處理來自主進程派發的客戶端請求,每個子進程處理一個請求;
工作模式:服務器端會預先生成幾個空閑進程,用于響應客戶端請求;
         可以在配置文件中設置最大及最小空閑子進程數目;
2)worker:
多進程多線程模型,每個線程響應一個請求;
一個主進程:負責生成及回收子進程、創建套接字、接收請求、派發請求給子進程;
多個子進程:每個子進程生成多個線程;
n個線程:每個線程響應一個請求;
并發數量:子進程數目x每個子進程所能生成的最大線程數
3)event:
事件驅動模型,多進程模型,每個進程響應多個請求;
一個主進程:負責生成及回收子進程、創建套接字、接收請求、派發請求給子進程;
多個子進程:每個子進程基于事件驅動機制響應多個請求;

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


環境:linux 2.6.32-358.el6.x86_64 + httpd 2.4.9 + mysql-5.5.33 + php-5.4.26

安裝編譯環境:
[root@web ~]# yum groupinstall "Desktop Platform Development" "Development tools" -y
[root@web ~]# yum install mode_ssl openssl-devel pcre-devel -y
注:這個必須得安裝,編譯Apache的時候用

一、編譯安裝Apache
1.解決依賴關系
httpd-2.4.9需要較新版本的apr和apr-util,因此需要事先對其進行升級。
升級方式有兩種,一種是通過源代碼編譯安裝,
一種是直接升級rpm包。這里選擇使用編譯源代碼的方式進行。
APR(Apache portable Run-time libraries,Apache可移植運行庫)
的目的如其名稱一樣,主要為上層的應用程序提供
一個可以跨越多操作系統平臺使用的底層支持接口庫。在早期 的Apache版本中,
應用程序本身必須能夠處理各種具體操作系統平臺的細節,
并針對不同的平臺調用不同的處理函數。

(1)編譯安裝apr
[root@web ~]# tar xf apr-1.5.0.tar.bz2 
[root@web ~]# cd apr-1.5.0
[root@web apr-1.5.0]# ./configure --prefix=/usr/local/apr
[root@web apr-1.5.0]# make && make install

(2)編譯安裝apr-util
[root@web ~]# tar xf apr-util-1.5.3.tar.bz2 
[root@web ~]# cd apr-util-1.5.3
[root@web apr-util-1.5.3]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@web apr-util-1.5.3]# make && make install

2.編譯安裝httpd
[root@web ~]# tar xf httpd-2.4.9.tar.bz2 
[root@web ~]# cd httpd-2.4.9
[root@web httpd-2.4.9]# ./configure --prefix=/usr/local/apache --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=event
[root@web httpd-2.4.9]# make && make install 

注:configure后跟的參數解釋
--prefix=/usr/local/apache設定httpd的安裝目錄
--sysconfdir=/etc/httpd24 設定httpd的配置文件目錄
--enable-so   支持共享模塊,如果沒有這個PHP模塊無法加入
--enable--ssl 支持ssl
--enable-cgi  支持cgi
--enable-rewrite  支持url重寫
--with-zlib   支持zlib壓縮,傳輸層的壓縮(不指定具體的路徑,默認在系統中搜索)
--with-pcre   支持正則化(不指定具體的路徑,默認在系統中搜索)
--with-apr=/usr/local/apr   指定apr的路徑
--with-apr-util=/usr/local/apr-util  指定apr-util的路徑
--enable-modules=most   指定要編譯的模塊(most/all)
--enable-mpms-shared=all   指定要編譯mpm
--with-mpm=event  指定httpd默認的MPM的工作方式


3.修改主配置文件,添加PidFile路徑
[root@web ~]# vim /etc/httpd24/httpd.conf
PidFile "/var/run/httpd24.pid"

4.提供SysV服務腳本/etc/rc.d/init.d/httpd,內容如下:
[root@web ~]# vim /etc/init.d/httpd24
這里是復制的/etc/init.d/httpd的腳本做了修改,具體修改內容:
        apachectl=/usr/local/apache/bin/apachectl
        httpd=${HTTPD-/usr/local/apache/bin/httpd}
        prog=httpd24
        pidfile=${PIDFILE-/var/run/httpd24.pid}
        lockfile=${LOCKFILE-/var/lock/subsys/httpd24}

[root@web ~]# chmod +x /etc/init.d/httpd24

5.將httpd24加入服務列表并啟動httpd24服務
[root@web ~]# chkconfig --add httpd24
[root@ftp ~]# service httpd24 start

出現了報錯:
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, 
         using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
解決方法:
[root@web ~]# vim /etc/httpd24/httpd.conf
ServerName localhost:80

6.可以將新編譯的httpd24加入環境變量
[root@web ~]# vim /etc/profile.d/httpd24.sh
export PATH=/usr/local/apache/bin:$PATH
[root@web ~]# source /etc/profile.d/httpd24.sh

二、編譯安裝mysql-5.5.33
1.安裝編譯環境和需要的包
[root@web ~]# yum install ncurses-devel.x86_64 cmake.x86_64 -y

2.創建mysql用戶和對應的mysql數據目錄
[root@web ~]# groupadd  -r mysql
[root@web ~]# useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql
[root@web ~]# chown -R mysql:mysql /mydata/data

3.編譯安裝mysql-5.5.33
[root@web ~]# tar xf /mysql-5.5.33.tar.gz -C /usr/local/
[root@web ~]# ln -sv /usr/local/mysql-5.5.33/ /usr/local/mysql
[root@web ~]# cd /usr/local/mysql
[root@web mysql]# cmake .
[root@web mysql]# make install
[root@web mysql]# chmod +x scripts/mysql_install_db
[root@web mysql]# scripts/mysql_install_db --basedir=/usr/local/mysql 
                   --user=mysql --datadir=/mydata/data

4.為mysql提供配置文件
[root@web mysql]# mv /etc/my.cnf{,.bak}
[root@web mysql]# cp support-files/my-large.cnf /etc/my.cnf
[root@web mysql]# vim /etc/my.cnf   
    thread_concurrency = 2   //這里為cpu個數乘以2
    datadir = /mydata/data   //這行自己添加,為數據文件目錄

5.為mysql提供SysV服務腳本
[root@web mysql]# cp support-files/mysql.server /etc/init.d/mysqld
[root@web mysql]# chmod +x /etc/init.d/mysqld
[root@web mysql]# chkconfig --add mysqld
[root@web mysql]# chkconfig mysqld on
[root@web mysql]# service mysqld start

6.配置環境變量,使mysql的命令可以直接使用
[root@web mysql]# vim /etc/profile.d/mysql.sh
     export PATH=/usr/local/mysql/bin:$PATH
[root@web mysql]# chmod +x /etc/profile.d/mysql.sh 
[root@web mysql]# source /etc/profile.d/mysql.sh

7.配置mysql的man手冊
[root@web mysql]# vim /etc/man.config
 MANPATH  /usr/local/mysql/man

8.配置mysql的頭文件到系統頭文件
[root@web mysql]# ln -sv /usr/local/mysql/include  /usr/include/mysql

9.配置mysql的庫文件到系統庫查找路徑
[root@web mysql]# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
[root@web mysql]# ldconfig //重新載入系統庫

三、編譯安裝php-5.4.26
1.安裝編譯php時需要的包
[root@web ~]# yum install bzip2-devel libmcrypt-devel libxml2-devel -y

2.編譯安裝php
[root@web ~]# tar xf php-5.4.26.tar.bz2
[root@web ~]# cd php-5.4.26/
[root@web 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-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

說明:
(1)這里為了支持apache的worker或event這兩個MPM,編譯時使用了--enable-maintainer-zts選項。
(2)如果使用PHP5.3以上版本,為了鏈接MySQL數據庫,可以指定mysqlnd,這樣在本機就不需要先安裝MySQL
   或MySQL開發包了。mysqlnd從php 5.3開始可用,可以編譯時綁定到它(而不用和具體的MySQL客戶端庫
   綁定形成依賴),但從PHP 5.4開始它就是默認設置了。
   [root@web php-5.4.26]# ./configure --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd 
                                     --with-mysqli=mysqlnd

[root@web php-5.4.26]# make
[root@web php-5.4.26]# make test
[root@web php-5.4.26]# make intall

3.為php提供配置文件:
[root@web php-5.4.26]# cp php.ini-production /etc/php.ini

4.編輯apache配置文件httpd.conf,以apache支持php
 [root@web php-5.4.26]# vim /etc/httpd/httpd.conf
 添加如下二行
   AddType application/x-httpd-php  .php
   AddType application/x-httpd-php-source  .phps

 定位至DirectoryIndex index.html 
 修改為:
  DirectoryIndex  index.php  index.html

5.重啟httpd24服務
[root@web php-5.4.26]# service httpd24 restart


四、編譯安裝wordpress
1.解壓wordpress包到/usr/local/appache/htdocs
[root@web ~]# tar -xf wordpress-4.7-zh_CN.tar.gz -C /usr/local/apache/htdocs

2.創建數據庫并授權登錄用戶
[root@web ~]# mysql
   mysql> create database wordpress;
   mysql> grant all on wordpress.* to wpuser@'192.168.%.%' identified by 'password';

3.編輯wordpress的配置文件
[root@web ~]# cp /usr/local/apache/htdocs/wordpress/wp-config-sample.php 
                 /usr/local/apache/htdocs/wordpress/wp-config.php 

[root@web ~]# vim /usr/local/apache/htdocs/wordpress/wp-config.php

    /** WordPress數據庫的名稱 */
    define('DB_NAME', 'wordpress');

    /** MySQL數據庫用戶名 */
    define('DB_USER', 'wpuser');

    /** MySQL數據庫密碼 */
    define('DB_PASSWORD', 'password');

    /** MySQL主機 */
    define('DB_HOST', '192.168.82.58');

4.在瀏覽器中訪問并配置
http://192.168.82.58/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);


1.編輯httpd.conf將DocumentRoot注釋并開啟vhosts
[root@web ~]# vim /etc/httpd24/httpd.conf
   #DocumentRoot "/usr/local/apache/htdocs"
   Include /etc/httpd24/extra/httpd-vhosts.conf

2.創建所需的目錄并創建index.html
[root@web ~]# mkdir -p /web/vhosts/www{1,2}
[root@web ~]# mkdir /var/log/httpd/

[root@web ~]# echo www1.stuX.com > /web/vhosts/www1/index.html
[root@web ~]# echo www2.stuX.com > /web/vhosts/www2/index.html

3.編輯vhosts配置文件創建兩個虛擬主機并設置server-status
[root@web ~]# vim /etc/httpd24/extra/httpd-vhosts.conf 
    <VirtualHost 192.168.82.58:80>
        DocumentRoot "/web/vhosts/www1"
        ServerName www1.stuX.com
        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>
        <Location /server-status>
            SetHandler server-status
            AuthType Basic
            Order deny,allow
            Deny from all
            Allow from 192.168.82
            AuthName "Web Auth Server-status"
            AuthUserFile "/etc/httpd24/extra/.htpasswd"
            Require valid-user
        </location>     
    </VirtualHost>

    <VirtualHost 192.168.82.58:80>
        DocumentRoot "/web/vhosts/www2"
        ServerName www2.stuX.com
        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>

4.生成密碼文件
[root@web ~]# htpasswd -c -m /etc/httpd24/extra/.htpasswd status

5.添加hosts文件記錄 
[root@web ~]# vim /etc/hosts
    192.168.82.58 www1.stuX.com
    192.168.82.58 www2.stuX.com

6.重啟服務并測試
[root@web ~]# service httpd24 restart
[root@web ~]# curl www1.stuX.com
www1.stuX.com
[root@web ~]# curl www2.stuX.com
www2.stuX.com

從Linux小白到大?!c狼共舞的日子12(上)

原創文章,作者:N21_孤狼,如若轉載,請注明出處:http://www.www58058.com/64299

(0)
N21_孤狼N21_孤狼
上一篇 2016-12-26
下一篇 2016-12-26

相關推薦

  • vim的使用

    vim 編輯器  vim的模式:      編輯模式      輸入模式      擴展編輯模式:在編輯模式中輸入:  ====================================   編輯模式轉換成輸入模式 &nbs…

    Linux干貨 2016-08-11
  • LINUX課堂筆記(第一周)

    2018.03.05 LINUX: 切換虛擬終端:CTRL+ALT+F[1-6] 查看當前得終端設備命令:tty 查看內存: cat /proc/meminfo free -h 查看分區: cat /proc/partitions lsblk 查看CPU: lscpu cat /proc/cpuinfo 查看版本 cat /etc/centos-releas…

    Linux干貨 2018-03-15
  • lamp架構實現論壇架構及壓力測試

    練習:分別使用CentOS 7和CentOS 6實現以下任務 (1) 配置四個基于名稱的虛擬主機;   (a) discuzX   (b) wordpress   (c) drupal   (d) phpMyAdmin,此虛擬主機僅支持https協議; (2) 對phpMyAdmin首頁做壓力測試   分別給…

    Linux干貨 2016-10-17
  • Linux磁盤管理基礎

    Linux磁盤管理基礎 硬盤結構 文件系統與MBR、GTP 磁盤管理三步驟:分區、格式化、掛載 mount 硬盤結構 硬盤的基本組成材質是盤片,不同容量硬盤的盤片數不等。每個盤片有兩面,都可記錄信息。盤片表面上以盤片中心為圓心,不同半徑的同心圓稱為磁道,不同盤片相同半徑的磁道所組成的圓柱稱為柱面,每個磁道被分成許多扇形的區域,每個區域叫一個扇區,每個扇區可存…

    Linux干貨 2016-09-01
  • DNS 正反向解析 主從配置

    我的環境是     192.168.1.130    主DNS      192.168.1.112    從DNS DNS 的安裝包有bind bind-libs bind-utils 安…

    Linux干貨 2016-01-05
  • 三大家族輕松管理CentOS 7網絡屬性配置

    一、簡單介紹        在CentOS 7中對網絡管理還是有不少變化的,例如管理服務的命令變為systemctl,許多命令可以更改后直接生效,還有許多獨有的工具,本文以CentOS 6與CentOS 7對比進行講解,下面現總體介紹一下網絡屬性配置工具。    &nb…

    Linux干貨 2016-04-25
欧美性久久久久