日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux上的web服务器搭建

發布時間:2025/3/15 linux 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux上的web服务器搭建 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Web服務器

基礎知識篇

1) https:基于opensslhttp

? ?http:hypertext transfer protocol 超文本傳輸協議

? ? ? ? ? ? 傳輸文本信息

? ? 80/tcp端口

htmlhypertext mark language ?超文本標記語言

c/s架構:client/server

cssCascading Style Sheet 風格樣式表/層疊樣式表

CGI :common gateway interface 通用網關接口

TCPTransmission Control Protocol 傳輸控制協議

UDP User Datagram Protocol的簡稱,用戶數據報協議

MIMEmultipurpose internet mail extensions 多功能聯網郵件擴展

URI: uniform resource indentifier 統一資源標識符

urluniform resource locator 統一資源定位

urnuniform resource name ?統一資源命名符

MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設計典范,用于組織代碼用一種業務邏輯和數據顯示分離的方法.

MPM:multipath processing module ?多功能進程模塊

? ? prefork--一個進程響應一個請求

worker:一個進程生成多個線程,一個線程響應一個請求

? ? event:事件驅動模式

HTTP協議詳解之請求篇

http請求由三部分組成,分別是:請求行、消息報頭、請求正文

1、請求行以一個方法符號開頭,以空格分開,后面跟著請求的URI和協議的版本,格式如下:Method Request-URI HTTP-Version CRLF ?
其中 Method表示請求方法;Request-URI是一個統一資源標識符;HTTP-Version表示請求的HTTP協議版本;CRLF表示回車和換行(除了作為結尾的CRLF外,不允許出現單獨的CRLF字符)。

請求方法(所有方法全為大寫)有多種,各個方法的解釋如下:
GET ? ? ?請求獲取Request-URI所標識的資源
POST ? ? Request-URI所標識的資源后附加新的數據
HEAD ? ? 請求獲取由Request-URI所標識的資源的響應消息報頭
PUT ? ? ?請求服務器存儲一個資源,并用Request-URI作為其標識
DELETE ? 請求服務器刪除Request-URI所標識的資源
TRACE ? ?請求服務器回送收到的請求信息,主要用于測試或診斷
CONNECT 保留將來使用
OPTIONS 請求查詢服務器的性能,或者查詢與資源相關的選項和需求
應用舉例:
GET方法:在瀏覽器的地址欄中輸入網址的方式訪問網頁時,瀏覽器采用GET方法向服務器獲取資源,eg:GET /form.html HTTP/1.1 (CRLF)

POST方法要求被請求服務器接受附在請求后面的數據,常用于提交表單。
egPOST /reg.jsp HTTP/ (CRLF)
Accept:p_w_picpath/gif,p_w_picpath/x-xbit,... (CRLF)
...
HOST:www.nit.edu.cn (CRLF)
Content-Length:22 (CRLF)
Connection:Keep-Alive (CRLF)
Cache-Control:no-cache (CRLF)
(CRLF) ? ? ? ? ?//CRLF表示消息報頭已經結束,在此之前為消息報頭
user=jeffrey&pwd=1234 ? //此行以下為提交的數據

HEAD方法與GET方法幾乎是一樣的,對于HEAD請求的回應部分來說,它的HTTP頭部中包含的信息與通過GET請求所得到的信息是相同的。利 用這個方法,不必傳輸整個資源內容,就可以得到Request-URI所標識的資源的信息。該方法常用于測試超鏈接的有效性,是否可以訪問,以及最近是否 更新。

HTTP協議詳解之請求篇

應用舉例:
GET方法:在瀏覽器的地址欄中輸入網址的方式訪問網頁時,瀏覽器采用GET方法向服務器獲取資源,eg:GET /form.html HTTP/1.1 (CRLF)

POST方法要求被請求服務器接受附在請求后面的數據,常用于提交表單。
egPOST /reg.jsp HTTP/ (CRLF)
Accept:p_w_picpath/gif,p_w_picpath/x-xbit,... (CRLF)
...
HOST:www.nit.edu.cn (CRLF)
Content-Length:22 (CRLF)
Connection:Keep-Alive (CRLF)
Cache-Control:no-cache (CRLF)
(CRLF) ? ? ? ? ?//CRLF表示消息報頭已經結束,在此之前為消息報頭
user=jeffrey&pwd=1234 ? //此行以下為提交的數據

HEAD方法與GET方法幾乎是一樣的,對于HEAD請求的回應部分來說,它的HTTP頭部中包含的信息與通過GET請求所得到的信息是相同的。利 用這個方法,不必傳輸整個資源內容,就可以得到Request-URI所標識的資源的信息。該方法常用于測試超鏈接的有效性,是否可以訪問,以及最近是否 更新。

HTTP協議詳解之響應篇

HTTP響應也是由三個部分組成,分別是:狀態行、消息報頭、響應正文
1、狀態行格式如下:
HTTP-Version Status-Code Reason-Phrase CRLF
其中,HTTP-Version表示服務器HTTP協議的版本;Status-Code表示服務器發回的響應狀態代碼;Reason-Phrase表示狀態代碼的文本描述。
狀態代碼有三位數字組成,第一個數字定義了響應的類別,且有五種可能取值:
1xx:指示信息--表示請求已接收,繼續處理
2xx:成功--表示請求已被成功接收、理解、接受
3xx:重定向--要完成請求必須進行更進一步的操作
4xx:客戶端錯誤--請求有語法錯誤或請求無法實現
5xx:服務器端錯誤--服務器未能實現合法的請求
常見狀態代碼、狀態描述、說明:
200 OK ? ? ? //客戶端請求成功
400 Bad Request ? //客戶端請求有語法錯誤,不能被服務器所理解
401 Unauthorized //請求未經授權,這個狀態代碼必須和WWW-Authenticate報 ? ? ? ? ? ? ? ? ?//頭域一起使用
403 Forbidden ? //服務器收到請求,但是拒絕提供服務
404 Not Found ? //請求資源不存在,eg:輸入了錯誤的URL
500 Internal Server Error //服務器發生不可預期的錯誤
503 Server Unavailable ? //服務器當前不能處理客戶端的請求,一段時間后, ? ? ? ? ? ? ? ? ? ? ? ? ?//可能恢復正常
egHTTP/1.1 200 OK CRLF


Web服務器搭建的過程

一.基于rpm包的 httpd的基礎信息:

首先必須下載安裝httpd服務程序包,其他相應的包,如果沒安裝的也要安裝,這里不再多說。

服務腳本:/etc/rc.d/init.d/httpd

運行目錄:/etc/httpd

配置文件:/etc/httpd/conf/

主配置文件:httpd.conf

擴展配置:/etc/httpd/conf.d/*.conf

socket: http: 80/tcp, https: 443/tcp

網頁文件目錄(DocumentRoot)/var/www/html

CGI: /var/www/cgi-bin/

二.配置文件/etc/httpd/conf/httpd.conf的構成:主服務器和虛擬主機不能同時啟用

全局配置:對主服務器或虛擬機都有效,且有些功能是服務器自身工作屬性;

主服務器:主站屬性;

虛擬主機:虛擬主機及屬性定義

全局配置:

Listen ipport------------監聽端口

EgListen 172.16.0.0:80監聽172.16網段內所有主機的80端口

# httpd -D DUMP_MODULES ?---------------顯示出所有與httpd有關的模塊

Prefork:多道處理模式的一種,一個進程響應一個請求

主進程功能

(1) 綁定特權端口;

(2) 派發或回收子進程;

(3) 讀取分析主配置文件;

<IfModule prefork.c>

StartServers ? ? ? 8 ? ? ? ? ? ? ? ? ? ? ----------------服務器啟動了的空閑子進程數

MinSpareServers ? ?5 ? ? ? ? ? ? ? ? ? ?----------------最小空閑子進程數,為了保證有足夠的進程能夠接受請求

MaxSpareServers ? 20 ? ? ? ? ? ? ? ? ? ?----------------最大空閑子進程數,為了確保服務器負載不要過大

ServerLimit ? ? ?256 ? ? ? ? ? ? ? ? ? ?-----------------最多允許主進程派生的處于活動狀態的進程

MaxClients ? ? ?256 ? ? ? ? ? ? ? ----------------最大允許的客戶請求,多于上邊的進程就排隊,小于進程服務器就很輕松了

MaxRequestsPerChild ?4000 ? ? ? ? ? ? ? ----------------每個進程在保持連接的時候最多允許多少請求,超出就kill

</IfModule>

Worker:多道處理模式的一種,一個進程生成多個線程,一個線程響應一個請求。

<IfModule worker.c>

StartServers ? ? ? ? 4 ? ? ? ? ? ? ? ? ? ? 與prefork相似,只不過,這時的進程都變成了線程。

MaxClients ? ? ? ? 300 ? ? ? ? ? ? ? ? ? ? 最多允許連進來的客戶端個數

MinSpareThreads ? ? 25 ? ? ? ? ? ? ? ? ? ? 最小空閑線程

MaxSpareThreads ? ? 75 ? ? ? ? ? ? ? ? ? ? 最大空閑線程

ThreadsPerChild ? ? 25 ? ? ? ? ? ? ? ? ? ? ?每個進程允許生成多少個線程

MaxRequestsPerChild ?0 ? ? ? ? ? ? ? ? ? ? ?0表示無限,子線程永不銷毀

</IfModule>

MaxRequestsPerChild設置的是每個子進程可處理的請求數0意味著無限,即子進程永不銷毀。雖然缺省設為0可以使每個子進程處理更多的請求,但如果設成非零值也有兩點重要的好處:

  ◆ 可防止意外的內存泄漏;

  ◆ 在服務器負載下降的時侯會自動減少子線程數。

Linux不是真正意義的對線程管理的內核,對進程和線程的管理一樣,因此,在輕量級linux上使用worker模式性能沒有prefork好。所以,默認使用prefork,而不是worker。要啟用worker工作模式,就得修改配置文件/etc/sysconfig/httpd,啟用HTTPD=/usr/sbin/httpd.worker,啟用/etc/sysconfig/httpd配置文件中的HTTPDD=/user/sbin/httpd.worker后,系統再次啟動httpd服務,就是工作在了httpd.worker的工作模式下。

沒有啟動worker工作模式時候的httpd進程

# ps aux | grep httpd

root ? ? ?3664 ?0.0 ?0.3 184252 ?3884 ? ? ? ? ?Ss ? 10:07 ? 0:00 /usr/sbin/httpd

apache ? ?3666 ?0.0 ?0.2 184164 ?2748 ? ? ? ? ?S ? ?10:07 ? 0:00 /usr/sbin/httpd

apache ? ?3667 ?0.0 ?0.2 184252 ?2540 ? ? ? ? ?S ? ?10:07 ? 0:00 /usr/sbin/httpd

apache ? ?3668 ?0.0 ?0.2 184252 ?2540 ? ? ? ? ?S ? ?10:07 ? 0:00 /usr/sbin/httpd

apache ? ?3669 ?0.0 ?0.2 184252 ?2540 ? ? ? ? ?S ? ?10:07 ? 0:00 /usr/sbin/httpd

apache ? ?3670 ?0.0 ?0.2 184252 ?2540 ? ? ? ? ?S ? ?10:07 ? 0:00 /usr/sbin/httpd

apache ? ?3671 ?0.0 ?0.2 184252 ?2540 ? ? ? ? ?S ? ?10:07 ? 0:00 /usr/sbin/httpd

apache ? ?3672 ?0.0 ?0.2 184252 ?2540 ? ? ? ? ?S ? ?10:07 ? 0:00 /usr/sbin/httpd

apache ? ?3673 ?0.0 ?0.2 184252 ?2540 ? ? ? ? ?S ? ?10:07 ? 0:00 /usr/sbin/httpd

apache ? ?3674 ?0.0 ?0.2 184252 ?2540 ? ? ? ? ?S ? ?10:07 ? 0:00 /usr/sbin/httpd

root ? ? ?3676 ?0.0 ?0.0 103244 ? 832 pts/0 ? ?S+ ? 10:07 ? 0:00 grep httpd

啟動worker工作模式后的httpd進程

# ps aux | grep httpd

root ? ? ?3532 ?0.0 ?0.4 184456 ?4088 ? ? ? ? ?Ss ? 10:06 ? 0:00 /usr/sbin/httpd.worker

apache ? ?3534 ?0.0 ?0.2 184172 ?2748 ? ? ? ? ?S ? ?10:06 ? 0:00 /usr/sbin/httpd.worker

apache ? ?3535 ?0.0 ?0.5 528716 ?5428 ? ? ? ? ?Sl ? 10:06 ? 0:00 /usr/sbin/httpd.worker

apache ? ?3536 ?0.0 ?0.5 528716 ?5432 ? ? ? ? ?Sl ? 10:06 ? 0:00 /usr/sbin/httpd.worker

apache ? ?3537 ?0.0 ?0.5 528716 ?5432 ? ? ? ? ?Sl ? 10:06 ? 0:00 /usr/sbin/httpd.worker

root ? ? ?3648 ?0.0 ?0.0 103244 ? 832 pts/0 ? ?S+ ? 10:06 ? 0:00 grep httpd

雖然worker已經啟動,但筆者不明白為什么httpd -l顯示出來的模塊還是prefork,有懂的讀者,請為筆者留言。

# httpd -l ? ? ? ? ? ? ? ? ? ? ? ? ? ?--------------------顯示核心模塊,httpd不需要寫成httpd.prefork,這是默認的

Compiled in modules: ? ? ? ? ? ? ? ? ?-------------------系統默認直接編輯進的模塊

?core.c

?prefork.c

?http_core.c

?mod_so.c

# httpd -t ? ? -----------檢測語法錯誤

# service httpd configtest ? ----測試語法,與上相同

# httpd -D DUMP_MODULES ? 共享模塊

大多數配置修改后,使用service httpd reload即能生效;而修改監聽的地址和端口通常需要重啟服務;

Event:多道處理模式的一種,用來測試,就不做多說了。

Keepalive:保持連接---------長連接

KeepAlive {On|Off}------------------------------空間的服務器使用on,繁忙的服務器使用off,保持連接,請求多了,滿足不了大多數客戶需求。

KeepAliveTimeout 2

MaxKeepAliveRequests 50



配置加載的模塊

LoadModule foo_module modules/mod_foo.so

? ? ? ? ? LoadModule 模塊名稱 ? 模塊路徑

ServerName www.example.com-----定義站點名稱, 要啟用或編輯/etc/hosts,否則會因為web服務器反解ip找尋主機名,如果找到的主機與當前主機名不匹配就會報錯。

如果沒有啟用,/etc/sysconfig/network中定義的主機名為www.website.com,而在/etc/hosts中沒有為主機定義相應的ip,那么就會出現如下錯誤

# httpd -t

httpd: apr_sockaddr_info_get() failed for www.website.com

httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

Syntax OK

這是一個很煩人的錯誤,要想通過,必須同時修改兩個地方,即:/etc/hosts和/etc/sysconfig/network

在/etc/hosts文件中添加解析記錄,在/etc/sysconfig/network中將主機名修改為和添加的解析記錄主機名相同。

不過這時,主機還不能識別,需要重新啟動才能識別,不過,通過一條命令可以免除重啟。

#hostname 主機名

這里的主機名要跟上面配置的主機名相同。

也可以在/etc/httpd/conf/httpd.conf文件中直接啟用主機名的 配置。

主服務器配置

DocumentRoot "/var/www/html"-------------定義站點根目錄

<Directory "/var/www/html">------------如果是站點根目錄,定義的是整個站點的屬性,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 如果是站點上的某個目錄,定義的就是這個目錄的屬性。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 若要對某個目錄進行定義,最好跟站點分開寫。

Options

Indexes: 是否允許索引頁面文件,建議關閉;否則,站點上的內容會被別人下載

FollowSynLinks: 是否跟隨軟鏈接文件;

SymLinksifOwnerMatch:跟隨符號鏈接,文件的屬主必須是系統的屬主

ExecCGI:是否允許執行CGI腳本;

All--------------包含以上所有

None--------------采用默認選項

AllowOverride AuthConfig---是否允許覆蓋----授權是對網頁瀏覽的最高優先級,必須通過才能瀏覽,相當于覆蓋于對ip認證之上

AuthName "Realm"---認證名稱,隨便寫

AuthType Basic----認證類型

AuthUserFile /web/host/userfile----用戶帳號文件

# htpasswd -c -m /web/host/userfile tom------------給授權的目錄添加一個可以訪問的用戶。

-c 表示創建密碼文件,如果文件中有內容,會覆蓋。

-m 表示md5算法

-D 表示刪除某個用戶

# htpasswd -c -m userfile tom-------------添加tom的帳號密碼到userfile文件

# htpasswd -m userfile jerry --------------添加jerry的帳號密碼到userfile文件

# htpasswd -D userfile jerry---------------從文件userfile中刪除jerry的記錄。

</Directory>

Order:定義allowdeny哪個為默認法則;寫在后面的為默認法則:寫在前面的指令沒有顯式定義的即受后面的指令控制;

Order allow,deny--------------------ip的認證

? ?Deny from 172.16.100.177------------禁止這個ip訪問

Allow from 172.16.0.0/16-------------允許這個網段的所有ip訪問,除了上邊的那個例外。

這種用法在2.4版本中已經不再適用,給某人或者一個組授權,應用

require user username ?允許用戶

require group groupname ?允許組

require host hostname ? 允許這些主機

require all granted ? 允許所有主機

require all deny ?拒絕所有人

注意,在配置虛擬主機的時候,要是對某個目錄進行授權,可能會出現如下錯誤。

錯誤提示

這時,不妨在Allowoverride Authconfig上面加上Order allow,deny;Allow from all 這樣的內容,就可以授權通過了。

虛擬服務器配置

第一步,注釋掉主服務器的DocumentRoot

第二部,添加配置

<VirtualHost 172.16.254.88:80>----------虛擬主機的ip

ServerName www.website.com---------- 網站的名字,輸入效果跟ip相同

DocumentRoot "/web/vhost/"--------------------網站根目錄

? ? CustomLog /web/vhost/logs/access.log common訪問不出錯時,日志的存放位置,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 屬于虛擬主機的主要配置,不能定義在 Directory

? ? ErrorLog /web/vhost/logs/err.log----------------------訪問出錯時,日志的存放位置,屬于虛擬主機的主要配置

<Directory "/web/vhost/test1">------------------------------目錄授權

? ? Options Indexes------------------------以下三行是ip授權

? ? Order allow,deny

? ? allow from all

? ? Allowoverride Authconfig------------------------以下五行,是授權配置

? ? AuthName "friends"

? ? Authtype Basic

? ? AuthUserFile /web/vhost/userfile

? ? Require valid-user

</Directory>

</VirtualHost>

日志文件配置成功后,訪問成功,日志信息如下

日志文件所在目錄/web/vhost/logs/

# tail logs/access.log

172.16.254.79 - - [21/Aug/2013:13:05:17 +0800] "GET / HTTP/1.1" 304 -

172.16.254.79 - tom [21/Aug/2013:13:05:22 +0800] "GET /test1/ HTTP/1.1" 200 710

172.16.254.79 - - [21/Aug/2013:14:01:47 +0800] "GET /img/skin/templates/thumb/107.png HTTP/1.1" 404 311

172.16.254.79 - - [21/Aug/2013:14:01:47 +0800] "GET /img/skin/templates/thumb/25.png HTTP/1.1" 404 310

172.16.254.79 - - [21/Aug/2013:14:01:47 +0800] "GET /img/skin/templates/thumb/46.png HTTP/1.1" 404 310

172.16.254.79 - - [21/Aug/2013:14:01:47 +0800] "GET /img/skin/templates/thumb/56.png HTTP/1.1" 404 310

172.16.254.79 - - [21/Aug/2013:14:01:47 +0800] "GET /img/skin/templates/thumb/108.png HTTP/1.1" 404 311

172.16.254.79 - - [21/Aug/2013:14:04:02 +0800] "GET / HTTP/1.1" 200 40

訪問失敗,日志信息如下

# tail logs/err.log

[Wed Aug 21 14:01:47 2013] [error] [client 172.16.254.79] File does not exist: /web/vhost/img, referer: http://www.website.com/

[Wed Aug 21 14:01:47 2013] [error] [client 172.16.254.79] File does not exist: /web/vhost/img, referer: http://www.website.com/

[Wed Aug 21 14:01:47 2013] [error] [client 172.16.254.79] File does not exist: /web/vhost/img, referer: http://www.website.com/

[Wed Aug 21 14:01:47 2013] [error] [client 172.16.254.79] File does not exist: /web/vhost/img, referer: http://www.website.com/

[Wed Aug 21 14:01:47 2013] [error] [client 172.16.254.79] File does not exist: /web/vhost/img, referer: http://www.website.com/

[Wed Aug 21 14:07:50 2013] [error] [client 172.16.254.79] File does not exist: /web/vhost/test

配置基于主機的虛擬主機

<VirtualHost 172.16.254.88:80>

? ?ServerName www.a.com

? ?DocumentRoot "/www/website1/"

</VirtualHost>

<VirtualHost 172.16.254.88:80>

? ?ServerName www.b.com

? ?DocumentRoot "/www/website2/"

</VirtualHost>

配置完成后,在物理機上添加www.a.com和www.b.com的解析記錄



這樣,在物理機瀏覽器的地址欄里輸入網址www.a.com或者www.b.com就能驗證其效果了。

注意,如果在地址欄里輸入的是ip地址,瀏覽器會默認選擇web服務器上定義的第一個虛擬機

基于ip的虛擬主機配置

<VirtualHost 172.16.254.80:80>

ServerName www.website1.com

DocumentRoot "/web/vhost/web1"

</VirtualHost>

<VirtualHost 172.16.254.88:80>

ServerName www.website2.com

DocumentRoot "/web/vhost/web2"

</VirtualHost>

配置完成后,在物理機配置hosts信息,否則,瀏覽機無法解析




基于端口的虛擬主機配置

這時,還需要在全局配置中添加一條記錄

Listen 8080------------啟用8080端口

<VirtualHost 172.16.254.80:8080>

ServerName www.website1.com

DocumentRoot "/web/vhost/web1"

</VirtualHost>

<VirtualHost 172.16.254.88:80>

ServerName www.website2.com

DocumentRoot "/web/vhost/web2"

</VirtualHost>



三.補充知識

路徑別名

Alias /imges/ /test/www/

這里需要注意幾點

1/p_w_picpaths/ /test/www/ 格式必須一致,即前后的/不能少

2/p_w_picpaths/是站點的根目錄下目錄,而/test/www/則是服務器根目錄下的目錄

3,同時在兩個目錄下創建index.html注意,一般網站上的網頁只要不是連接的網頁,一般都需要使用index.html才能被識別。

4,然后再配置文件中全局配置添加記錄Alias /imges/ /test/www/

5,若站點名字叫www.web.com,則輸入www.web.com/p_w_picpaths顯示的內容就會變成/test/www/下的index.html文件的內容。

Cgi腳本

可以在目錄中定義,即

<Directory 目錄>

Options ExecCGI

........

</Directory>

也可以定義別名

定義同路徑別名

讓系統上每個用戶都有自己的網站

只需要將配置文件中的UserDir disabled禁用,啟用Userdir public.html,然后在該用戶的家目錄下創建public.html目錄,在該目錄中創建index.html文件并編輯即可。

注意,tom的家目錄訪問權限必須修改。

<IfModule mod_userdir.c>

Userdir public.html

</IfModule>

# mkdir /home/tom/public.html/index.html

# cd /home/tom/public.html

# vim index.html

# chmod o+x /home/tom

服務器的狀態信息

<Location /status>

? ?SetHandler server-status ---------------apache內部獨立的子功能,處理器(server-status)

Authtype Basic------------------沒有啟用基于ip認證order語句,就不用寫allowoverride語句

? ?AuthName "tom"

? ?AuthUserFile "/www/userfile"

? ?Require valid-user

# ? ?Order deny,allow

# ? ?Deny from all

# ? ?Allow from .example.com


</Location>






排錯:

Web出現這種錯誤

# service httpd status

httpd dead but subsys locked

檢查服務腳本中pid文件有沒有寫錯

pidfile=${PIDFILE-/usr/local/apache/logs/httpd.pid}


編譯安裝 httpd

編譯安裝httpd-2.4.4

依賴于更高版本的aprapr-util,因此需要事先安裝此兩個包。此外,httpd還依賴于pcre的開發功能,因此,要事先安裝pcre-devel包。

# yum -y install pcre-devle

(1) 編譯安裝apr

# tar xf apr-1.4.6.tar.bz2 # cd apr-1.4.6 # ./configure --prefix=/usr/local/apr # make && make install


(2) 編譯安裝apr-util

# tar xf apr-util-1.5.2.tar.bz2

# cd apr-util-1.5.2

# ./configure --prefix=/

# tar xf apr-util-1.5.2.tar.bz2 # cd apr-util-1.5.2 # ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr # make && make install


(3) 編譯安裝httpd

# tar xf httpd-2.4.4.tar.bz2 # cd httpd-2.4.4 # ./configure --prefix=/usr/local/apache --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=event # make && make install


httpd 2.4新特性:

1MPM可于運行時裝載;

--enable-mpms-shared=all --with-mpm=event

2Event MPM

3、異步讀寫

4、在每模塊及每目錄上指定日志級別;

5、每請求配置;<If>, <ElseIf>, <Else>

6、增強的表達式分析器;

7、毫秒級的KeepAlive Timeout

8、基于域名的虛擬主機不再需要NameVirtualHost指令;

9、降低了內存占用;

10、支持在配置文件中使用自定義變量;

--enable-modules=most

新增加的模塊:

mod_proxy_fcgi

mod_proxy_scgi

mod_proxy_express

mod_remoteip

mod_session

mod_ratelimit

mod_request

等等;

對于基于IP的訪問控制

Order allow,deny

allow from all

2.4中不再支持此方法

2.4 使用Require user

Require user USERNAME

Require group GRPNAME

Require ip IPADDR

Require not ip IPADDR

IP

NETWORK/NETMASK

NETWORK/LENGTH

NET

172.16.0.0/255.255.0.0 = 172.16.0.0/16 = 172.16

Require host HOSTNAME

Require not host HOSTNAME

HOSTNAME

DOMAIN

www.magedu.com

.magedu.com

允許所有主機訪問:

Require all granted

拒絕所有主機訪問:

Require all deny


Curl------------web站點測試工具之一

curl的常用選項:

? ?-A/--user-agent <string> 設置用戶代理發送給服務器

? ?-basic 使用HTTP基本驗證

? ?--tcp-nodelay 使用TCP_NODELAY選項

? ?-e/--referer <URL> 來源網址

? ?--cacert <file> CA證書 (SSL)

? ?--compressed 要求返回是壓縮的形勢

? ?-H/--header <line>自定義頭信息傳遞給服務器

? ?-I/--head 只顯示響應報文首部信息

? ?--limit-rate <rate> 設置傳輸速度

? ?-u/--user <user[:password]>設置服務器的用戶和密碼

-0/--http1.0 使用HTTP 1.0

實例

Web站點地址為www.a.com

# curl www.a.com-------------j將首頁內容原封不動下載到本地 welcome to my home! # curl -I www.a.com 報文的首部信息 HTTP/1.1 200 OK Date: Fri, 23 Aug 2013 10:04:05 GMT Server: Apache/2.2.15 (CentOS) Last-Modified: Thu, 22 Aug 2013 20:43:52 GMT ETag: "460004-14-4e48f591062e8" Accept-Ranges: bytes Content-Length: 20 Connection: close Content-Type: text/html; charset=UTF-8

解釋:curl -I ?測試服務器某些頁面是否存在,只需要看響應報文的狀態碼

# curl -I www.a.com/status HTTP/1.1 401 Authorization Required Date: Fri, 23 Aug 2013 10:07:09 GMT Server: Apache/2.2.15 (CentOS) WWW-Authenticate: Basic realm="status" Connection: close Content-Type: text/html; charset=iso-8859-1

解釋:響應報文報錯,因為訪問狀態頁需要密碼,沒有給出密碼就報錯。

可以給出帳號和密碼,用-u選項

# curl -I -u tom:tom www.a.com HTTP/1.1 200 OK Date: Fri, 23 Aug 2013 10:08:50 GMT Server: Apache/2.2.15 (CentOS) Last-Modified: Thu, 22 Aug 2013 20:43:52 GMT ETag: "460004-14-4e48f591062e8" Accept-Ranges: bytes Content-Length: 20 Connection: close Content-Type: text/html; charset=UTF-8

看下圖是我配置的虛擬主機,正確訪問日志為combined格式,可以通過訪問日志查看curl的訪問信息。

先查看正常訪問信息

# curl www.a.com 正常訪問 # tail -1 /www/website/logs/access.log 查看最后一行信息 172.16.254.1 - - [23/Aug/2013:18:11:37 +0800] "GET / HTTP/1.1" 200 20 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.13.6.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2"

解釋:172.16.254.1 來自哪個客戶端,訪問時間,使用的http方法,返回的狀態嗎,使用的瀏覽器

# curl -A "mybrother" www.a.com 設置用戶代理,也可以說是模擬一個瀏覽器 # tail -1 /www/website/logs/access.log 172.16.254.1 - - [23/Aug/2013:18:19:35 +0800] "GET / HTTP/1.1" 200 20 "-" "mybrother"

我們可以看到模擬出的效果

# curl -e "www.sohu.com" www.a.com -e 來源網址 # tail -1 /www/website/logs/access.log 172.16.254.1 - - [23/Aug/2013:18:22:02 +0800] "GET / HTTP/1.1" 200 20 "www.sohu.com" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.13.6.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2"

我們可以看到,打開網頁是從www.sohu.com跳轉而來。

# curl -0 www.a.com -0 所使用的http的版本 # tail -1 /www/website/logs/access.log 172.16.254.1 - - [23/Aug/2013:18:25:22 +0800] "GET / HTTP/1.0" 200 20 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.13.6.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2"

可以看到HTTP的版本由之前的1.1變成了1.0




轉載于:https://blog.51cto.com/qiufengsong/1279885

總結

以上是生活随笔為你收集整理的linux上的web服务器搭建的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。