Linux學習第十一週總結

linux學習第十一週總結

  • http協議和APACHE
  • 實現LAMP架構
  • 日誌管理
  • 網絡文件共享服務

    一 、HTTP協議和apache

    1.HTTP 簡介
    HTTP協議是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是用於從萬維網(WWW:World Wide Web )服務器傳輸超文本到本地瀏覽器的傳送協議。

HTTP是一個基於TCP/IP通信協議來傳遞數據(HTML 文件, 圖片文件, 查詢結果等)。

HTTP是一個屬於應用層的面向對象的協議,由於其簡捷、快速的方式,適用於分佈式超媒體信息系統。它於1990年提出,經過幾年的使用與發展,得到不斷地完善和擴展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的規範化工作正在進行之中,而且HTTP-NG(Next Generation of HTTP)的建議已經提出。

HTTP協議工作於客戶端-服務端架構爲上。瀏覽器作爲HTTP客戶端通過URL向HTTP服務端即WEB服務器發送所有請求。Web服務器根據接收到的請求後,向客戶端發送響應信息。

HTTP 工作原理

HTTP協議工作於客戶端-服務端架構上。瀏覽器作爲HTTP客戶端通過URL向HTTP服務端即WEB服務器發送所有請求。

Web服務器有:Apache服務器,IIS服務器(Internet Information Services)等。

Web服務器根據接收到的請求後,向客戶端發送響應信息。

HTTP默認端口號爲80,但是你也可以改爲8080或者其他端口。

主要特點

1、簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規定了客戶與服務器聯繫的類型不同。由於HTTP協議簡單,使得HTTP服務器的程序規模小,因而通信速度很快。

2、靈活:HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。

3.無連接:無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開連接。採用這種方式可以節省傳輸時間。

4.無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味着如果後續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。
5、支持B/S及C/S模式。

HTTP之URL
HTTP使用統一資源標識符(Uniform Resource Identifiers, URI)來傳輸數據和建立連接。URL是一種特殊類型的URI,包含了用於查找某個資源的足夠的信息

URL,全稱是UniformResourceLocator, 中文叫統一資源定位符,是互聯網上用來標識某一處資源的地址。以下面這個URL爲例,介紹下普通URL的各部分組成:

http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name
從上面的URL可以看出,一個完整的URL包括以下幾部分:
1.協議部分:該URL的協議部分爲“http:”,這代表網頁使用的是HTTP協議。在Internet中可以使用多種協議,如HTTP,FTP等等本例中使用的是HTTP協議。在"HTTP"後面的“//”爲分隔符

2.域名部分:該URL的域名部分爲“www.aspxfans.com”。一個URL中,也可以使用IP地址作爲域名使用

3.端口部分:跟在域名後面的是端口,域名和端口之間使用“:”作爲分隔符。端口不是一個URL必須的部分,如果省略端口部分,將採用默認端口

4.虛擬目錄部分:從域名後的第一個“/”開始到最後一個“/”爲止,是虛擬目錄部分。虛擬目錄也不是一個URL必須的部分。本例中的虛擬目錄是“/news/”

5.文件名部分:從域名後的最後一個“/”開始到“?”爲止,是文件名部分,如果沒有“?”,則是從域名後的最後一個“/”開始到“#”爲止,是文件部分,如果沒有“?”和“#”,那麼從域名後的最後一個“/”開始到結束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一個URL必須的部分,如果省略該部分,則使用默認的文件名

6.錨部分:從“#”開始到最後,都是錨部分。本例中的錨部分是“name”。錨部分也不是一個URL必須的部分

7.參數部分:從“?”開始到“#”爲止之間的部分爲參數部分,又稱搜索部分、查詢部分。本例中的參數部分爲“boardID=5&ID=24618&page=1”。參數可以允許有多個參數,參數與參數之間用“&”作爲分隔符。

(原文:http://blog.csdn.net/ergouge/article/details/8185219

Get請求例子,使用Charles抓取的request:

GET /562f25980001b1b106000338.jpg HTTP/1.1
Host    img.mukewang.com
User-Agent    Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
Accept    image/webp,image/*,*/*;q=0.8
Referer    http://www.imooc.com/
Accept-Encoding    gzip, deflate, sdch
Accept-Language    zh-CN,zh;q=0.8
第一部分:請求行,用來說明請求類型,要訪問的資源以及所使用的HTTP版本.
GET說明請求類型爲GET,[/562f25980001b1b106000338.jpg]爲要訪問的資源,該行的最後一部分說明使用的是HTTP1.1版本。

第二部分:請求頭部,緊接着請求行(即第一行)之後的部分,用來說明服務器要使用的附加信息
從第二行起爲請求頭部,HOST將指出請求的目的地.User-Agent,服務器端和客戶端腳本都能訪問它,它是瀏覽器類型檢測邏輯的重要基礎.該信息由你的瀏覽器來定義,並且在每個請求中自動發送等等

第三部分:空行,請求頭部後面的空行是必須的
即使第四部分的請求數據爲空,也必須有空行。

第四部分:請求數據也叫主體,可以添加任意的其他數據。
這個例子的請求數據爲空。

POST請求例子,使用Charles抓取的request:
POST / HTTP1.1
Host:www.wrox.com
User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Content-Type:application/x-www-form-urlencoded
Content-Length:40
Connection: Keep-Alive

name=Professional%20Ajax&publisher=Wiley
第一部分:請求行,第一行明瞭是post請求,以及http1.1版本。
第二部分:請求頭部,第二行至第六行。
第三部分:空行,第七行的空行。
第四部分:請求數據,第八行。

一次完整的http請求處理過程

1、建立連接:接收或拒絕連接請求

2、接收請求:接收客戶端請求報文中對某資源的一次請求的過程

Web訪問響應模型(Web I/O)
單進程I/O模型:啓動一個進程處理用戶請求,而且一次只處理一個,多個請求被串行響應
多進程I/O模型:並行啓動多個進程,每個進程響應一個連接請求
複用I/O結構:啓動一個進程,同時響應N個連接請求
實現方法:多線程模型和事件驅動
多線程模型:一個進程生成N個線程,每線程響應一個連接請求
事件驅動:一個進程處理N個請求
複用的多進程I/O模型:啓動M個進程,每個進程響應N個連接請求,同時接收M*N個請求

3、處理請求:服務器對請求報文進行解析,並獲取請求的資源及請求方法等相關信息,根據方法,資源,首部和可選的主體部分對請求進行處理
元數據:請求報文首部

<method> <URL> <VERSION>
HEADERS 格式 name:value
<request body>
示例:
Host: www.magedu.com 請求的主機名稱
Server: Apache/2.4.7
HTTP常用請求方式,Method
GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS

4、訪問資源:

服務器獲取請求報文中請求的資源web服務器,即存放了web資源的服務器,負責向請求者提供對方請求的靜態資源,或動態運行後生成的資源
資源放置於本地文件系統特定的路徑:DocRoot
DocRoot  /var/www/html
/var/www/html/images/logo.jpg
http://www.magedu.com/images/logo.jpg
web服務器資源路徑映射方式:
(a) docroot
(b) alias
(c) 虛擬主機docroot
(d) 用戶家目錄docroot

5、構建響應報文:

一旦Web服務器識別除了資源,就執行請求方法中描述的動作,並返回響應報文。響應報文中 包含有響應狀態碼、響應首部,如果生成了響應主體的話,還包括響應主體
1)響應實體:如果事務處理產生了響應主體,就將內容放在響應報文中回送過去。響應報文中通常包括:
描述了響應主體MIME類型的Content-Type首部
描述了響應主體長度的Content-Length
實際報文的主體內容
2)URL重定向:web服務構建的響應並非客戶端請求的資源,而是資源另外一個訪問路徑
永久重定向:http://www.360buy.com
臨時重定向:http://www.taobao.com
3)MIME類型:
Web服務器要負責確定響應主體的MIME類型。多種配置服務器的方法可將MIME類型與資源管理起來
魔法分類:Apache web服務器可以掃描每個資源的內容,並將其與一個已知模式表(被稱爲魔法文件)進行匹配,以決定每個文件的MIME類型。這樣做可能比較慢,但很方便,尤其是文件沒有標準擴展名時
顯式分類:可以對Web服務器進行配置,使其不考慮文件的擴展名或內容,強制特定文件或目錄內容擁有某個MIME類型
類型協商: 有些Web服務器經過配置,可以以多種文檔格式來存儲資源。在這種情況下,可以配置Web服務器,使其可以通過與用戶的協商來決定使用哪種格式(及相關的MIME類型)"最好"

6、發送響應報文

Web服務器通過連接發送數據時也會面臨與接收數據一樣的問題。服務器可能有很多條到各個客戶端的連接,有些是空閒的,有些在向服務器發送數據,還有一些在向客戶端回送響應數據。服務器要記錄連接的狀態,還要特別注意對持久連接的處理。對非持久連接而言,服務器應該在發送了整條報文之後,關閉自己這一端的連接。對持久連接來說,連接可能仍保持打開狀態,在這種情況下,服務器要正確地計算Content-Length首部,不然客戶端就無法知道響應什麼時候結束了

7、記錄日誌

最後,當事務結束時,Web服務器會在日誌文件中添加一個條目,來描述已執行的事務

Httpd 常見配置

1、顯示服務器版本信息

ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full
ServerTokens Prod[uctOnly] :Server: Apache
ServerTokens Major: Server: Apache/2
ServerTokens Minor: Server: Apache/2.0
ServerTokens Min[imal]: Server: Apache/2.0.41
ServerTokens OS: Server: Apache/2.0.41 (Unix)
ServerTokens Full (or not specified): Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2
This setting applies to the entire server and cannot be enabled or disabled on a virtualhost-by-virtualhost basis.
After version 2.0.44, this directive also controls the information presented by the ServerSignature directive.
建議使用:ServerTokens Prod

2、修改監聽的IP和Port

Listen [IP:]PORT
(1) 省略IP表示爲本機所有IP
(2) Listen指令至少一個,可重複出現多次
Listen 80
Listen 8080
示例:
Listen 192.168.1.100:8080
Lsten 80

3、持久連接

Persistent Connection:連接建立,每個資源獲取完成後不會斷開連接,而是繼續等待其它的請求完成,默認關閉持久連接
斷開條件:時間限制:以秒爲單位, 默認5s,httpd-2.4 支持毫秒級
副作用:對併發訪問量大的服務器,持久連接會使有些請求得不到響應
折衷:使用較短的持久連接時間
設置:KeepAlive On|Off
KeepAliveTimeout 15
測試:telnet WEB_SERVER_IP PORT
GET /URL HTTP/1.1
Host: WEB_SERVER_IP

4、DSO: Dynamic Shared Object

加載動態模塊配置,不需重啓即生效
/etc/httpd/conf/httpd.conf
Include conf.modules.d/*.conf
配置指定實現模塊加載格式:
LoadModule <mod_name> <mod_path>
模塊文件路徑可使用相對路徑:相對於ServerRoot(默認/etc/httpd)
示例:LoadModule auth_basic_module modules/mod_auth_basic.so
動態模塊路徑: /usr/lib64/httpd/modules/
查看靜態編譯的模塊
httpd -l
查看靜態編譯及動態裝載的模塊
httpd –M

5、MPM( Multi-Processing Module)多路處理模塊
prefork, worker, event
切換使用的MPM
/etc/httpd/conf.modules.d/00-mpm.conf
啓用要啓用的MPM相關的LoadModule指令即可

prefork的配置:

StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256 最多進程數,最大20000
MaxRequestsPerChild 4000 子進程最多能處理的請求數量。在處理MaxRequestsPerChild 個請求之後,子進程將會被父進程終止,這時候子進程佔用的內存就會釋放(爲0時永遠不釋放)

worker的配置:

ServerLimit 16
StartServers 2
MaxRequestWorkers 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25

6、定義'Main' server的文檔頁面路徑

DocumentRoot “/path”
文檔路徑映射:
DocumentRoot指向的路徑爲URL路徑的起始位置
示例:
DocumentRoot "/app/data“
http://HOST:PORT/test/index.html --> /app/data/test/index.html
注意:SELinux和iptables的狀態

7.定義站點主頁面
DirectoryIndex index.html

8、站點訪問控制常見機制

可基於兩種機制指明對哪些資源進行何種訪問控制
訪問控制機制有兩種:客戶端來源地址,用戶賬號
文件系統路徑:
<Directory “/path">
...
</Directory>
<File “/path/file”>
...
</File>
<FileMatch "PATTERN">
...
</FileMatch>

URL路徑:
<Location "">
...
</Location>
<LocationMatch "">
...
</LocationMatch>

示例:
<FilesMatch "\.(gif|jpe?g|png)$">
<Files “?at.*”> 通配符
<Location /status>
<LocationMatch "/(extra|special)/data">

9、<Directory>中“基於源地址”實現訪問控制

(1) Options:後跟1個或多個以空白字符分隔的選項列表
在選項前的+,- 表示增加或刪除指定選項

常見選項:
Indexes:指明的URL路徑下不存在與定義的主頁面資源相符的資源文件時,返回索引列表給用戶
FollowSymLinks:允許訪問符號鏈接文件所指向的源文件
None:全部禁用
All: 全部允許

示例:
<Directory /web/docs> Options Indexes FollowSymLinks </Directory> <Directory /web/docs/spec> Options FollowSymLinks </Directory>

(2) AllowOverride

與訪問控制相關的哪些指令可以放在指定目錄下的.htaccess(由AccessFileName指定)文件中,覆蓋之前的配置指令
只對<directory>語句有效
AllowOverride All: .htaccess中所有指令都有效
AllowOverride None: .htaccess 文件無效
AllowOverride AuthConfig .htaccess 文件中,除了AuthConfig 其它指令都無法生效

(3) 基於IP的訪問控制:

無明確授權的目錄,默認拒絕
允許所有主機訪問:Require all granted
拒絕所有主機訪問:Require all denied
控制特定的IP訪問:
Require ip IPADDR:授權指定來源的IP訪問
Require not ip IPADDR:拒絕特定的IP訪問
控制特定的主機訪問:
Require host HOSTNAME:授權特定主機訪問
Require not host HOSTNAME:拒絕 HOSTNAME:
FQDN:特定主機
domin.tld:指定域名下的所有主機

不能有失敗,至少有一個成功匹配才成功,即失敗優先
<RequireAll>
Require all granted
Require not ip 172.16.1.1 拒絕特定IP
</RequireAll>
多個語句有一個成功,則成功,即成功優先
<RequireAny>
Require all denied
require ip 172.16.1.1 允許特定IP
</RequireAny

10、日誌設定

日誌類型:
    訪問日誌
    錯誤日誌
錯誤日誌:
    ErrorLog logs/error_log
    LogLevel warn
    LogLevel 可選值: debug, info, notice, warn,error, crit, alert, emerg

訪問日誌:
定義日誌格式:LogFormat format strings
LogFormat "%h %l %u %{%F %T}t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" testlog
使用日誌格式:
CustomLog logs/access_log testlog
參考幫助:http://httpd.apache.org/docs/2.4/mod/mod_log_config.html#formats
%h 客戶端IP地址
%l 遠程用戶,啓用mod_ident纔有效,通常爲減號“-”
%u 驗證(basic,digest)遠程用戶,非登錄訪問時,爲一個減號“-”
%t 服務器收到請求時的時間
%r First line of request,即表示請求報文的首行;記錄了此次請求的“方法”,“URL”以及協議版本
%>s 響應狀態碼
%b 響應報文的大小,單位是字節;不包括響應報文http首部
%{Referer}i 請求報文中首部“referer”的值;即從哪個頁面中的超鏈接跳轉至當前頁面的
%{User-Agent}i 請求報文中首部“User-Agent”的值;即發出請求的應用程序

11、設定默認字符集
AddDefaultCharset UTF-8 此爲默認值
中文字符集:GBK, GB2312, GB18030

12、定義路徑別名

格式:Alias /URL/ "/PATH/"
DocumentRoot "/www/htdocs"
http://www.magedu.com/download/bash.rpm
==>/www/htdocs/download/bash.rpm
Alias /download/ "/rpms/pub/"
http://www.magedu.com/download/bash.rpm
==>/rpms/pub/bash.rpm
http://www.magedu.com/images/logo.png
==>/www/htdocs/images/logo.png

13、基於用戶的訪問控制
認證質詢:WWW-Authenticate:響應碼爲401,拒絕客戶端請求,並說明要求客戶端提供賬號和密碼
認證:Authorization:客戶端用戶填入賬號和密碼後再次發送請求報文;認證通過時,則服務器發送響應的資源
認證方式兩種:
basic:明文
digest:消息摘要認證,兼容性差
安全域:需要用戶認證後方能訪問的路徑;應該通過名稱對其進行標識,以便於告知用戶認證的原因
用戶的賬號和密碼
虛擬賬號:僅用於訪問某服務時用到的認證標識
存儲:文本文件,SQL數據庫,ldap目錄存儲,nis等

14、實現用戶家目錄的http共享
基於模塊mod_userdir.so實現
相關設置:

vim /etc/httpd/conf.d/userdir.conf
<IfModule mod_userdir.c>
#UserDir disabled
UserDir public_html #指定共享目錄的名稱
</IfModule>
準備目錄
su – wang;mkdir ~/public_html
setfacl –m u:apache:x ~wang
訪問
http://localhost/~wang/index.html

15、ServerSignature On | Off | EMail
當客戶請求的網頁並不存在時,服務器將產生錯誤文檔,如果打開了 ServerSignature選項,錯誤文檔的最後一行將包含服務器的名字、Apache的版本等信息,如果不對外顯示這些信息,就可以將這個參數設置爲Off
設置爲Email,將顯示ServerAdmin 的Email提示

status頁面

LoadModule status_module modules/mod_status.so
<Location "/status">
SetHandler server-status
</Location>
ExtendedStatus On 顯示擴展信息

17、虛擬主機

站點標識: socket
IP相同,但端口不同
IP不同,但端口均爲默認端口
FQDN不同: 請求報文中首部 Host: www.magedu.com
有三種實現方案:
基於ip:爲每個虛擬主機準備至少一個ip地址
基於port:爲每個虛擬主機使用至少一個獨立的port
基於FQDN:爲每個虛擬主機使用至少一個FQDN

二、LAMP

LAMP介紹

LAM(M)P:
L:linux
A:apache (httpd)
M:mysql, mariadb
M:memcached
P:php, perl, python

WEB資源類型:
靜態資源:原始形式與響應內容一致,在客戶端瀏覽器執行
動態資源:原始形式通常爲程序文件,需要在服務器端執行之後,將執行
結果返回給客戶端

Web相關語言
客戶端技術: html,javascript,css,jpg
服務器端技術:php, jsp,python,asp

CGI:Common Gateway Interface
可以讓一個客戶端,從網頁瀏覽器通過http服務器向執行在網絡服務器上的程
序傳輸數據;CGI描述了客戶端和服務器程序之間傳輸的一種標準

請求流程:
Client -- (http) --> httpd -- (cgi) --> application server (program file)
-- (mysql) --> mysql

php: 腳本編程語言、嵌入到html中的嵌入式web程序語言
基於zend編譯成opcode(二進制格式的字節碼,重複運行,可省略編譯環境)

實現過程

Linux上的Mysql安裝及配置

1.給Mysql的數據目錄創建單獨的邏輯卷

mkdir /mydata 

#創建存放數據的目錄 

fdisk /dev/sda 

#新建分區屬性爲8e 

pvcreate /dev/sda5 

vgcreate myvg /dev/sda5 

lvcreate –L 4G –n mylv myvg 

mke2fs –L MYDATA –j /dev/myvg/mylv  

vim /etc/fstab    

LABEL=MYDATA                    /mydata                ext3        defaults                0 0    

#加入這一行實現開機自動掛載 

mount –a 

mkdir /mydata/data 

2.創建mysql用戶

groupadd –g 3306 mysql 

useradd –g 3306 –u 3306 –M –s /sbin/nologin 

chown –R mysql:mysql /mydata

3.解壓mysql-5.5.15-linux2.6-i686.tar.gz,使用其中腳本進行初始化

tar xvf mysql-5.5.15-linux2.6-i686.tar.gz –C /usr/local/ 

cd /usr/local 

ln –vs mysql-5.5.15-linux2.6-i686 mysql 

cd /usr/local/mysql 

chown –R mysql:mysql ./* 

scripts/mysql_install_db --user=mysql --datadir=/mydata/data 

#初始化Mysql用戶和數據路徑 

chown –R root ./* 

#再將屬主交還給root

4.創建mysqld服務

cp /usr/local/mysql/support-files/mysql.server    /etc/init.d/mysqld 

#導入服務腳本 

chkconfig –add mysqld

5.創建Mysql的配置文件

cp /usr/local/mysql/support-files/my-large.cnf /etc/my.cnf 

vim /etc/my.cnf 

#找到[mysqld]下面的內容添加 

datadir= /mydata/data

6.加入mysql命令

vim /etc/profile 

PATH=$PATH:/usr/loca/mysql/bin 

#添加這一行

7.加入mysql庫文件的路徑

vim /etc/ld.so.conf.d/mysql.conf 

/usr/local/mysql/lib 

#寫入這一行

8.設置頭文件

ln –vs /usr/local/mysql/include /usr/include/mysql

9.添加man文件(如果你以後不想使用mysql的man文件不添加也是可以的)

vim /etc/man.conf 

MANPATH /usr/local/mysql/man 

#添加這一行

service mysql start

#啓動mysql服務

netstat –tnl

#查看3306端口處於監聽狀態,說明已經配置成功。

編譯安裝Apache

1.解壓httpd-2.2.19.tar.bz2軟件包

tar xvf httpd-2.2.19.tar.bz2

  1. 設置安裝規則、編譯、安裝

./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable=ssl --enable-modules=most --enable-mods-share=most --enable-so

make

make install

  1. 製作服務啓動腳本

vim /etc/init.d/httpd

#!/bin/bash

. /etc/rc.d/init.d/functions

if [ -f /etc/sysconfig/httpd ]; then

            . /etc/sysconfig/httpd 

fi

HTTPD_LANG=${HTTPD_LANG-"C"}

INITLOG_ARGS=""

apachectl=/usr/local/apache/bin/apachectl

httpd=${HTTPD-/usr/local/apache/bin/httpd}

#注意此上兩行中路徑要與你的安裝路徑一致

prog=httpd

pidfile=${PIDFILE-/var/run/httpd.pid}

lockfile=${LOCKFILE-/var/lock/subsys/httpd}

RETVAL=0

start() {

            echo -n $"Starting $prog: " 

            LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS 

            RETVAL=$? 

            echo 

            [ $RETVAL = 0 ] && touch ${lockfile} 

            return $RETVAL 

}

stop() {

            echo -n $"Stopping $prog: " 

            killproc -p ${pidfile} -d 10 $httpd 

            RETVAL=$? 

            echo 

            [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile} 

}

reload() {

    echo -n $"Reloading $prog: " 

    if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then 

            RETVAL=$? 

            echo $"not reloading due to configuration syntax error" 

            failure $"not reloading $httpd due to configuration syntax error" 

    else 

            killproc -p ${pidfile} $httpd -HUP 

            RETVAL=$? 

    fi 

    echo 

}

case "$1" in

start) 

            start 

            ;; 

stop) 

            stop 

            ;; 

status) 

            status -p ${pidfile} $httpd 

            RETVAL=$? 

            ;; 

restart) 

            stop 

            start 

            ;; 

condrestart) 

            if [ -f ${pidfile} ] ; then 

                            stop 

                            start 

            fi 

            ;; 

reload) 

            reload 

            ;; 

graceful|help|configtest|fullstatus) 

            $apachectl $@ 

            RETVAL=$? 

            ;; 

*) 

            echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}" 

            exit 1 

esac

exit $RETVAL

vim /etc/httpd/httpd.conf

PidFile "/var/run/httpd.pid"

#添加這一行

chkconfig --add httpd

service httpd start

#啓動httpd服務

netstat -tnl

#查看80端口處於監聽狀態,說明已經配置成功。

PHP的編譯安裝

  1. 解壓php-5.3.6.tar.bz2軟件包

tar xvf php-5.3.6.tar.bz2

  1. 設置安裝選項、編譯、安裝

./configure --prefix=/usr/local/php5 --sysconfdir=/etc/php --enable-mbstring --with-apxs2=/usr/local/apache/bin/apxs --with-mysql=/usr/local/mysql --with-libmcrypt --with-gd --with-mysqli

make

makeinstall

  1. 加入命令路徑

vim /etc/profile

PATH=$PATH:/usr/loca/php5/bin

#添加這一行

  1. 加入php庫文件路徑

vim /etc/ld.so.conf.d/php.conf

/usr/local/php5/lib

  1. 創建php配置文件

cp php.ini-production /usr/local/php5/lib/php.ini

#注意php.ini-production文件位於php-5.3.6.tar.bz2的解壓目錄

  1. 修改httpd服務配置文件使其支持php

vim /etc/httpd/httpd.conf

AddType Application/x-httpd-php .php

AddType Application/x-httpd-php-source .phps

#添加這兩行在AddType xxxxxx行附近位置

DirectoryIndex index.php index.html

#添加index.php

service httpd restart

#重啓httpd服務

到此簡單的LAMP就配置成功了

LAMP的測試

爲了測試LAMP,作者在這裏選用了

wordpress-3.0.4-zh_CN.zip

phpMyAdmin-3.4.3.2-all-languages.tar.bz2

要使這兩個網站都能在新搭建的LAMP運行,就得虛擬主機來實現。

這裏作者選用基於主機名的虛擬主機(基於ip的虛擬主機過於消耗ipv4資源;基於端口的虛擬主機只有一個主頁能使用默認80端口)

使用於主機名的虛擬主機配置網站:

  1. 配置虛擬主機

vim /etc/httpd/httpd.conf

#DocumentRoot "/usr/local/apache/htdocs"

#把此行註釋

Include /etc/httpd/extra/httpd-vhosts.conf

#把此行啓用

vim /etc/httpd/extra/httpd-vhosts.conf

#添加內容

<VirtualHost *:80>

DocumentRoot "/web/phpmyadmin" #網站所在目錄

ServerName "phpmyadmin.redhat_hu.com" #虛擬主機名

ErrorLog "logs/phpmyadmin.error" #錯誤日誌

CustomLog "logs/phpmyadmin.access" combined #訪問日誌

</VirtualHost>

<Directory "/web/phpmyadmin">

Order allow,deny

Allow from all

</Directory>

#設置訪問控制爲允許所有

<VirtualHost *:80>

DocumentRoot "/web/wordpress"

ServerName "wordpress.redhat_hu.com"

ErrorLog "logs/wordpress.error"

CustomLog "logs/wordpress.access" combined

</VirtualHost>

<Directory "/web/wordpress">

Order allow,deny

Allow from all

</Directory>

2.配置網站鏈接數據庫

mkdir /web/{phpmyadmin,wordpress}

#創建網頁所在目錄 (此目錄最好掛載邏輯卷,具體步驟見上文)

tar xvf phpMyAdmin-3.4.3.2-all-languages.tar.bz2

cp -R phpMyAdmin-3.4.3.2/* /web/phpmyadmin

unzip wordpress-3.0.4-zh_CN.zip

cp -R wordpress/* /web/ wordpress

#將兩個網站文件放入對應文件夾

mv /web/wordpress/wp-config-simple.php /web/wordpress/wp-config.php

vim /web/wordpress/wp-config.php

define('DB_NAME', 'wordpress');

define('DB_USER', 'root');

define('DB_PASSWORD', 'redhat');

#設置對應數據庫名登錄用戶以及密碼

在mysql中創建數據庫

mysql

#未設置密碼可以直接登錄

mysql>CREATE DATABASE wordpress;

mysql>SET PASSWORD FOR root@localhost=PASSWORD('redhat');

mysql>FLUSH PRIVILEGES;

#設置密碼redhat

mysql>quit

全部配置完成

打開瀏覽器輸入網址進行測試。

Ps:由於作者使用的是VMware虛擬機,C:\WINDOWS\system32\drivers\etc\hosts

中加入如下兩行實現域名解析。

192.168.0.20 phpmyadmin.redhat_hu.com

192.168.0.20 wordpress.redhat_hu.com

三、日誌管理

日誌介紹
日誌:
歷史事件:時間,地點,人物,事件
日誌級別:事件的關鍵性程度,Loglevel

系統日誌服務:
sysklogd :CentOS 5之前版本
syslogd: system application 記錄應用日誌
klogd: linux kernel 記錄內核日誌

事件記錄格式:
日期時間 主機 進程[pid]: 事件內容
C/S架構:通過TCP或UDP協議的服務完成日誌記錄傳 送,將分佈在不同主
機的日誌實現集中管理

rsyslog

rsyslog特性:CentOS6和7
多線程
UDP, TCP, SSL, TLS, RELP
MySQL, PGSQL, Oracle實現日誌存儲
強大的過濾器,可實現過濾記錄日誌信息中任意部分
自定義輸出格式

ELK:elasticsearch, logstash, kibana
非關係型分佈式數據庫
基於apache軟件基金會jakarta項目組的項目lucene
Elasticsearch是個開源分佈式搜索引擎
Logstash對日誌進行收集、分析,並將其存儲供以後使用
kibana 可以提供的日誌分析友好的 Web 界面

程序包:rsyslog
主程序:/usr/sbin/rsyslogd
CentOS 6:service rsyslog {start|stop|restart|status}
CentOS 7:/usr/lib/systemd/system/rsyslog.service
配置文件:/etc/rsyslog.conf,/etc/rsyslog.d/*.conf
庫文件: /lib64/rsyslog/*.so
配置文件格式:由三部分組成
MODULES:相關模塊配置
GLOBAL DIRECTIVES:全局配置
RULES:日誌記錄相關的規則配置

RULES配置格式: facility.priority; facility.priority… target
facility:
    *: 所有的facility
    facility1,facility2,facility3,...:指定的facility列表
priority:
    *: 所有級別
    none:沒有級別,即不記錄
    PRIORITY:指定級別(含)以上的所有級別
    =PRIORITY:僅記錄指定級別的日誌信息
target:
    文件路徑:通常在/var/log/,文件路徑前的-表示異步寫入
    用戶:將日誌事件通知給指定的用戶,* 表示登錄的所有用戶
    日誌服務器:@host,把日誌送往至指定的遠程服務器記錄
    管道: | COMMAND,轉發給其它命令處理

啓用網絡日誌服務

通常的日誌格式:
    事件產生的日期時間 主機 進程(pid):事件內容
    如: /var/log/messages,cron,secure等
配置rsyslog成爲日誌服務器
    #### MODULES ####
    # Provides UDP syslog reception
    $ModLoad imudp
    $UDPServerRun 514
    # Provides TCP syslog reception
    $ModLoad imtcp
    $InputTCPServerRun 514

其它日誌
其它的日誌文件
/var/log/secure:系統安裝日誌,文本格式,應週期性分析
/var/log/btmp:當前系統上,用戶的失敗嘗試登錄相關的日誌信息,二進制格
式,lastb命令進行查看
/var/log/wtmp:當前系統上,用戶正常登錄系統的相關日誌信息,二進制格
式,last命令可以查看
/var/log/lastlog:每一個用戶最近一次的登錄信息,二進制格式,lastlog命令
可以查看
/var/log/dmesg:系統引導過程中的日誌信息,文本格式
文本查看工具查看
專用命令dmesg查看
/var/log/messages :系統中大部分的信息
/var/log/anaconda : anaconda的日誌

示例:rsyslog將日誌記錄於MySQL中

(1) 準備MySQL Server
(2) 在mysql server上授權rsyslog能連接至當前服務器
GRANT ALL ON Syslog.* TO 'USER'@'HOST' IDENTIFIED BY 'PASSWORD';
(3) 在rsyslog服務器上安裝mysql模塊相關的程序包
yum install rsyslog-mysql
(4) 爲rsyslog創建數據庫及表;
mysql -uUSERNAME -hHOST -pPASSWORD < /usr/share/doc/rsyslog-
7.4.7/mysql-createDB.sql
(5) 配置rsyslog將日誌保存到mysql中
#### MODULES ####
$ModLoad ommysql
#### RULES ####
facility.priority :ommysql:DBHOST,DBNAME,DBUSER, PASSWORD

示例:通過loganalyzer展示數據庫中的日誌

(1) 在rsyslog服務器上準備amp或nmp組合
yum install httpd php php-mysql php-gd
(2) 安裝LogAnalyzer
tar xf loganalyzer-4.1.5.tar.gz
cp -a loganalyzer-4.1.5/src /var/www/html/loganalyzer
cd /var/www/html/loganalyzer
touch config.php
chmod 666 config.php
(3)配置loganalyzer
systemctl start httpd.service
http://HOST/loganalyzer
MySQL Native, Syslog Fields, Monitorware
(4) 安全加強
cd /var/www/html/loganalyzer
chmod 644 config.php

四、文件共享服務

文件傳輸協議FTP
File Transfer Protocol 早期的三個應用級協議之一
基於C/S結構
雙通道協議:數據和命令連接
數據傳輸格式:二進制(默認)和文本
兩種模式:服務器角度
主動(PORT style):服務器主動連接
命令(控制):客戶端:隨機port ---服務器:tcp21
數據:客戶端:隨機port ---服務器:tcp20
被動(PASV style):客戶端主動連接
命令(控制):客戶端:隨機port --- 服務器:tcp21
數據:客戶端:隨機port ---服務器:隨機port
服務器被動模式數據端示例:
227 Entering Passive Mode (172,16,0,1,224,59)
服務器數據端口爲:224*256+59

FTP服務器:
Wu-ftpd,Proftpd,Pureftpd,ServU,IIS
vsftpd:Very Secure FTP Daemon,CentOS默認FTP服務器
高速,穩定,下載速度是WU-FTP的兩倍
ftp.redhat.com數據:單機最多可支持15000個併發

客戶端軟件:
ftp,lftp,lftpget,wget,curl
ftp -A ftpserver port -A主動模式 –p 被動模式
lftp –u username ftpserver
lftp username@ftpserver
lftpget ftp://ftpserver/pub/file
gftp:GUI centos5 最新版2.0.19 (11/30/2008)
filezilla,CuteFtp,FlashFXP,LeapFtp
IE ftp://username:password@ftpserver

狀態碼:

1XX:信息 125:數據連接打開
2XX:成功類狀態 200:命令OK 230:登錄成功
3XX:補充類 331:用戶名OK
4XX:客戶端錯誤 425:不能打開數據連接
5XX:服務器錯誤 530:不能登錄

vsftpd服務

由vsftpd包提供
不再由xinetd管理
用戶認證配置文件:/etc/pam.d/vsftpd
服務腳本: /usr/lib/systemd/system/vsftpd.service
/etc/rc.d/init.d/vsftpd
配置文件:/etc/vsftpd/vsftpd.conf
man 5 vsftpd.conf
格式:option=value
注意:= 前後不要有空格
匿名用戶(映射爲系統用戶ftp )共享文件位置:/var/ftp
系統用戶共享文件位置:用戶家目錄
虛擬用戶共享文件位置:爲其映射的系統用戶的家目錄

實現基於文件驗證的vsftpd虛擬用戶

一、創建用戶數據庫文件

•vim /etc/vsftpd/vusers.txt
wang
wangpass
mage
magepass
•cd /etc/vsftpd/
•db_load -T -t hash -f vusers.txt vusers.db
•chmod 600 vusers.db

二、創建用戶和訪問FTP目錄

•useradd -d /var/ftproot -s /sbin/nologin vuser
•chmod a=rx /var/ftproot/
•centos7 還需要執行以下操作:
•chmod -w /var/ftproot/
•mkdir /var/ftproot/upload
•setfacl -m u:vuser:rwx /var/ftproot/upload

三、創建pam配置文件

•vim /etc/pam.d/vsftpd.db
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers

四、指定pam配置文件

•vim /etc/vsftpd/vsftpd.conf
guest_enable=YES
guest_username=vuser
pam_service_name=vsftpd.db

五、SELinux設置:

禁用SELinux 或者 setsebool -P ftpd_full_access 1

六、虛擬用戶建立獨立的配置文件

mdkir /etc/vsftpd/vusers.d/ 創建配置文件存放的路徑
vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers.d/
cd /etc/vsftpd/vusers.d/ 進入此目錄
允許wang用戶可讀寫,其它用戶只讀
vim wang 創建各用戶自已的配置文件
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
vim mage 創建各用戶自已的配置文件
local_root=/ftproot 登錄目錄改變至指定的目錄

實驗:實現SMB共享

一、在samba服務器上安裝samba包

yum -y install samba

二、創建samba用戶和組

groupadd -r admins
useradd -s /sbin/nologin -G admins wang
smbpasswd -a wang
useradd -s /sbin/nologin mage
smbpasswd -a mage

三、創建samba共享目錄,並設置SElinux

mkdir /testdir/smbshare
chgrp admins /testdir/smbshare
chmod 2775 /testdir/smbshare
semanage fcontext -a -t samba_share_t '/testdir/smbshare(/.*)?'
restorecon -vvFR /testdir/smbshare

四、samba服務器配置

vim /etc/samba/smb.conf
security = user
passdb backend = tdbsam
[share]
path = /testdir/smbshare
write list = @admins
systemctl start smb nmb
systemctl enable smb nmb
firewall-cmd --permanent --add-service=samba
firewall-cmd --reload

五、samba客戶端訪問

安裝包
yum -y install cifs-utils
用wang用戶掛載smb共享並訪問
mkdir /mnt/wang
mount -o username=wang //smbserver/share /mnt/wang
echo "Hello wang" >/mnt/wang/wangfile.txt
用mage用戶掛載smb共享並訪問
mkdir /mnt/mage
mount -o username=mage //smbserver/share /mnt/mage
touch /mnt/mage/magefile.txt
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章