Linux之Web服務(2)Httpd服務配置之一

Linux之Web服務(2)Httpd服務配置之一html

Apache HTTP Serverlinux

Apache HTTP 服務器,簡稱Apache,是很是留下的Web服務器軟件。一般和腳步語言好比PHP,數據庫MySQL一塊兒工做,合成爲LAMP(Linux, Apache, MySQL, PHP). 固然流行的Web服務器還有nigix,可是nigix雖然輕量級很穩定,可是功能並不如Apache HTTP功能豐富,而且如今的Apache HTTP還支持模塊化功能,及能夠開發本身的功能模塊並加入到此Web服務器軟件中,更靈活的知足Web業務甚至是和http協議相關的實現。web

本篇主要講解在CentOS 7 上安裝Httpd2.4和相應的配置。shell

 

Httpd2.4具體配置介紹數據庫

 

一、Httpd2.4的安裝apache

#使用yum安裝vim

[root@root ~]# yum install httpd -y

#安裝後查看httpd信息,能夠檢查是否已經安裝
後端

[root@root ~]# yum info httpd 
Loaded plugins: fastestmirror
Determining fastest mirrors
Installed Packages
Name        : httpd
Arch        : x86_64
Version     : 2.4.6
Release     : 40.el7.centos
Size        : 9.4 M
Repo        : installed
From repo   : centos6
Summary     : Apache HTTP Server
URL         : http://httpd.apache.org/
License     : ASL 2.0
Description : The Apache HTTP Server is a powerful, efficient, and extensible
            : web server.


2Httpd2.4 默認配置centos

主程序文件:/usr/sbin/httpd瀏覽器

模塊文件:/usr/lib64/httpd/modules/*.so

注:可使用httpd -M 查看當前服務加載的模塊文件列表

主配置文件:

/etc/httpd/conf/httpd.conf

/etc/httpd/conf.d*/.conf

/etc/httpd/conf.modules.d/*.conf

站點文檔路徑:

/var/www/html

日誌文件路徑:

/var/log/httpd/access_log :訪問日誌

/var/log/httpd/error_log:  錯誤日誌

Systemd Unit File

/usr/ib/systemd/system/httpd.service

自帶腳步文件:

/usr/sbin/apachectl

注意:在CentOS6及之前使用SysV風格啓動的服務腳步使用的就是此腳本。

 

三、Http2.4 服務的啓動和關閉

#啓動服務

[root@root ~]# systemctl start httpd.service

#關閉服務

[root@root ~]# systemctl stop httpd.service

#查看服務是否啓動成功

[root@root ~]# systemctl status httpd.service

#經過查看默認端口80查看是否開啓監聽

[root@root ~]# netstat -tnlp | grep ':80\>'
tcp     0      0 0.0.0.0:80       0.0.0.0:*        LISTEN      88660/httpd

  

#也能夠經過查看進程來查看httpd相關的進程組

[root@root ~]# ps -axu | grep 'httpd\>' | grep -v '\<grep\>'
root      88660  0.0  0.5 222032  5104 ?     Ss   12:47      0:00 /usr/sbin/httpd -DFOREGROUND
apache    88661  0.0  0.3 222032  3108 ?        S    12:47   0:00 /usr/sbin/httpd -DFOREGROUND
apache    88662  0.0  0.3 222032  3108 ?        S    12:47   0:00 /usr/sbin/httpd -DFOREGROUND
apache    88663  0.0  0.3 222032  3100 ?        S    12:47   0:00 /usr/sbin/httpd -DFOREGROUND
apache    88664  0.0  0.3 222032  3100 ?        S    12:47   0:00 /usr/sbin/httpd -DFOREGROUND
apache    88665  0.0  0.3 222032  3108 ?        S    12:47   0:00 /usr/sbin/httpd -DFOREGROUND


解析:這裏發現進程的發起者竟然都是apache,這是爲了保護系統而產生的一個系統用戶,該用戶只負責Httpd守護進程操做,這樣若是Httpd服務被***,而保護了操做系統。在某些低版本如Httpd2.2版本中使用的系統帳戶名可能爲httpd

 

4Http2.4 準配前工做

#80Httpd指定監聽的端口開發防火牆

[root@root ~]# iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT

#保存此防火牆規則配置

[root@root ~]# iptables-save

 

5Httpd2.4 基礎配置檢查

 

配置文件格式:

DIRECTIVE  VALUE

DIRECTIVE:指令,不區分字符大小寫;例如ServerRoot

VALUE:該值除了文件系統指定路徑除外,大多數也不區分大小寫;

配置修改完後注意事項:

    (1)檢查語法;  注:可使用 httpd -t 來檢查,若是顯示OK則無錯誤

(2)讓服務從新重載配置文件

實例:

#檢查配置文件語法是否有誤,OK表示無語法錯誤

[root@root ~]# httpd -t

Syntax OK

#重載服務配置

[root@root ~]# systemctl reload httpd.service

#固然也能夠經過發送1號信號讓 Httpd守護進程從新生成

[root@root ~]# pkill -SIGHUP -f '.*\/httpd\>'

 

6、具體的配置指令及其選項介紹

1、基本配置指令

ServerTokens  OS      #會顯示當前apache版本和系統版本
ServerRoot "/etc/httpd"   #默認服務器配置跟目錄
PidFile  run/httpd.pid   #進程信息的存放路徑,相對路徑,相對於/etc/httpd/下
Timeout 60               #超時時間,60秒後端口並從新鏈接
Listen [ip:]port         #監聽的地址和端口

注:Listend能夠重複定義屢次,默認監聽本機可用的全部地址;當須要修改監聽多個監聽端口或者添加多個監聽端口時,須要從新啓動httpd服務守護進程,及:

$ systecml restart httpd.service

     

2、保存鏈接的限制類指令

提示persistent connection : tcp鏈接創建後,資源獲取完成後不會斷開鏈接,而會繼續等待。

而如何進行控制其餘多個資源經過端口訪問進程?

方案猜測:進行訪問的數量限制,進行同一進程訪問的時間限制。

具體配置舉例說明:

是否開啓保存鏈接

KeepAlive  on|off

舉例說明:在Tcp進行通訊須要3次握手來創建鏈接,而假設若是須要進行傳輸文件時使用此協議,則傳送一次文件後端口鏈接而後再次3次鏈接創建一次鏈接來進行下一次文件傳輸。

若是改成On,則表示只在傳輸第一個文件時創建一次Tcp鏈接,而不會斷開,接下來繼續進行下面的傳輸不在進行創建鏈接的請求過程。

單一用戶的保持鏈接最大請求次數

MaxKeepAliveRequest  100

解析:當輸出此時爲100次才端口一次鏈接,而後再次創建Tcp鏈接。

注意:只有KeepAlive 設爲爲On 時此選項纔會跟着生效。由於傳輸文件時不能總保持不斷開鏈接,所以這裏設置一個最大的傳輸請求次數來控制,防止網絡請求隊列堵塞。

單一用戶的一次保持鏈接的超時時間,默認爲s秒,httpd2.4能夠設置ms表示毫秒

KeepAliveTimeout  15

解析:假設當進行文件傳輸時,速度很慢,那麼此此文件傳輸超過15秒會自動斷開進行以下一次傳輸鏈接的創建。

 

2MAP多處理模塊

prefork MAP 可靠性、兼容性強的MAP,多進程,一個進程處理一次請求;

worker MAP  更高伸縮性的線程MAP,多線程,一個線程程處理一個請求;

event MAP   多線程,每線程處理一次請求,基於事件驅動機制;

 

這裏主要列出perfork MAP介紹

StartServers   8         #httpd進程組默認會開啓8個守護進程
MinSpareServers   5      #當有多個用戶來進行訪問,會至少有5個進程用來備份使用
MaxSpareServers   20    #最大值預留
ServerLimit   256        #限制容許多少個用戶進行鏈接
MaxClients   256        #容許多少個用戶同時鏈接,及同一時間段的併發量
MaxRequestsPerChild 4000  #最大請求模塊子進程


3、模塊的加載和查看

使用httpd 命令選項查看已經加載的模塊

 -t -D DUMP_MODULES : show all loaded modules

 -M : a synonym for -t -D DUMP_MODULES

模塊加載具體配置LoadModule

#httpd服務啓動時默認加載的模塊

LoadModule  mod_name  modules/mod_filename

注意:這裏的LoadModule指定的模塊名會在httpd -M命令中顯示,然後面第二個參數纔是真正對應的模塊文件路徑,此路徑爲相對路徑,相對於ServerRoot配置節點指定的路徑,通常默認爲:

ServerRoot  /etc/httpd/       #Httpd服務的根目錄
Include conf.d/*.conf        #讀取包含指定目錄下的配置文件

 

4、用戶相關配置:

User apache    #系統用戶,用於執行httpd守護進程
Group apache   #系統組,用於此組用戶來管理httpd

注意:此係統用戶通常不會輕易修改,就算要修改也要指定爲一個系統用戶,而且此用戶的默認shell類型爲/sbin/nologin,一次來就算Web服務站點出現的問題或被***,可是此進程的執行爲系統用戶,保證了系統的安全。

 

5、網站Main Server主要配置

#web服務站點郵箱,如:

ServerAdmin  root@localhost

解析:通常爲管理員郵箱,當站點出現問題會發送服務的相關日誌信息給指定郵箱。

#設置站點域名,能夠設置,如:

ServerName  www.example.com:80

注意:此域名默認通常機器不會有,當啓動服務時會出現一個提示說找不到ServerName指定域名,所以,能夠設置爲直接的主機名或者DNS配置的域名便可

#站點文檔及網頁根路徑

DocumentRoot  「/var/www/html」

   

6、站點文檔訪問受權及衆多服務特性的配置:

一、基於文件系統路徑:

<Directory /PTATH/TO/DIR>

</Directroy>

<File 「」>

</File>

二、基於URL訪問:

<Location URL>

</Location>

<Location "URL">

</Location>

<LocationMatch ~ "URL_PATTERN">

</LocationMatch>

三、訪問的選項節點

Options

選項固定參數:

Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
None             #表示都不選
All            #表示選擇全部參數功能
Indexes:         #索引
FollowSymLinks:  #容許使用符號連接訪問資源
ExecCGI:      #容許執行CGI模塊配置的腳本


 

具體案例解析:

 

1Indexes  功能展現

#修改默認配置添加

<Directoiry "/var/www/html">

Options Indexes FollowSymLinks

AllowOverride  None

Require all granted

<DIrectoiry/>

說明:Indexes表示當訪問這個設定的目錄下是,若是沒有index.html文件,則把此目錄下的全部文件列表顯示在網頁中。如:

#在默認站點文檔根目錄/var/www/html 下建立xx目錄

[root@meng ~]# mkdir /var/www/html/xx

#切換到xx目錄

[root@meng ~]# cd /var/www/html/xx/

#建立兩個帶測試內容的文本文件

[root@meng xx]# echo aa > aa.txt
[root@meng xx]# echo bb > bb.txt
[root@meng xx]# sync

#從新啓動服務

[root@meng xx]# service httpd restart

#再次進行訪問

[root@meng xx]# links http://10.1.249.185:80/xx/

解析:這裏由於沒有檢查當前目錄下有index.html文件,因此會把當前目錄下的其它全部文件列表給列出來。

 wKiom1f7Wyzhn3RpAAAfGNGRRNQ784.png

說明:若是去掉Indexes 則表示若是目錄下沒有index.html文件,則會隱藏該目錄下的其它全部文件,如顯示如下信息:

[root@meng xx]# links http://10.1.249.185:80/xx/

wKioL1f7WaqCs6hwAAAWUZrFx30665.png

Forbidden#forbidden   #表示爲被禁用的意思

解析:這裏最後一行就把系統的版本以及web站點服務器軟件的版本以及端口後都顯示出來。也是當全局設置有ServerTokens OS纔會顯示。這裏顯示的Forbidden就是上篇所列出的response響應介接收返回的狀態碼status code對應的403,及無權限訪問此目錄下除了默認文件名的默認文檔及index.html的其它任何文件。

 

注意:Directory配置不能指定文件訪問,爲全局的,所以但若是指定該目錄有文件,任然能夠直接全路徑進行訪問指定資源,如查找 aa.txt,如:

[root@meng xx]# links http://10.1.249.185/xx/aa.txt
aa

解析:那爲何任然能夠經過此指定資源全路徑來訪問呢?由於這裏的配置只是對Directory定義的整個目錄生效,可是若是目錄裏的資源文件路徑被獲取,那麼文件仍是能夠訪問的,要拒絕經過指定文件資源路徑訪問能夠經過配置File標籤,及添加:

<Files ~ "/var/www/html/xx/.*\.txt$">
       Require all deiend  
</Files>

說明:這裏訪問/var/www/thml/xx/.txt結尾的文件都不能訪問了。固然若是創建了其它非以.txt 結尾的文件仍是能夠訪問的,如:

#新建一個覺得.txt的文件,這時訪問此文件時無權限的

[root@meng ~]# echo hello > /var/www/html/xx/hello.txt

#那麼給這個修改此文件名的後綴爲.log

[root@meng ~]# rename txt log  /var/www/html/xx/hello.txt

#則再次使用資源文件全路徑去訪問hello.log

[root@meng ~]# links http://10.1.249.185/xx/hello.log

wKiom1f7WhCCNiYSAAAFqo9KUNw323.png 

說明:這裏能夠訪問說明只對.txt後綴的文件作了訪問限制,那麼是否是經過全資源路徑就沒法訪問剛纔的aa.txt路徑了呢?非也,使用curl命令就能夠抓取資源,如:

#使用curl將指定路徑資源文檔頁面源代碼讀取打印

[root@meng ~]# curl http://10.1.249.185/xx/aa.txt
aa

#固然直接打印此路徑下的全部文件列表仍是不行的

[root@meng ~]# curl http://10.1.249.185/xx/

wKioL1f7WkSR99jJAAAiOUgvPzs808.png 

解析:curl可以根據資源記錄來捕獲對應的資源的源代碼,固然在/var/www/html/xx目錄下是沒有index.html命名的文件,因此要想打印出下面的文件列表,仍是不行的。那麼添加一個index.html 文件。

 

#xx目錄下添加一個index.html默認首頁文檔

[root@meng ~]# echo '<html><head><title>新的默認頁<title></head><body><h1>Default<h1></body></html>' \
>  > /var/www/html/xx/index.html


#使用curl嘗試訪問並讀取其資源

[root@meng ~]# curl http://10.1.249.185/xx

 wKioL1f7WnHAueIyAAAqBqf5l9o522.png

解析:這裏彷佛明白了什麼,curl只是抓取資源的原代碼或原內容,並不會解析對應的html標記,顯示了301狀態碼錶示這個目錄下的文件被移動過。

 

#那麼顯示剛剛創建的/var/www/html/xx/index.html

[root@meng ~]# curl http://10.1.249.185/xx/index.html
<html><head><title>新的默認頁<title></head><body><h1>Default<h1></body></html>

說明:這樣直接就將源碼截獲了,那麼怎麼辦,只有給此文件設置訪問控制facl了嗎?和linux中的rwx基本權限相似,若是一個目錄不能訪問那麼其下的全部資源若是設置了不能訪問,那麼就徹底不能訪問了。如,修改Directory/var/www/html/xx目錄的配置:

<Directory "/var/www/html/xx">
        Options FollowSymLinks
        AllowOverride AuthConfig
        Require all deined#將容許全部修改過爲拒絕全部
</Directory>

#此次再次使用curl去抓取資源源碼

[root@meng ~]# curl http://10.1.249.185/xx/index.html

wKioL1f7WrKhUJ_5AAAiOUgvPzs604.png 

說明:這樣設置了直接對當前整個目錄設置了訪問控制,那麼想要訪問此目錄的任何文件都不行了,403表示沒有權限,curl使用讀取web資源內容來打印,可是如今也沒有權限去獲取此資源文件了,那麼使用瀏覽器或者links更無法了。

 

總結:

其實這裏不必這麼麻煩,通常若是在一個目錄下有多種類型的文件,這時能夠經過設置對應的<Files> 標籤來對指定文件名設置訪問權限。而去掉<Directory>Options中的Indexes是爲了安全考慮。Indexes的生效主要跟是否有index.html默認頁有關,若是沒有此默認頁,那麼去掉此項並設置訪問拒絕才不會顯示訪問到全部文件。若是須要將不想讓指定的文件在此目錄下被訪問,若是在如今的CentOS系統中,就好辦了,直接將不想被訪問而且被打印在文件列表中:

一、將此文件設置爲隱藏文件

二、給對應的文件設置<Files >標籤控制訪問

 

驗證總結案例實現:

#刪除剛纔建立的index.html默認頁

[root@meng ~]# rm -f /var/www/html/xx/index.html

#修改FIles標籤拒絕全部人html/xx目錄下全部以.開頭並以txt結尾的文件

[root@meng ~]# vim /etc/httpd/conf/http.conf
<Directory "/var/www/html/xx">
        Options Indexes FollowSymLinks
        AllowOverride AuthConfig
Require all granted       
<Files ~ "/var/www/html/xx/\..*txt$">
        Require all deined   
</Files>

#修改aa.txt文件名爲.aa.txt及爲隱藏文件

[root@meng ~]# rename aa .aa /var/www/html/xx/aa.txt

#此時經過ls默認選項查看xx目錄已經沒法找出隱藏文件.aa.txt

[root@meng ~]# ls /var/www/html/xx/
bb.txt

#經過links訪問此目錄

[root@meng ~]# links  http://10.1.249.185/xx/

wKioL1f7WwrBpkipAAAeD-134gM082.png 

解析:由於沒有index.html及默認頁,全部打印當前目錄下的全部資源文件,但不包括隱藏文件,所以.aa.txt並無被打印。

 

#同時爲了防止curl抓取內容,刪除全部用戶的r及讀權限

[root@meng ~]# chmod -r /var/www/html/xx/.aa.txt

#只是經過curl命令來經過web讀取資源,就不行了

[root@meng ~]# curl http://10.1.249.185/.aa.txt
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /.aa.txt was not found on this server.</p>
<hr>
<address>Apache/2.2.3 (Red Hat) Server at 10.1.249.185 Port 80</address>
</body></html>

說明:curl是須要是一個二進制執行程序,默認有x及執行權限,而對應的文件沒有讀權限,所以此curl獲取資源源碼失效。

#固然若是使用root用戶直接在本地讀取此文本仍是能夠的,只是對web作了限制

[root@meng ~]# whoami
root
[root@meng ~]# cat /var/www/html/xx/.aa.txt 
aa


 

2Options FollowSymLinks  容許符號連接

說明:容許Directory定義指定目錄下建立符號連接來訪問其餘路徑文件。

 

功能展現

#/var/www/html默認文檔路路徑對應的Directory標籤中添加此選項:

<Directory 「/var/ww/html>
Options FollowSymLinks
..........

#在根目錄下建立一個目錄 :

[root@meng ~]# mkdir /xx

#xx目錄下預習創建一個默認頁面

[root@meng ~]# echo echo aa > /xx/index.html

#切換到默認文檔根路徑

[root@meng ~]# cd /var/www/html/

#給建立的默認頁index.html添加httpd服務所需的安全上下文

[root@meng html]# chcon -R -t httpd_sys_content_t /xx/

#在根路徑下建立一個符號連接yy文件執行剛纔的/xx目錄

[root@meng html]# ln -s /xx/ yy

#查看文檔目錄下的全部文件的安全上下文

[root@meng html]# ll -Z
-rw-r--r--  root root root:object_r:httpd_sys_content_t index.html
drwxr-xr-x  root root root:object_r:httpd_sys_content_t xx
lrwxrwxrwx  root root root:object_r:httpd_sys_content_t yy -> /xx/

#發送 SIGHUP 信號重載Httpd服務配置

[root@meng html]# pkill -HUP 'httpd.*'

#進行站點下的yy服務連接,顯示結果實際爲文件系統根路徑下的xx目錄,及/xx

[root@meng html]# links http://10.1.249.185:80/yy
echo aa

說明:這裏顯示的內容並非根據規則目錄標籤裏定義的指定爲/var/www/html目錄下的相對路徑yy,這個yy爲一個軟鏈接,而鏈接的指定的是一個目錄,而目錄裏有index.html則執行的是這個網頁。

 

3AllowOverride  訪問控制配置

httpd的訪問控制配置,容許每目錄單獨進行;在每一個目錄下創建一個.htaccess文件;

AllowOverride 表示是否容許目錄中的.htaccess文件中的配置來覆蓋當前配置段中的配置;

具體的參數:

  Options            多選項

  FileInfo         詳細文件配置,通常用於文件Files標籤配合

  AuthConfig        容許使用Auth配置文件來讀取配置設定

  Limit             容許限制訪問範圍控制

  All           全部設定

  None           不使用任何設定

相關文章
相關標籤/搜索