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