系統版本 Centos 7
安裝httpd 2.4
1、編譯安裝:
2、yum倉庫安裝
~]# yum -y insatll httpd
程序環境配置文件;
httpd主配置文件。
- /etc/httpd/conf/httpd.conf
自建配置文件。
在不修改主配置文件的情況下新增一個配置文件。
- /etc/httpd/conf.d/*.conf
Systemd 服務配置文件。
- /usr/lib/systemd/system/httpd.service
主程序文件:
- /usr/sbin/httpd httpd-2.4支持的MPM的動態切換;
日志文件:
- /var/log/httpd;
- access_log; 訪問日志
- error_log; 錯誤日志
站點文檔
- /var/www/html ; 即幫助文件
模塊文件路徑
- /uar/lib64/httpd/modules
服務控制命令:
- systemctl enable | disable httpd.service 是否自動啟動
- systemctl { start | stop | restart | status } httpd.service 服務是否 開啟、停止、重啟、狀態
多處理模塊(MPM)
- prefork:多進程模型,一個進程響應一個請求;
- worker:多進程多線程模型,一個線程響應一個請求;
- event:事件驅動模型,一個進程響應n個請求;
分別啟用prefork、worker、event工作方式
默認開啟的狀態是prefork,一旦啟動/etc/sysconfig/httpd里的worker、event模式便自動切換.
1、開啟worker模式
[root@localhost ~]# vim /etc/httpd/conf.modules.d/00-mpm.conf
...
...
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so 禁用
...
...
LoadModule mpm_worker_module modules/mod_mpm_worker.so 啟用
...
...
#LoadModule mpm_event_module modules/mod_mpm_event.so 禁用
重啟服務并檢查語法錯誤
[root@localhost ~]# systemctl restart httpd.service
[root@localhost ~]# httpd -t
Syntax OK
[root@localhost ~]# httpd -M | grep mpm
mpm_worker_module (shared)
2、開啟event模式
[root@localhost ~]# vim /etc/httpd/conf.modules.d/00-mpm.conf
...
...
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so 禁用
...
...
#LoadModule mpm_worker_module modules/mod_mpm_worker.so 禁用
...
...
LoadModule mpm_event_module modules/mod_mpm_event.so 啟用
重啟服務并檢查語法錯誤
[root@localhost ~]# systemctl restart httpd.service
[root@localhost ~]# httpd -t
Syntax OK
[root@localhost ~]# httpd -M | grep mpm
mpm_event_module (shared)
3、開啟prefork模式
[root@localhost ~]# vim /etc/httpd/conf.modules.d/00-mpm.conf
...
...
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so 啟用
...
...
#LoadModule mpm_worker_module modules/mod_mpm_worker.so 禁用
...
...
#LoadModule mpm_event_module modules/mod_mpm_event.so 禁用
重啟服務并檢查語法錯誤
[root@localhost ~]# systemctl restart httpd.service
[root@localhost ~]# httpd -t
Syntax OK
查看啟用的模式
[root@localhost ~]# httpd -M | grep mpm
mpm_prefork_module (shared)
錯誤修復辦法:AH00558:
[root@localhost ~]# httpd -t
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
Syntax OK
...
...
#
ServerName www.example.com:80 第95行 去掉前面的 # 號
#
...
...
系統版本 Centos 6.7
安裝httpd 2.2
1、編譯安裝:
2、yum倉庫安裝
~]# yum -y install httpd
程序環境配置文件;
配置文件:
- /etc/httpd/conf/httpd.conf
- /etc/httpd/conf.d/*.conf
服務腳本
- /etc/rc.d/init.d/httpd
- /etc/sysconfig/httpd 腳本配置文件
主程序文件:
- /usr/sbin/httpd
- /usr/sbin/httpd.worker
- /usr/sbin/httpd.event
日志文件:
- /var/log/httpd;
- access_log; 訪問日志
- error_log; 錯誤日志
站點文檔:
- /var/www/html
模塊文件路徑:
- /usr/lib64/httpd/modules
服務啟動
- chkconfig httpd on | off
服務控制
- service { start | stop | restart | status | configterst | reload } httpd
多處理模塊(MPM)
- prefork:多進程模型,一個進程響應一個請求;
- worker:多進程多線程模型,一個線程響應一個請求;
- event:事件驅動模型,一個進程響應n個請求;
分別啟用prefork、worker、event工作方式
默認開啟的狀態是prefork,一旦啟動/etc/sysconfig/httpd里的worker、event模式便自動切換.
1、開啟worker模式
[root@localhost ~]# vim /etc/sysconfig/httpd
...
...
HTTPD=/usr/sbin/httpd.worker 啟用
#HTTPD=/usr/sbin/httpd.event #停用
...
[root@localhost ~]# service httpd restart 重啟服務
停止 httpd: [確定]
正在啟動 httpd:httpd.worker: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
[確定]
[root@localhost ~]# ps aux | grep httpd
root 6270 0.0 0.4 184100 4040 ? Ss 13:29 0:00 /usr/sbin/httpd.worker
apache 6273 0.3 0.5 528360 5368 ? Sl 13:29 0:00 /usr/sbin/httpd.worker
apache 6274 0.2 0.5 593896 5360 ? Sl 13:29 0:00 /usr/sbin/httpd.worker
apache 6275 0.2 0.5 528360 5360 ? Sl 13:29 0:00 /usr/sbin/httpd.worker
root 6388 0.0 0.0 103320 860 pts/0 S+ 13:29 0:00 grep httpd
2、開啟event模式
[root@localhost ~]# vim /etc/sysconfig/httpd
...
...
#HTTPD=/usr/sbin/httpd.worker #停用
HTTPD=/usr/sbin/httpd.event 啟用
...
[root@localhost ~]# service httpd restart
停止 httpd: [確定]
正在啟動 httpd:httpd.event: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
[確定]
[root@localhost ~]# ps aux | grep httpd
root 6422 0.0 0.4 184108 4040 ? Ss 13:32 0:00 /usr/sbin/httpd.event
apache 6425 0.0 0.5 528368 5332 ? Sl 13:32 0:00 /usr/sbin/httpd.event
apache 6426 0.0 0.5 528368 5348 ? Sl 13:32 0:00 /usr/sbin/httpd.event
apache 6427 0.0 0.5 528368 5336 ? Sl 13:32 0:00 /usr/sbin/httpd.event
root 6510 0.0 0.0 103320 860 pts/0 S+ 13:32 0:00 grep httpd
3、開啟prefork模式
[root@localhost ~]# vim /etc/sysconfig/httpd
...
...
#HTTPD=/usr/sbin/httpd.worker #停用
#HTTPD=/usr/sbin/httpd.event #停用
...
[root@localhost ~]# service httpd restart
停止 httpd: [確定]
正在啟動 httpd:httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
[確定]
[root@localhost ~]# ps aux | grep httpd
root 6542 0.0 0.3 183892 3844 ? Ss 13:35 0:00 /usr/sbin/httpd
apache 6545 0.0 0.2 183892 2492 ? S 13:35 0:00 /usr/sbin/httpd
apache 6546 0.0 0.2 183892 2476 ? S 13:35 0:00 /usr/sbin/httpd
apache 6547 0.0 0.2 183892 2476 ? S 13:35 0:00 /usr/sbin/httpd
apache 6548 0.0 0.2 183892 2476 ? S 13:35 0:00 /usr/sbin/httpd
apache 6549 0.0 0.2 183892 2476 ? S 13:35 0:00 /usr/sbin/httpd
apache 6550 0.0 0.2 183892 2476 ? S 13:35 0:00 /usr/sbin/httpd
apache 6551 0.0 0.2 183892 2476 ? S 13:35 0:00 /usr/sbin/httpd
apache 6552 0.0 0.2 183892 2476 ? S 13:35 0:00 /usr/sbin/httpd
root 6555 0.0 0.0 103320 860 pts/0 S+ 13:36 0:00 grep httpd
簡述request
request對象是http事物中用于客戶端發出獲取數據請求,在獲取數據后返回至客戶端;
request報文語法格式:
request請求:
<medhod> <request-URL> <version>
<HEADERS>
<entity-boby>
request響應報文
<version> <status> <reason-phrase>
<HEADERS>
<entity-boby>
method方法:
- GET: 從服務器獲取一個資源;
- HEAD: 只從服務器獲取文檔的響應首部;
- POST: 向服務器發送要處理的數據;
- PUT: 將請求的主題部分存儲在服務器上;
- DELETE: 請求刪除服務器上的指定文檔;
- TRACE: 追蹤請求到達服務器中間經過的代理服務器;
- OPTIONS: 請求服務器返回對指定資源的支持使用的請求方法;
協議查看或分析工具:
- tcpdump
- tshark
- wireshark
status 狀態碼:
- 1xx:100-101;信息提示;
- 2xx:200-206;成功;
- 3xx:300-305;重定向;
- 4xx:400-415;客戶端錯誤信息;
- 5xx:500-505;服務器錯誤信息;
常用的狀態嗎:
- 200:成功,請求的所有數據通過響應報文的entity-body部分發送:ok
- 301:請求的URL指向的資源已經被刪除;但在響應報文中通過首部Location指明了資源現在所處的新位置;Moved permanently
- 302:與301相似,但在響報文中通過Location指明資源所處臨時新位置;Found
- 304:客戶端發出了條件式請求,但服務器上的資源未曾發生改變,則通過響應此響應狀態碼通過通知客戶端:Not Modified
- 401:需要輸入賬號和密碼r認證方能訪問資源:Unauthorized
- 403:請求被禁止;Forbidden
- 404:服務器無法找到客戶端請求的資源:Not Found
- 500:服務器內部錯誤;Internal Server Error
- 502:代理服務器從后端服務器收到一條偽響應;Bad Gateway
httpd 虛擬機
httpd虛擬機是將多個網站運行到一臺服務器上,。
實現的三種方案:
- 基于ip:虛擬主機至少擁有一個獨立的ip地址;
- IP相同;但端口不同;
- 基于port:虛擬主機至少擁有一個獨立的port;
- IP不同;但端口均為默認端口;
- 基于FQDN:虛擬主機至少擁有一個FQDN:
- 請求報文首部不同;
注意:
- httpd-2.2 虛擬主機不可與中心主機混用;使用前要先禁用’main’主機;注釋掉中心主機的DocumentRoot指令即可;
- httpd-2.4 配置即可使用。
虛擬主機的配置方法:
<VirtualHost IP:PORT>
ServerName FQDN
DocumentRoot "/PATH/"
<Directory "/PATH/">
Options None
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
CentOS 7 虛擬機:
關閉防火墻和SELinux
IP不同
配置兩臺虛擬機:
- 虛擬機A
- www.abc.io
- 192.168.199.175
- /data/web/abc
- 虛擬機B
- www.xyz.io
- 192.168.199.185
- /data/web/xyz
1、首先創建abc,xyz網站文件目錄
[root@localhost web]# mkdir -pv /data/web/{abc,xyz}
abc訪問主頁配置
[root@localhost web]# vim /data/web/abc/index.html
<h1>Welcome www.abc.io</h1>
xyz訪問主頁配置
[root@localhost web]# vim /data/web/xyz/index.html
<h1> Welcome www.xyz.io </h1>
2、確定電腦有兩個ip
[root@localhost web]# ip addr add 192.168.199.185/24 dev ens33
3、配置A、B主配置服務文件
A、
[root@localhost conf.d]# vim abc.conf
<VirtualHost 192.168.199.175:80>
ServerName www.abc.io
DocumentRoot "/data/web/abc"
<Directory "/data/web/abc">
Options None
AllowOverride None
Require all granted
</Directory>
CustomLog "logs/abc_access_log" combined
</VirtualHost>
B、
[root@localhost conf.d]# vim xyz.conf
<VirtualHost 192.168.199.185:80>
ServerName www.xyz.io
DocumentRoot "/data/web/xyz"
<Directory "/data/web/xyz">
Options None
AllowOverride None
Require all granted
</Directory>
CustomLog "logs/xyz_access_log" combined
</VirtualHost>
4、驗證語法錯誤:
[root@localhost conf.d]# httpd -t
Syntax OK
[root@localhost conf.d]# apachectl reload
5、瀏覽器分別訪問
A、192.168.199.175
B、192.168.199.185
注意如果提示錯誤檢查是否關閉了SELinux 和防火墻。
端口不同
1、修改B主機的ip 及添加端口
[root@localhost conf.d]# cat /etc/httpd/conf.d/xyz.conf
listen 8090 不要忘記添加端口
<VirtualHost 192.168.199.175:8090> 修改ip地址及端口
ServerName www.xyz.io
DocumentRoot "/data/web/xyz"
<Directory "/data/web/xyz">
Options None
AllowOverride None
Require all granted
</Directory>
CustomLog "logs/xyz_access_log" combined
</VirtualHost>
[root@localhost conf.d]#
2、訪問測試
192.168.199.175
192.168.199.175:8090
主機名不同
修改A 配置文件:
<VirtualHost 192.168.199.175:80>
ServerName www.abc.io
DocumentRoot "/data/web/abc"
<Directory "/data/web/abc">
Options None
AllowOverride None
Require all granted
</Directory>
CustomLog "logs/abc_access_log" combined
</VirtualHost>
修改B 配置文件:
<VirtualHost 192.168.199.175:80>
ServerName www.xyz.io
DocumentRoot "/data/web/xyz"
<Directory "/data/web/xyz">
Options None
AllowOverride None
Require all granted
</Directory>
CustomLog "logs/xyz_access_log" combined
</VirtualHost>
測試: 由于沒有做DNS解析訪問可以修改本機的hosts文件
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.199.175 www.abc.io www.xyz.io 添加解析
瀏覽器輸入
CentOS 6 有時間弄
注意: 如果是httpd-2.2,則使用基于FQDN的虛擬主機時,需要事先使用如下指令:
NameVirtualHost IP:PORT
其他命令使用格式:
<VirtualHost *:80>
ServerAlias www.x.io www.y.io www.z.io 網站別名
ServerName www.xyz.io
DocumentRoot "/data/web/xyz"
<Directory "/data/web/xyz">
Options None
AllowOverride None
Require all granted
</Directory>
CustomLog "logs/xyz_access_log" combined
ErrorLog "logs/xyz_Error_log" 錯誤日志
</VirtualHost>
安裝httpd
~]# yum -y insatll httpd
1、修改站點目錄
1、創建目錄及測試文件。
~]# mkdir -pv /data/web/www
...
...
~]# vim /data/web/www/index.html
<h1> Hello World </h1>
2、修改配置文件的默認目錄并賦權給目錄
~]# vim /etc/httpd/conf/httpd.conf
...
...
ServerName www.example.com:80 第95行 啟用本行.
...
...
賦權給目錄訪問權限
#DocumentRoot "/var/www/html"
DocumentRoot "/data/web/www" 第120行;修改目錄.
...
...
...
#<Directory "/var/www/html">
<Directory "/data/web/www"> 第133行;授權目錄權限.
...
...
</Directory>
3、重啟服務瀏覽器測試
[root@VM_35_189_centos conf]# httpd -t
Syntax OK
[root@VM_35_189_centos conf]# systemctl start httpd.service
網頁
2、IP站點授權訪問
1、全部連接授權管理
<Directory "/data/web/www">
...
#Require all granted 全部允許
Require all denied 全部禁止
...
</Directory>
2、限制固定IP、網段訪問,多個地址可用空格分開。
#IP禁止訪問
<Directory "/data/web/www">
...
<RequireAll>
Require all granted
Require not ip 192.168.1.100 192.168.1.200
</RequireAll>
</Directory>
#網段禁止訪問
<Directory>
<RequireAll>
Require not ip 192.168 172.16
</RequireAll>
</Directory>
3、僅允許IP、網段訪問
#允許IP訪問
<Directory>
<RequireAll>
Require ip 27.215.227.213
</RequireAll>
</Directory>
#允許網段訪問
<Directory>
<RequireAll>
Require all granted
Require not ip 192.168 172.16
</RequireAll>
</Directory>
4、限制用戶訪問
<Directory>
<RequireAll>
Require all granted
Require not host DESKTOP-811RO48
</RequireAll>
</Directory>
5、僅允許用戶訪問
<Directory>
<RequireAll>
Require all granted
Require host DESKTOP-811RO48
</RequireAll>
</Directory>
Options :定義訪問特性
- Indexes:允許索引,指明的URL路徑不存在或沒有與主頁面資源相匹配的文件時,返回給用戶索引列表。
- FollowSymLinks:允許跟蹤符號鏈接文件所指向的源文件。
- None:禁止訪問
- All:啟用除了MultiViews所有選項
定義格式:
1、允許索引,允許跟蹤符號鏈接文件
<Directory>
Options Indexes FollowSymLinks
</Directory>
測試
創建符號鏈接文件
[root@VM_35_189_centos conf]# ln -sv /etc/fstab /data/web/www/fstab.html
‘/data/web/www/fstab.html’ -> ‘/etc/fstab’
創建索引列表文件夾
[root@VM_35_189_centos www]# mkdir /data/web/www/images
[root@VM_35_189_centos www]# find /usr/share/ -iname "*.jpg" -exec cp {} /data/web/www/images/ \;
瀏覽器訪問:IP/images 或 IP/fstab.html查看效果
2、禁止訪問設置
<Directory>
Options None
</Directory>
定義站點主頁面:默認資源優先訪問
- DirectoryIndex 具有最高優先級;
- index.html 次級優先級;
- index.html.var 當以上兩者不純在時;
分別定義:
[root@VM_35_189_centos images]# vim data/web/www/iamges/DirectoryIndex
<h1> one </h1>
[root@VM_35_189_centos images]# vim data/web/www/iamges/index.html
<h1> two </h1>
[root@VM_35_189_centos images]# vim data/web/www/iamges/index.html.var
<h1> three </h1>
修改配置文件:
[root@VM_35_189_centos images]# vim /etc/
...
DirectoryIndex DirectoryIndex 后邊的是文件名
...
瀏覽器輸入 IP/images 顯示為 one
自上而下屏蔽后查看效果。
定義路徑別名
<IfModule alias_module>
Alias /usr/ "/PATH/TO/SOMEDIR/"
</IfModule>
測試
創建鏈接文件
[root@VM_35_189_centos images]# find /usr/share -iname "*.jpg"
修改配置文件
[root@VM_35_189_centos images]# vim /etc/httpd/conf/httpd.conf
輔助配置信息:
<Directory "/usr/share/backgrounds/"> 修改鏈接路徑
AllowOverride None
Options Indexec FollowSymLinsk
Requirw all grented
</Directory>
<IfModule alias_module>
Alias /images/ "/usr/share/backgrounds/"
</IfModule>
1、進入瀏覽器打開IP/images,測試;
2、屏蔽別名打開瀏覽器IP/images,測試;
參考:馬哥筆記 網絡資料
基于用戶的訪問控制
1 、用戶密碼訪問控制
生成賬號密碼文件:
[root@VM_35_189_centos conf.d]# htpasswd -c /data/web/www/admin/.htpasswd tom
New password:
Re-type new password:
Adding password for user tom
[root@VM_35_189_centos conf.d]# htpasswd /data/web/www/admin/.htpasswd jerry
New password:
Re-type new password:
Adding password for user jerry
[root@VM_35_189_centos conf.d]# cd /etc/httpd/cond.d/
[root@VM_35_189_centos conf.d]# vim admin.conf 配置一個用戶管理配置文件
<Directory "/data/web/www/admin">
Options None
AllowOverride None
AuthType basic
AuthName "Admin Area,plz enter username and password."
AuthUserFile "/etc/httpd/conf.d/.htpasswd"
Require user jerry obama
</Directory>
瀏覽器打開:輸入IP/amdin 訪問測試
2、用戶組訪問控制:
[root@VM_35_189_centos conf.d]# cd /etc/httpd/cond.d/
[root@VM_35_189_centos conf.d]# vim .htgroup 添加組文件
adminals: tom jerry 增加組成員
[root@VM_35_189_centos conf.d]# vim admin.conf 修改剛剛添加的配置文件,
<Directory "/data/web/www/admin">
Options None
AllowOverride None
AuthType basic
AuthName "Admin Area,plz enter username and password."
AuthUserFile "/etc/httpd/conf.d/.htpasswd"
AuthGroupFile "/etc/httpd/conf.d/.htgroup"
Require group adminals
</Directory>
瀏覽器打開:輸入IP/amdin 訪問測試
htpasswd 賬戶密碼文件生成工具
語法: htpasswd [options] /PATH/TO/HTTPD_PASSWD_FILE usernamed passwd
常用命令:
- -c:僅首次創建此處指定的文件,當文件存在時則會清空文件。
- -m: md5格式加密;
- -s:格式加密;
- -D: 刪除指定用戶
- -b: 批模式添加用戶
批模式添加用戶: htpasswd -b [options] /PATH/TO/HTTPD_PASSWD_FILE username passwd
定義服務配置文件:
- /etc/http/conf/
- /etc/httpd/conf.d/
<Directory"">
Options None
AllowOverride None
AuthType basic
AuthName "Admin Area,plz enter username and password."
AuthUserFile "/PATH/TO/HTTPD_PASSWD_FILE"
Require user Name1 Name2 ...
</Directory>
組賬號進行認證: (1) 定義安全區域:
<Directory"">
Options None
AllowOverride None
AuthType Basic
AuthName "string"
AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE"
AuthGroupFiel "/PAHT/TO/HTTPD_GROUP_FILE"
Require group grpname1 grpname2 ...
</Directory>
(2) 創建用戶賬號和組賬號文件; 組文件:每一行定義一個組 GRP_NAME: username1 username2 …
持久連接配置
[root@localhost conf.d]# vim /etc/httpd/conf.d/kepalive.conf
keepAlive on | off 是否啟用長連接
keepAliveTimeout 30 超時
maxkeepaliveRequests 100 可以保持多少個長連接
[root@localhost conf.d]# httpd -t
測試鏈接:
[root@localhost conf.d]# telnet 192.168.199.175 80 輸入服務器ip port
Trying 192.168.199.175...
Connected to 192.168.199.175.
Escape character is '^]'.
GET /index.html HTTP/1.1 輸入命令
HOST:192.168.199.175 連續按兩次Enter
HTTP/1.1 200 OK
Date: Fri, 15 Jun 2018 04:05:25 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Fri, 15 Jun 2018 00:52:41 GMT
ETag: "1d-56ea3a211091a"
Accept-Ranges: bytes
Content-Length: 29
Content-Type: text/html; charset=UTF-8
<h1>Welcome www.abc.io</h1>
參考資料:馬哥筆記
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/101168