Apache web服務器(LAMP架構)
apache介紹
1).世界上使用率最高的網站服務器,最高時可達70%;官方網站:apache.org
2).http 超文本協議 HTML 超文本標記語言
3).URL 統一資源定位符
http://www.sina.com.cn:80/admin/index.php
http:// -- ssl 安全套接字
www.sina.com.cn -- 域名
:80 -- 端口 http對應80端口,https對應443端口
/admin/index.php -- 網址目錄和文件名
4).LAMP安裝說明
①源碼包安裝 自定義 開發版本選擇方便 效率高
生產環境 安全 穩定
開發環境 局域網(內網)
②二進制包安裝 yum命令安裝 官方版本比較低
Apache的三種工作模式
Apache 一共有3種穩定的 MPM 模式(多進程處理模塊),它們分別是 prefork、worker、event。http-2.2版本的httpd默認的mpm工作模式為prefork,2.4版本的httpd默認是event工作模式。可以通過 httpd -V 來查看。
[root@ken ~]# httpd -V | grep -i "server mpm" Server MPM: Prefork
編譯的時候,可以通過 configure 的參數來指定:
--with-mpm=prefork|worker|event
1、prefork 工作模式
(作用:用一個進程處理一個用戶請求)
Apache在啟動之初,就預先fork一些子進程,然后等待請求進來。之所以這樣做,是為了減少頻繁創建和銷毀進程的開銷。每個子進程只有一個線程,在一個時間點內,只能處理一個請求。
優點:成熟穩定,兼容所有新老模塊。同時,不需要擔心線程安全的問題。
缺點:一個進程相對占用更多的系統資源,消耗更多的內存。而且,它並不擅長處理高並發請求。
2、worker 工作模式
(作用:一個進程生成多個線程,一個線程處理一個用戶請求)
使用了多進程和多線程的混合模式。它也預先fork了幾個子進程(數量比較少),然后每個子進程創建一些線程,同時包括一個監聽線程。每個請求過來,會被分配到1個線程來服務。線程比起進程會更輕量,
因為線程通常會共享父進程的內存空間,因此,內存的占用會減少一些。在高並發的場景下,因為比起prefork有更多的可用線程,表現會更優秀一些。
優點:占據更少的內存,高並發下表現更優秀。
缺點:必須考慮線程安全的問題。
3、event 工作模式
(用一個線程處理一個用戶請求)
它和worker模式很像,最大的區別在於,它解決了keep-alive場景下,長期被占用的線程的資源浪費問題。event MPM中,會有一個專門的線程來管理這些keep-alive類型的線程,當有真實請求過來的時候,
將請求傳遞給服務線程,執行完畢后,又允許它釋放。這樣增強了高並發場景下的請求處理能力。
HTTP采用keepalive方式減少TCP連接數量,但是由於需要與服務器線程或進程進行綁定,導致一個繁忙的服務器會消耗完所有的線程。Event MPM是解決這個問題的一種新模型,它把服務進程從連接中分
離出來。在服務器處理速度很快,同時具有非常高的點擊率時,可用的線程數量就是關鍵的資源限 制,此時Event MPM方式是最有效的,但不能在HTTPS訪問下工作。
apache基本信息
apache為企業中常用的web服務,用來提供http://(超文本傳輸協議)
主配置目錄:/etc/httpd/conf
主配置文件:/etc/httpd/conf/http.conf
子配置目錄:/etc/httpd/conf.d
子配置文件:/etc/httpd/conf.d/*.conf
默認發布目錄:/var/www/html/
默認發布文件:index.html
默認端口:80
服務器的返回狀態值
(表示請求的是否成功等信息)
1xx:一般不用,就是一些描述信息
2xx:表示請求成功
200:ok,請求下載成功
201:create ok,上傳成功
3xx:表示請求的資源被重定向
301:moved permanently,永久重定向
302:Found,臨時重定向
304:not modified,標識一個緩存的資源是否發生過更改
4xx:請求失敗,因為客戶端原因導致失敗
403:forbidden,表示客戶端沒有權限訪問所請求的資源
404:Not Found,表示客戶端所請求的資源不存在
405:Method Not Allowd:表示客戶端所用的方法不被允許
5xx:請求失敗,因為服務器端原因導致失敗
500:Internal Server Error,服務器內部錯誤
502:Bad Gateway,代理服務器從上游服務器獲取到的是偽響應
503:service unavailable,服務器暫時不可用
為什么要編譯安裝
一般來說,我們軟件的安裝方式有yum(rpm),和源碼編譯兩種方式,那么為什么我們需要源碼編譯安裝一部分軟件?選擇源碼編譯安裝軟件有以下幾個原因:
1:滿足不同的運行平台,我們Linux發型版本眾多,但是每個版本采用的軟件或者內核版本都不一樣,而我們的二進制包所依賴的環境不一定能夠正常運行,所以大部分軟件直接提供源碼!
2:方便定制,滿足不同的需求,很多時候我們所需要的軟件都是可以定制的,我需要什么就安裝什么,大多數二進制代碼都是一鍵裝全,所以自由度並不高!
3:方便運維、開發人員維護,我們的源碼是可以打包二進制的,但是對於這個軟件的打包都會有一份代價不小的額外工作,包括維護,所以如果是源碼的話,軟件產商會直接維護,但是如果是二進制的話,一般都是Linux發行商提供!
什么是LAMP
LAMP=Linux Apache Mysql/MariaDB PHP/Perl/Python 這些軟件都是開源免費的軟件,幾個程序各自是獨立的,經常為了達到我們需要的效果而協同工作,組成了我們
常見的LAMP架構平台!LAMP是世界上最流行的組合,當然同時也有Nginx,也就是LNMP: LAMP 相對於 NGINX 來說較為安全,但是Nginx處理高並發比Apache要強,
NGINX 相對於 LAMP 來說安全較為差一點,同樣的配制環境負載遠遠高於 LAMP 向國內的一些大公司,淘寶、新浪都在用這一些 NGINX,向那么大的公司網站需要用到服務器群用LAMP搭建環境成本遠遠大於NGINX。打個比方本來1000000W訪問量需要 10台LAMP環境服務器才能完成,但是使用NGINX也許只需要5、6台這樣一來對於這樣的公司來說就大大的節約了成本。
從網站的流量上來說,70%以上的訪問流量是LAMP來提供的,LAMP是最強大的網站解決方案,在以前這句話沒有錯,但是在現在,這句話有待證實!!!因為在以后的過程中,會發現我們會使用的架構是Nginx和Apache結合使用:使用Nginx可以做集群等相關配置,可以和apache一起使用,有的會用apache去跑php,然后用nginx做反向代理,比如apache運行在8080端口,nginx在80端口,訪問php文件時,反向代理到apache,靜態頁通過nginx處理。nginx支持高並發,apache對php的運行比較穩定。
常見的網頁類型:htm,html,shtml,stm.php,asp,aspx,shtm,jsp等等Apache本事只處理靜態頁面,處理動態頁面需要使用libphp5.so這個模塊去工作,編譯php也其實
是將一個至關重要的模塊打入到apache內部,然后apache收到php請求,將請求交給這個模塊來處理!
Apache工作原理
Apache本身只處理html靜態語言頁面,當客戶端需要訪問php頁面的時候,Apache會調用libphp5.so這個模塊去工作,這個模塊會把php頁面轉換成html靜態頁面,讓Apache處理,Apache處理過,會返回給客戶端
LAMP相關網站
Apache=http://httpd.apache.org/ httpd主程序包
MySQL=http://dev.mysql.com/downloads/mysql/ mysql主程序包
PHP=http://php.net/downloads.php php主程序包
apr=http://apr.apache.org/ apr是httpd的依賴包
apr-util=http://apr.apache.org/ apr-util是httpd的第二個依賴包
apr和apr-util這個兩個軟件是對后端服務軟件進行優化的,
apr-util只是在apr的基礎上提供了更多的數據結構和操作系統封裝接口而已。
pcre 是httpd的第三個依賴包 http://pcre.org/
PCRE(Perl Compatible Regular Expressions中文含義:perl語言兼容正則表達式)是一個用C語言編寫的正則表達式函數庫,PCRE被廣泛使用在許多開源軟件之中,最著名的莫過於Apache HTTP服務器和PHP腳本語言、R腳本語言,此外,正如從其名字所能看到的,PCRE也是perl語言的缺省正則庫。
編譯安裝Apache
第一步:安裝依賴包
[root@ken ~]# yum install gcc gcc-c++ ncurses-devel ncurses pcre pcre-devel openssl-devel zlib-devel -y
第二步:上傳安裝包
[root@ken ~]# ls apr-1.5.2.tar.gz apr-util-1.5.4.tar.gz httpd-2.4.20.tar.gz
第三步:解壓apr,apr-util安裝包
[root@ken ~]# tar -xf apr-util-1.5.4.tar.gz [root@ken ~]# tar -xf apr-1.5.2.tar.gz
第四步:編譯安裝apr
[root@ken ~]# cd apr-1.5.2 [root@ken apr-1.5.2]# ./configure --prefix=/usr/local/apr [root@ken apr-1.5.2]# make && make install
第五步:編譯安裝apr-util
[root@ken apr-1.5.2]# cd .. [root@ken ~]# cd apr-util-1.5.4 [root@ken apr-util-1.5.4]# ./configure --with-apr=/usr/local/apr/ --prefix=/usr/local/apr-util [root@ken apr-util-1.5.4]# make && make install
第六步:安裝apache
[root@ken apr-util-1.5.4]# cd .. [root@ken ~]# tar xf httpd-2.4.20.tar.gz [root@ken ~]# cd httpd-2.4.20 [root@ken httpd-2.4.20]# ./configure \ > --prefix=/usr/local/httpd2.4/ \ > --sysconfdir=/etc/httpd2.4/conf/ \ > --enable-so \ > --enable-ssl \ > --enable-cgi \ > --enable-rewrite \ > --enable-zlib \ > --enable-pcre \ > --with-apr=/usr/local/apr \ > --with-apr-util=/usr/local/apr-util \ > --with-mpm=event \ > --enable-deflate \ > --enable-mpms-shared=all \ > --enable-modules=all && make && make install
第七步:啟動apache
[root@ken httpd-2.4.20]# cd /usr/local/httpd2.4/bin/ [root@ken bin]# ls ab checkgid envvars-std htdbm httpd rotatelogs apachectl dbmmanage fcgistarter htdigest httxt2dbm apxs envvars htcacheclean htpasswd logresolve [root@ken bin]# ./apachectl start AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::20c:29ff:fe13:a149. Set the 'ServerName' directive globally to suppress this message [root@ken bin]# ss -tnl | grep 80 LISTEN 0 128 :::80 :::*
第八步:瀏覽器訪問
輸入Linux主機IP地址即可訪問
使用apache部署京東網站(靜態網站)
第一步:關閉防火牆
[root@ken ~]# setenforce 0 [root@ken ~]# systemctl stop firewalld
第二步:下載httpd
[root@ken ~]# yum install httpd -y
第三步:上傳京東安裝包至網站根目錄之下
[root@ken ~]# cd /var/www/html/ [root@ken html]# ls [root@ken html]# rz [root@ken html]# ls jd.zip [root@ken html]#
第四步:下載unzip並解壓
[root@ken html]# yum install unzip -y [root@ken html]# unzip jd.zip
[root@ken html]# ls
jd jd.zip
第五步:啟動httpd
[root@ken html]# systemctl restart httpd
第六步:瀏覽器訪問
yum一鍵安裝LAMP架構
[root@ken ~]# yum install httpd mariadb-server php php-mysql -y
php-mysql用於php與數據庫的通信
基於LAMP架構上線博客系統(動態網站)
第一步:安裝LAMP
[root@ken ~]# yum install httpd mariadb-server php php-mysql -y
第二步:啟動數據庫並創建數據庫
[root@ken ~]# mysql ... mysql> create database ken; #創建數據庫ken Query OK, 1 row affected (0.00 sec) mysql> grant all on ken.* to ken@"localhost" identified by "123"; #創建用戶ken,密碼為123 Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; #刷新授權表 Query OK, 0 rows affected (0.00 sec)
第三步:准備wordpress安裝包
[root@ken ~]# cd /var/www/html [root@ken html]# rz z waiting to receive.**B0100000023be50 [root@ken html]# ls wordpress-3.3.1-zh_CN.zip [root@ken html]# yum install unzip -y [root@ken html]# unzip wordpress-3.3.1-zh_CN.zip [root@ken html]# ls wordpress wordpress-3.3.1-zh_CN.zip
第四步:配置wordpress
[root@ken html]# cd wordpress [root@ken wordpress]# cp wp-config-sample.php wp-config.php [root@ken wordpress]# vim wp-config.php ... // ** MySQL 設置 - 具體信息來自您正在使用的主機 ** // /** WordPress 數據庫的名稱 */ define('DB_NAME', 'ken'); #填寫數據庫名 /** MySQL 數據庫用戶名 */ define('DB_USER', 'ken'); #填寫數據庫用戶名 /** MySQL 數據庫密碼 */ define('DB_PASSWORD', '123'); #數據庫密碼 /** MySQL 主機 */ define('DB_HOST', 'localhost'); #主機名 ...
第五步:重啟httpd服務
[root@ken ~]# systemctl restart httpd
第六步:瀏覽器測試
電腦瀏覽器輸入IP/wordpress/index.php
輸入用戶名和密碼
登錄成功