1.LAMP介紹
Linux+Apache+Mysql/MariaDB+Perl/PHP/Python一組常用來搭建動態網站或者服務器的開源軟件,本身都是各自獨立的程序,因爲常被放在一起使用,擁有了越來越高的兼容度,共同組成了一個強大的Web應用程序平臺。本文所介紹的是Linux+Apache+MariaDB+PHP,基於RPM包安裝的部署過程。
2.環境描述
操作系統 | IP地址 | 系統環境 | 用途 |
CentOS 7.1 | 172.18.20.10/16 | 最小化安裝 | Web服務器 |
CentOS 7.1 | 172.18.20.11/16 | 最小化安裝 | Mariadb服務器 |
CentOS 6.7 | 172.18.20.20/16 | 最小化安裝 | 私有CA |
CentOS 6.7 | 172.18.20.21/16 | 最小化安裝 | DNS服務器 |
WIN 10 | 172.18.20.1/1 | - | 客戶端主機 |
爲保證環境不出問題,已關閉iptables和selinux
Web服務器 用於提供web服務,php以模塊的方式安裝在Web服務器上。其中一個虛擬主機用於提供phpMyAdmin,另一個虛擬主機用於提供wordpress。
數據庫服務器 用於給web服務器以及其他服務器提供數據存儲等相關服務。
私有CA 數字證書認證中心的簡稱,指發放、管理、廢除數字證書的機構,在本文中的作用是給web服務器頒發證書實現https。
DNS服務器 用於提供正向解析和方向解析等相關功能。
客戶端主機 主要方便於各種測試。
3.安裝部署
3.1 mariadb服務器
yum -y install mariadb-server && systemctl start mariadb.service ##安裝並啓動mariadb服務 mysqladmin -uroot password '123.com' ## 設置mysql的root用戶密碼爲 123.com mysql -uroot -p123.com ## 登陸mysql數據庫 create database wp_DB; ## 創建wp_DB數據庫 GRANT ALL ON wp_DB.* TO 'ch123'@'172.18.20.10' IDENTIFIED BY 'qwer1234'; ## 允許來自172.18.20.10的主機的ch123用戶對wp_DB數據做各種操作 FLUSH PRIVILEGES; ## 刷新配置命令 SHOW DATABASES; ## 確定數據庫是否已創建成功 SHOW GRANTS FOR 'ch123'@'172.18.20.10'; ## 確認數據庫授權是否成功
3.2 DNS服務器
yum -y install bind bind-utils ## 安裝bind程序和bind客戶端工具 vim /etc/named.rfc1912.zones ## 修改配置文件,添加一個正向解析區域 zone "ch.com." IN { type master; file "ch.com.zone"; }; vim /var/named/ch.com.zone ## 編輯區域配置文件 $TTL 3600 $ORIGIN ch.com. @ IN SOA ns1.ch.com. dnsadmin.ch.com. ( 2016042101 1H 10M 3D 1D ) IN NS ns1 ns1 IN A 172.18.20.21 www IN A 172.18.20.10 web IN CNAME www named-checkconf && systemctl start named.service ## 檢查named配置文件,如果沒問題則啓動named服務 ss -anlp | grep named ## 確保tcp/53號端口是監聽狀態的 dig -t A www.ch.com @172.18.20.21 ## 測試DNS服務器是否能解析 www.ch.com
3.3 私有CA
(umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096) ## 創建私鑰 openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655 ## 生成自簽證書 Country Name (2 letter code) [XX]:CN ## 國家名稱 State or Province Name (full name) []:Beijing ## 州或省名稱 Locality Name (eg, city) [Default City]:Beijing ## 市區名稱 Organization Name (eg, company) [Default Company Ltd]:CH ## 組織名稱 Organizational Unit Name (eg, section) []:Ops ## 部門名稱 Common Name (eg, your name or your server's hostname) []:CA22 ## 主機名稱 mkdir -pv /etc/pki/CA/{certs,crl,newcerts} touch /etc/pki/CA/{serial,index.txt} echo 01 > /etc/pki/CA/serial ## 爲CA提供所需的目錄及文件 openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365 ## 當web服務器將證書請求發過來之後,給web服務器簽署證書 scp /etc/pki/CA/certs/httpd.crt [email protected]:/etc/httpd/ssl ## 將證書文件回傳給web服務器
3.4 Web服務器
yum -y install httpd php php-mysql mod_ssl php-xcache ## 安裝web程序包、php程序包、php-mysql驅動、ssl模塊 vim /etc/resolv.conf ## 修改DNS指向配置文件 nameserver 172.18.20.11 ## 將DNS服務器改爲上面配置的DNS服務器地址 vim /etc/httpd/conf/httpd.conf ## 修改httpd主配置文件 <Directory /> AllowOverride none Require all granted ## 改爲允許所有主機訪問 </Directory> #DocumentRoot "/var/www/html" ## 禁用中心主機 vim /etc/httpd/conf.d/vhost.conf ## 添加一個虛擬主機的配置文件 DirectoryIndex index.php <VirtualHost 172.18.20.10:80> ServerName web.ch.com DocumentRoot "/www/wp" <VirtualHost> mkdir /var/log/wp mkdir -pv /www/wp ## 創建虛擬主機所需目錄 httpd -t ## 檢查配置文件,如果顯示“Syntax OK” 表示配置沒有問題 mkdir -pv /etc/httpd/ssl ## 創建一個用來存放ssl證書的目錄 (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 4096) ## 生成私鑰文件 openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365 ## 生成證書請求,這裏主機名一定要填https用到的主機名地址 scp /etc/httpd/ssl/httpd.csr [email protected]:/tmp/ ## 用可靠的方式將證書請求傳輸給CA主機 vim /etc/httpd/conf.d/ssl.conf ## 編輯ssl配置文件 <VirtualHost 172.18.20.10:443> DocumentRoot "/www/ph" ServerName web.ch.com:443 SSLCertificateFile /etc/httpd/ssl/httpd.crt ## 指明證書文件存儲路徑 SSLCertificateKeyFile /etc/httpd/ssl/httpd.key ## 指明私鑰文件存儲路徑 </VirtualHost> mkdir /www/ph ## 創建https所需目錄
4.整合測試
vim /www/wp/index.php ## 編寫php連接mysql數據庫代碼 <?php $conn = mysql_connect('172.18.20.11','ch123','qwer1234'); ## 此處填mariadb 授權的用戶和密碼 if ($conn) echo "OK"; else echo "Failure"; ?> cp /www/wp/index.php /www/ph/ systemctl start httpd.service ## 啓動httpd服務器
在客戶端將DNS服務器指向爲172.18.20.21,然後瀏覽器上分別輸入http://www.ch.com 和 https://web.ch.com 顯示ok 則表示測試成功
5.安裝網站程序
5.1 wordpress
這裏www.ch.com虛擬主機用於提供wordpress;官方下載地址:
cp wordpress-4.3.1-zh_CN.zip /www/wp ## 複製wordpress程序到/www/wp目錄下 cp phpMyAdmin-4.4.14.1-all-languages.zip /www/ph ## 複製phpMyAdmind到/www/ph目錄下 cd /www/wp/ ## 切換至/www/wp目錄下 unzip wordpress-4.3.1-zh_CN.zip ## 執行解壓 chown -R root:apache wordpress ## 修改屬組爲apache用戶 chmod -R g+w wordpress ## 給apache組賦予寫權限 vim /etc/httpd/conf.d/vhost.conf ## 修改配置 DocumentRoot "/www/wp/wordpress" systemctl reload httpd.service ## 重載配置文件
用客戶端瀏覽器訪問www.ch.com,按照說明依次下一步操作即可完成安裝,需要注意填數據庫信息時,填寫的是之前mairadb上配置授權的用戶和密碼,數據庫地址填寫數據庫服務器地址即可。
5.1 phpMyadmin
web.ch.com虛擬主機用於提供phpMyAdmin;官方下載地址:http://www.phpmyadmin.net/downloads/
cd /www/ph/ ## 切換至/www/ph/目錄下 unzip phpMyAdmin-4.4.14.1-all-languages.zip ## 解壓縮phpmyadmin chown -R root:apache phpMyAdmin-4.4.14.1-all-languages ## 修改phpmyadmin目錄屬組爲apache chmod -R g+w phpMyAdmin-4.4.14.1-all-languages ## 賦予apache組對phpmyadmin有寫操作 ln -s phpMyAdmin-4.4.14.1-all-languages phpadmin ## 對phpmyadmin創建符號鏈接 yum -y install php-mbstring ## 安裝支持中文字符集程序包 cd phpadmin/ ## 切換至phpadmin目錄下 cp config.sample.inc.php config.inc.php ## 複製模板配置文件 vim config.inc.php ## 修改配置文件 $cfg['Servers'][$i]['host'] = '172.18.20.11'; ## 將這一項改爲mariadb數據庫的地址 vim /etc/httpd/conf.d/ssl.conf ## 修改https配置文件中 DocumentRoot "/www/ph/phpadmin" httpd -t ## 檢查配置是否正確 systemctl reload httpd.service ## 重載配置文件
用客戶端瀏覽器訪問https://web.ch.com 輸入用戶名密碼,就可以訪問phpmyadmin了
6.壓力測試
6.1 xcache
xcache是一個開源的 opcode 緩存器/優化器,能夠提高web服務器上的 PHP 性能. 通過把編譯 PHP 後的數據緩衝到共享內存從而避免重複的編譯過程, 能夠直接使用緩衝區已編譯的代碼從而提高速度. 通常能夠提高頁面生成速率2到5倍, 降低服務器負載。
vim /etc/php.d/xcache.ini ## 編輯xcache 配置文件 [xcache-common] extension = xcache.so [xcache.admin] xcache.admin.enable_auth = On xcache.admin.user = "mOo" xcache.admin.pass = "md5 encrypted password" [xcache] xcache.shm_scheme = "mmap" xcache.size = 60M xcache.count = 1 xcache.slots = 8K xcache.ttl = 0 xcache.gc_interval = 0 xcache.var_size = 4M xcache.var_count = 1 xcache.var_slots = 8K
配置詳情請參考 http://xcache.lighttpd.net/wiki/XcacheIni
6.2 ab
ab是apache自帶的壓力測試工具
ab -n 1000 -c 100 http://172.18.20.10/index.php -n 表示請求總數 -c 表示模擬的並行數
測試生成後,各字段的含義
Server Software: Apache/2.4.6 ## 平臺版本 Server Hostname: 172.18.20.10 ## 服務器主機名 Server Port: 80 ## 服務器端口 Document Path: /index.php ## 測試頁面文檔 Document Length: 8920 bytes ## 頁面文檔大小 Concurrency Level: 100 ## 併發連接數 Time taken for tests: 20.863 seconds ## 整個測試持續的時間 Complete requests: 1000 ## 完成的請求數量 Failed requests: 0 ## 失敗的請求數量 Write errors: 0 ## 等待的請求數量 Non-2xx responses: 1000 ## 請求響應數量 Total transferred: 388000 bytes ## 整個場景中的網絡傳輸量 HTML transferred: 0 bytes ## 整個場景中的HTML內容傳輸量 Requests per second: 47.93 [#/sec] (mean) ## 吞吐率,每秒事務數 ,後面括號中的 mean 表示這是一個平均值 Time per request: 2086.280 [ms] (mean) ## 用戶平均請求等待時間,後面括號中的 mean表示這是一個平均值 Time per request: 20.863 [ms] (mean, across all concurrent requests) ## 服務器平均請求處理時間 Transfer rate: 18.16 [Kbytes/sec] received ## 平均每秒網絡上的流量 Connection Times (ms) ## 網絡上消耗的時間的分解 min mean[+/-sd] median max Connect: 0 3 68.3 0 2138 Processing: 38 2045 1472.0 1393 7854 Waiting: 36 2042 1472.0 1392 7854 Total: 38 2048 1475.9 1393 7854 Percentage of the requests served within a certain time (ms) ## 整個場景中所有請求的響應情況 50% 1393 66% 1654 75% 2247 80% 3000 90% 4529 95% 5331 98% 6420 99% 6750 100% 7854 (longest request)
7.實驗中遇到的問題
7.1 時間同步問題
主機之間時間不同步可能會導致配置不生效,所以實驗前一定要確保所有主機時間同步,可以先安裝yum -y install ntp;然後同步時間服務器 ntpdata NTP_SERVER_IP 。
7.2 配置文件問題
剛纔不小心把httpd主配置文件的一行信息不小心刪除,然後保存退出了,httpd服務卻怎麼也起不來,這個時候我才知道備份配置文件的重要性了。所以說,在安裝所以的服務程序之後,一定要在配置之前做好配置。