1、請描述一次完整的http請求處理過程;
(1) 建立或處理連接:接收請求或拒絕請求 (2) 接收請求: 接收來自于網絡的請求報文中對某資源的一次請求的過程; 持久連接:接收到請求不會斷開這個請求 非持久連接:一個連接請求斷開一次 并發訪問響應模型(Web I/O): 單進程I/O結構:啟動一個進程處理用戶請求,而且一次只處理一個;多個請求被串行響應; 多進程I/O結構:并行啟動多個進程,每個進程響應一個請求; 10000個進程--->服務器只能響應1000--->處理之后再響應 復用I/O結構:一個進程響應n個請求; 能夠處理多路IO的連接器,一個進程響應多個用戶請求 多線程模型:一個進程生成N個線程,每個線程響應一個用戶請求; 事件驅動:event-driven 在服務器內部基于事件回調的機制,連接IO的追蹤。 來完成客戶端請求。 復用的多進程I/O結構:啟動多個(m)進程,每個進程響應n個請求; (3) 處理請求:對請求報文進行解析,并獲取請求的資源及請求方法等相關信息 元數據:請求報文首部 <method> <URL> <VERSION> Host: www.magedu.com 請求的主機名稱 Connection:連接使用的方式 (4) 訪問資源:獲取請求報文中請求的資源 web服務器,即存放了web資源的服務器,負責向請求者提供對方請求的靜態資源,或動態運行后生成的資源;這些資源放置于本地文件系統某路徑下,此路徑通常稱為DocRoot /var/www/html/ images/1.jpg http://www.magedu.com/images/1.jpg web服務器資源路徑映射方式: (a) docroot:直接映射 (b) alias:路徑別名 (c) 虛擬主機docroot (d) 用戶家目錄docroot (5) 構建響應報文 資源的MIME類型: 顯式分類 魔法分類:自行掃描 協商分類 URL重定向: web服務構建的響應并非客戶端請求的資源,而是資源另外一個訪問路徑; 重定向:永久重定向、臨時重定向 (6) 發送響應報文 TCP雙向通道 (7) 記錄日志
2、httpd所支持的處理模型有哪些,他們的分別使用于哪些環境。
prefork:多進程模型,每個進程響應一個請求; 一個主進程:負責生成n個子進程,子進程也稱為工作進程,每個子進程處理一個用戶請求;即便沒有用戶請求,也會預先生成多個空閑進程,隨時等待請求到達;最大不會超過1024個;最小空閑多少,并發響應多少 prefork:最大不能超過1024個并發請求,高性能web服務器,這個差了一個數量級。10倍 c10k,這種模式很穩定,一個進程崩潰,不會影響到其他進程。---->問的性要求高的 worker:多線程模型,每個線程響應一個請求; 一個主進程:生成多個子進程,每個子進程負責生個多個線程,每個線程響應一個請求; m進程,n線程:m*n-----> 并發量稍微高點的 event:事件驅動模型,每個線程響應n個請求; 一個主進程:生成m個子進程,每個進程直接n個請求; m*n----->高并發--->
3、源碼編譯安裝LAMP環境(基于wordpress程序),并寫出詳細的安裝、配置、測試過程。
LAMP----->2.4 模塊實現 yum groupinstall "Development Tools" "Server Platform Development"------>安裝包組1、編譯安裝Apache httpd-2.4.9需要較新版本的apr和apr-util,因此需要事先對其進行升級 (1)、編譯安裝apr tar xf apr-1.5.0.tar.bz2cd apr-1.5.0./configure --prefix=/usr/local/apr make && make install (2)、編譯安裝apr-util tar xf apr-util-1.5.3.tar.bz2cd apr-util-1.5.3./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr make && make install (3)、編譯安裝httpd groupadd -r apache useradd -r -g apache apahce yum -y install pcre-devel ---->安裝pcre-devel支持 tar xf httpd-2.4.9.tar.bz2cd httpd-2.4.9./configure --prefix=/usr/local/apache --sysconf=/etc/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --withzlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --enable-modules=most --enable-mpmsshared= all --with-mpm=event make && make install3、修改httpd的主配置文件,設置其Pid文件的路徑 編輯vim /etc/httpd24/httpd.conf,添加如下行即可: PidFile "/var/run/httpd/httpd24.pid"提供httpd 運行腳本cd /etc/rc.d/init.d/ cp httpd httpd24 vim httpd24 apachectl=/usr/local/apache/bin/apachectl ---------------->改的 httpd=${HTTPD-/usr/local/apache/bin/httpd} ---->查看pid路徑--->/usr/local/apache/logs/httpd.pid pidfile=${PIDFILE-/var/run/httpd/httpd24.pid}lockfile=${LOCKFILE-/var/lock/subsys/httpd24}chkconfig --add httpd24 chkconfig --list httpd24 httpd24 0:關閉 1:關閉 2:關閉 3:關閉 4:關閉 5:關閉 6:關閉 httpd -t ------------>檢查語法hash -r --------------->清除緩存 vim /etc/profile.d/httpd.shexport PATH=/usr/local/apache/bin$PATH-------------->定義PATH讀取 . /etc/profile.d/httpd.sh ------------->重讀配置文件 編輯/etc/man.config,添加如下行即可 MANPATH /usr/local/apache/man 庫文件和頭文件的導出 輸出apche的頭文件至系統頭文件路徑/usr/include: 這可以通過簡單的創建鏈接實現: ln -sv /usr/local/apache/include /usr/include/apache 輸出mysql的庫文件給系統庫查找路徑:echo '/usr/sbin/httpd' > /etc/ld.so.conf.d/httpd24.conf 而后讓系統重新載入系統庫: ldconfig service httpd24 start ss -tnl ---------------->查看80端口是否被監聽到 ps aux | grep httpd----->查看工作模式 vim /etc/httpd24/httpd.conf ----------->配置文件 LoadModule deflate_module modules/mod_deflate.so----------->啟用2、編譯安裝mariadb tar xf mariadb-5.5.36-linux-x86_64.tar.gz -C /usr/local準備數據目錄 mkdir -pv /mydata/data------>創建數據存放目錄 配置mariadb-----> groupadd -r -g 306 mysql useradd -r -g 306 -u 306 mysqlcd /usr/local/ ln -sv mariadb-5.5.36-linux-x86_64 mysqlcd /usr/local/mysql chown -R root:mysql ./* scripts/mysql_install_db --datadir=/mydata/data --user=mysql cp supper-files/mysql.server /etc/rc.d/init.d/mysqld chkconfig --add mysqld --->添加 chkconfig --list mysqld --->查看 mkdir /etc/mysql cp support-files/my-large.cnf /etc/mysql/my.cnf vim /etc/mysql/my.cnf 添加三個選項: datadir = /mydata/data innodb_file_per_table = on skip_name_resolve = on service mysqld start /usr/local/mysql/bin/mysql_secure_installation------------>安全初始化 mysql優化 編輯/etc/man.config,添加如下行即可: MANPATH /usr/local/mysql/man7、輸出mysql的頭文件至系統頭文件路徑/usr/include: 這可以通過簡單的創建鏈接實現: ln -sv /usr/local/mysql/include /usr/include/mysql8、輸出mysql的庫文件給系統庫查找路徑:echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf 而后讓系統重新載入系統庫: ldconfig9、修改PATH環境變量,讓系統可以直接使用mysql的相關命令。 vim /etc/profile.d/mysql.shexport PATH=/usr/local/mysql/bin:$PATH. /etc/profile.d/mysql.sh 安裝php 解決依賴關系 yum -y groupinstall "Desktop Platform Development"yum -y install bzip2-devel libmcrypt-devel libxml2-devel2、編譯安裝php-php-5.4.26php-5.4.26.tar.bz2cd php-5.4.26./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-openssl --withmysqli=/ 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-configfile- path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --enable-maintainer-zts make make testmake intall 為php提供配置文件: cp php.ini-production /etc/php.ini3、 編輯apache配置文件httpd.conf,以apache支持php# vim /etc/httpd24/httpd.conf1、添加如下二行 AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps2、定位至DirectoryIndex index.html 修改為: DirectoryIndex index.php index.html 啟動httpd服務 測試頁面index.php示例如下: <?php$link = mysql_connect('127.0.0.1','root','mageedu');if ($link)echo "Success...";elseecho "Failure..."; phpinfo(); mysql_close(); ?> 用 wordpress測試 unzip wordpress-4.5.3-zh_CN.zip cp -rf wordpress /usr/local/apache/htdocs/cd /usr/local/apache/htdocs/wordpress cp wp-config-sample.php wp-config.php vim wp-config.php defile ('DB_NAME', 'wpdb'); defile ('DB_USER', 'wpuser'); defile ('DB_PASSWORD', 'wppword'); 連上MySQL數據庫 mysql -uroot -p GRANT ALL ON wpdb.* TO 'wpuser'@'localhost' IDENTIFIED BY 'wppword'; CREATE DATABASE wpdb; FLUSH PRIVILEGES; mysql -uwpuser -pwppword SHOW DATABASES; http://192.168.159.128/wordpress 訪問---->安裝
-
建立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
tatus);
1、編譯安裝Apache httpd-2.4.9需要較新版本的apr和apr-util,因此需要事先對其進行升級 (1)、編譯安裝apr tar xf apr-1.5.0.tar.bz2 cd apr-1.5.0 ./configure --prefix=/usr/local/apr make && make install(2)、編譯安裝apr-util tar xf apr-util-1.5.3.tar.bz2 cd apr-util-1.5.3./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr make && make install(3)、編譯安裝httpd groupadd -r apache useradd -r -g apache apahce yum -y install pcre-devel ---->安裝pcre-devel支持tar xf httpd-2.4.9.tar.bz2 cd httpd-2.4.9./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編譯的時候報這個錯誤------------------------------------------------------------------------------------------------------------checking whether to enable mod_ssl… configure: error: mod_ssl has been requested but can not be built due to prerequisite failures yum install openssl-devel----->解決make && make install3、修改httpd的主配置文件,設置其Pid文件的路徑 編輯vim /etc/httpd24/httpd.conf,添加如下行即可: PidFile "/var/run/httpd/httpd24.pid"提供httpd 運行腳本 cd /etc/rc.d/init.d/ cp httpd httpd24 vim httpd24 apachectl=/usr/local/apache/bin/apachectl ---------------->改的 httpd=${HTTPD-/usr/local/apache/bin/httpd} pidfile=${PIDFILE-/var/run/httpd/httpd24.pid} lockfile=${LOCKFILE-/var/lock/subsys/httpd24} chkconfig --add httpd24 chkconfig --list httpd24 httpd24 0:關閉 1:關閉 2:關閉 3:關閉 4:關閉 5:關閉 6:關閉 httpd -t ------------>檢查語法 hash -r --------------->清除緩存 vim /etc/profile.d/httpd.sh export PATH=/usr/local/apache/bin$PATH-------------->定義PATH讀取 . /etc/profile.d/httpd.sh ------------->重讀配置文件 service httpd24 start ss -tnl ---------------->查看80端口是否被監聽到 ps aux | grep httpd----->查看工作模式 vim /etc/httpd24/httpd.conf ----------->配置文件 LoadModule deflate_module modules/mod_deflate.so----------->啟用 vim /etc/httpd24/httpd.conf #DocumentRoot "/usr/local/apache/htdocs" vim /etc/httpd24/extra/httpd-vhosts.conf <192.168.159.128 *:80> ServerAdmin webmaster@dummy-host.example.com DocumentRoot "/web/vhost/www1/" ServerName www1.stuX.com ServerAlias www.dummy-host.example.com ErrorLog "/var/log/httpd/www1.err" CustomLog "/var/log/httpd/www1.access" common <Directory "/web/vhost/www1"> AllowOverride None Options None Require all granted </Directory> </VirtualHost> <192.168.159.128 *: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 <Directory "/web/vhost/www2"> AllowOverride None Options None Require all granted </Directory> </VirtualHost> mkdir -pv /web/vhost/{www1,www2} echo "www1.site" > /web/vhost/www1/index.html && echo "www2.site" > /web/vhost/www2/index.html [root@centos ~]# curl www1.stuX.com www1.site [root@centos ~]# curl www2.stuX.com www2.site vim /etc/httpd24/extra/httpd-vhosts.conf vim /etc/httpd24/extra/httpd-vhosts.conf <VirtualHost 192.168.159.128 *:80> DocumentRoot "/web/vhost/www1/"ServerName www1.stuX.com ErrorLog "/var/log/httpd/www1.err"CustomLog "/var/log/httpd/www1.access" common <Directory "/web/vhost/www1"> AllowOverride NoneOptions NoneRequire all granted </Directory> <Location /server-status> AuthType Basic AuthName "Only for Admin"AuthUserFile "/usr/local/apache/.htpasswd"Require valid-userSetHandler server-statusAllowOverride NoneOptions None</Location </VirtualHost> ./htpasswd -m -c /usr/local/apache/.htpasswd admin
原創文章,作者:N21_ Dominic,如若轉載,請注明出處:http://www.www58058.com/48998
統一回復下,看得出來很認真的在做練習了,寫的也很好,即使一個沒有經驗的人也可以按照你的步驟搭建出來