1.基礎html
安裝:web
[root@tri manual]# yum install httpd-manual httpd
源碼編譯:shell
配置選項 |
默認值 |
備註 |
---|---|---|
-prefix |
服務器的根路徑 |
|
--with-mpm |
event |
event/worker/prefork/winnt |
-enable-ssl |
主程序/httpd:數據庫
選項 |
備註 |
---|---|
-f /etc/httpd/conf/httpd.conf | 指定配置文件 |
-v |
查看版本 |
-l |
編譯到服務器的模塊(不包括動態加載) |
-M |
查看靜態、共享模塊 |
-S |
查看當前配置文件設置 |
-t |
檢查配置文件語法 |
-V |
httpd編譯參數 |
配置指令:
apache
配置指令 |
備註 |
---|---|
ServerRoot "/etc/httpd" | 服務器的根路徑 |
TimeOut 120 |
TCP握手超時 |
KeepAlive off |
HTTP持久鏈接 |
KeepAliveTimeout 5 |
持久鏈接超時(5秒) |
MaxKeepAliveRequests 100 |
持久連接容許的請求數 |
ServerName www.tripartite.tech:8080 |
服務器主機名 |
DocumentRoot htdocs/ |
默認請求目錄 |
options Indexes FollowSymLinks | 列出目錄、服務器接受符號連接瀏覽器 none:啥都不設置安全 Includes:服務器端包含bash |
DirectoryIndex |
|
AllowOverride |
|
Order allow,deny |
訪問控制服務器 Allow,Deny網絡 任何符合Allow將放行,任何符合Deny將拒絕;均不符合,將拒絕。 Deny,Allow 若是匹配Deny,請求拒絕,除非它也匹配Allow指令;均不符合,將放行。 |
Allow from all |
訪問控制(網絡地址、ip地址、域名、域) |
Deny from all |
例子:
# 拒絕某個ip訪問 Order Allow,Deny Allow from all Deny from 115.120.85.152
2.用戶指南
2.1.配置文件
Apahce HTTP服務的配置文件,是由一系列指令構成的純文本文件。主配置文件一般叫作「httpd.conf」,路徑在編譯時指定,可是啓動服務時能夠被選項「-f」覆蓋。還可使用「Include」指令,加載其餘配置文件。任何指令,能夠出如今配置文件的任何位置。配置文件修改後,只有在其後啓動服務才能生效。
每一個指令單獨佔用配置文件的一行,使用反斜線「\」能夠把過長的一行配置拓展到下一行。拓展時,在反斜線後邊不能存在空白字符。指令的參數由空白字符分割,參數自身含有空白字符時,須要用到雙引號。配置文件中的指令不區分大小寫,可是指令的參數是大小寫敏感的。指令前的空白符是被忽略的,全部爲了方便查看,能夠進行縮進。
配置文件接受變量的定義(Define),獲取變量的值時跟shell腳本中同樣($var)。使用Define定義的變量,會覆蓋shell的環境變量。
在不啓動服務的狀況下,能夠經過命令判斷配置文件語法的正確性。能夠經過「f」選項在當前服務的配置文件外配置好配置文件並檢驗好後,在覆蓋默認配置文件。
[root@Rsync httpd2.2.8]# bin/httpd -t Syntax OK [root@Rsync httpd2.2.8]# bin/httpd -t -f /home/work/httpd.conf Syntax OK
2.1.1.模塊編譯
模塊屬性 |
說明 |
---|---|
MPM |
多處理模塊 有且只能有一個該類模塊。響應客戶端的請求處理、調度。默認會自動編譯,rpm包中經常是動態加載的,而源碼包安裝時默認是靜態加載的。 |
Base |
默認被編譯 |
Extension |
默認不會被編譯,須要使用到該類模塊時,經常須要從新編譯。 |
Experimental |
工具套件用到的模塊,表示當前版本再也不支持。 |
External |
第三方提供的模塊,須要時應從新編譯。 |
httpd是一個模塊化的服務。httpd的核心服務只包含最基本的功能,擴展功能須要更多的模塊來實現。當須要使用某個特殊的功能時,可能須要從新編譯源代碼來使用。不一樣的模塊大體分爲幾類:MPM、Base、Extension、Experimental、External。
若是httpd服務被編譯爲使用動態加載模塊,則可使用指令「LoadModule」在任什麼時候候單獨加載(隨後編譯的)模塊。查看當前httpd服務編譯了哪些模塊,可使用選項「l」。查看哪些模塊被動態加載,可使用選項「M」。
[root@Rsync httpd2.2.8]# bin/httpd -M Loaded Modules: core_module (static) ... [root@Rsync httpd2.2.8]# bin/httpd -l Compiled in modules: core.c ...
更多關於編譯的信息,……(關於當前編譯信息、能夠用到的配合指令)
# 編譯時的配置信息: [root@Rsync httpd2.2.8]# bin/httpd -V Server version: Apache/2.2.8 (Unix) Server built: Aug 18 2017 09:59:05 Server's Module Magic Number: 20051115:11 Server loaded: APR 1.2.12, APR-Util 1.2.12 Compiled using: APR 1.2.12, APR-Util 1.2.12 Architecture: 64-bit Server MPM: Prefork threaded: no forked: yes (variable process count) Server compiled with.... -D APACHE_MPM_DIR="server/mpm/prefork" # 查看編譯後可使用到配置指令。 [root@Rsync httpd2.2.8]# bin/httpd -L <Directory (core.c) Container for directives affecting resources located in the specified directories Allowed in *.conf only outside <Directory>, <Files> or <Location> <Location (core.c) Container for directives affecting resources accessed through the specified URL paths Allowed in *.conf only outside <Directory>, <Files> or <Location> <VirtualHost (core.c) Container to map directives to a particular virtual host, takes one or more host addresses Allowed in *.conf only outside <Directory>, <Files> or <Location>
2.1.2.指令範圍
指令位於主配置文件,將做用於整個服務。當須要縮小指令的範圍時,能夠將其嵌入「Directory」、「DirectoryMatch」、「Files」、「FilesMatch」、「Location」、「LocationMatch」這些「配置塊」中。這些指令容許嵌套,實現更加精細的管理。
httpd能夠同時發佈多個不一樣站點,這個功能常被稱爲「虛擬主機」。其中的指令將限制做用在<VirtualHost>配置塊中,用來響應某個特定的站點。
儘管大部分指令能夠位於配置文件的任意位置,可是,關於控制進程建立的指令僅能出如今主配置上下文中。
2.1.3.分佈式配置文件
容許出如今目錄的任意子目錄中,用來針對目錄進行分散管理。其語法與主配置文件相同。因爲每一個請求接收的時候都會讀取該配置文件(.htaccess),因此在這些文件中所作的更改當即生效(無須重啓服務)。
默認文件名爲「.htaccess
」,能夠經過指令「AccessFileName
」從新指定。
[root@tri httpd-2.4.6]# bin/httpd -L | grep -A 2 "^Access" AccessFileName (core.c) Name(s) of per-directory config files (default: .htaccess) Allowed in *.conf only outside <Directory>, <Files>, <Location>, or <If>
因爲是個分佈式配置,可能會與主配置文件在某些時候相左,這時另一個指令「AllowOverride」就粉墨登場了。
2.2.綁定地址、端口
httpd啓動的時候,默認監聽全部的本地地址。可是須要指定監聽某個肯定的端口,或者地址,端口和地址(用在設置虛擬機的時候)。Listen指令設定服務接收請求在某個地址、端口。
同時監聽多個端口
Listen 80 Listen 8000
監聽不一樣的地址
Listen 192.0.2.1:80 Listen 192.0.2.5:8000
監聽IPv6地址,須要用到一對中括號。
Listen [::]:80
Listen指令還有另一個選項,用來指定監聽的協議
Listen 192.170.2.1:8443 https
2.3.配置塊(塊容器)
配置文件中的指令,能夠做用於整個服務。也能夠用來限定某個特定的目錄、文件、主機、URL。配置塊又叫作塊容器。
2.3.1.配置塊種類
大體分爲兩類,僅僅在服務器啓動時產生效果的塊容器(封閉容器),和每次都會響應請求的塊容器(開放塊容器)。像以‘If’開頭的系列,<IfDefine>,<IfModule>,<IfVersion>若是符合特定條件就一次性響應。
[root@tri httpd-2.4.6]# bin/httpd -L | grep -A 3 "^<If" <IfModule (core.c) Container for directives based on existence of specified modules Allowed in *.conf anywhere and in .htaccess when AllowOverride isn't None <IfDefine (core.c) Container for directives based on existence of command line defines Allowed in *.conf anywhere and in .htaccess when AllowOverride isn't None -- <If (core.c) Container for directives to be conditionally applied Allowed in *.conf anywhere and in .htaccess when AllowOverride isn't None -- <IfVersion (mod_version.c) a comparison operator, a version (and a delimiter) Allowed in *.conf anywhere [no per-dir config] and in .htaccess when AllowOverride isn't None
2.3.2.開放塊容器
我沒有在apache httpd的說明文檔中找到這個說法,「開發塊容器」僅僅是個人我的理解。不在你們的討論之列,你有好的建議我以爲能夠接受,能夠修改個人標題。
開發塊大多用在配置文件系統(文件塊,httpd佔用到的空間),網頁空間(網頁塊,發佈出去的空間,也可能包含一些數據庫中的內容)。
文件塊的表明,<Directory>、<Files>,其中指令做用於該目錄、子目錄、以及其中的文件。(實現同樣的效果,也可使用「分佈式配置文件」)
<Directory /var/web/dir1> Options +Indexes </Directory> <Directory /var/web/dir1> <Files private.html> Require all denied </Files> </Directory>
網頁塊的表明,<Location>、<LocationMatch>……
<LocationMatch ^/private> Require all denied </LocationMatch> <Location /server-status> SetHandler server-status </Location>
2.4.服務配置
core提供的一些基本配置指令
2.4.1.服務識別
①ServerName
服務標識符,重定向時須要用到。用於虛擬主機時,會覆蓋主配置的設置項目。
ServerName www.example.com 當設置中沒有出現端口號時,會自動對應請求進來時使用的端口號
②ServerAdmin
當訪問出現錯誤時,返回給客戶瀏覽器聯繫信息。
ServerAdmin www-admin@example.com
③ServerSignature
用於在返回的頁面下產生一行內容(httpd版本、服務器域名、端口),調試未知頁面錯誤時較爲有用。
ServerSignature On|Off|EMail 默認Off
④ServerTokens
用於返回錯誤時提供某些服務器的信息。
2.4.2.文件位置
①DocumentRoot
httpd發佈文件的根目錄
②ErrorLog
設定日誌文件的名稱(包含路徑),不是絕對路徑的時候,以ServerRoot爲基礎。默認「logs/error_log」(unix)。
③PifFile
默認「logs/httpd.pid」
④ServerRoot
服務安裝的路徑,路徑在編譯經過「prefix」肯定。
2.5.SSL/TLS
httpd使用了模塊「mod_ssl」,該模塊提供了OpenSSL庫的接口。使httpd實現安全套接字層和傳輸層安全協議的強加密成爲可能。
2.5.1.mod_ssl配置