apache指令說明:
http://httpd.apache.org/docs/2.2/mod/directives.html
Listen 172.18.100.67:8081 監聽某個指定地址和端口
啟動前檢查一下語法:
httpd -t
如果要監聽多個端口,要多行寫
Listen 80
Listen 8080
頁面上關于主機的一些信息:
ServerTokens OS
ExtendedStatus On
Apache服務器可以通過特殊的HTTP請求,來報告自身的運行狀態,
打開這個ExtendedStatus 參數可以讓服務器報告更全面的運行狀態信息
指明配置存放的位置:
ServerRoot “/etc/httpd”
超時時間與后端應用建立連接的時候
Timeout 60
DocumentRoot : 資源映射 (網頁根目錄)
我們在訪問某個站點的時候,站點從哪兒去加載資源
http://www.magedu.com/a.jpg ——–> /var/www/html/a.jpg
DocumentRoot “/data/www/” #建議修改時注釋復制后修改
注意: setenforce 0 一定要記得最先關掉
非保持連接(短連接) #連接請求后立即斷開
對于大量并發的場景中,短連接的三次握手四次揮手占據了大量帶寬
保持連接(長連接) #連接請求后不會立馬斷開,避免再次連接三次握手
避免過多的連接保持,可以從時間和數量兩個維度對長連接加以限制
KeepAlive Off #短連接
KeepAlive on #生成環境都要開啟,下面的信息才會生效
查看httpd 程序的模塊列表
查看靜態編譯的模塊:#httpd -l
查看靜態編譯及動態編譯的模塊:#httpd -M
更換使用的Httpd 程序以支持其他MPM 機制,修改 /etc/sysconfig/httpd
注意:對Linux 而言,線程是跟進程一樣的量級,
多線程模型所能帶來的性能的提升是有效的。Worker 和prefork 的性能并沒有
太大的改變。 所以基本沒必要更改。
條件式配置,prefork 和worker 分別對應不同的配置區段
Prefork 模式
<IfModule prefork.c>
StartServers 8 #服務器進程啟動時候啟動多少空閑進程
MinSpareServers 5 #最少空閑進程數,如果少于5 ,主控進程
再啟動幾個達到5
MaxSpareServers 20 #最大空閑進程數,如果大于20 主控進程對
子進程進行回收
ServerLimit 256 #所允許啟動的最大在線進程數量
MaxClients 256 #最大允許啟動進程數量響應用戶請求(最
大并發響應數)
MaxRequestsPerChild 4000 # 每個進程最多可以處理多少個請求,
超過4000 銷毀
</IfModule>
worker 模式
<IfModule worker.c>
StartServers 4 #服務器進程啟動時候啟動多少空閑進程
MaxClients 300 #最大并發響應數300
MinSpareThreads 25 #最小空閑線程數25
MaxSpareThreads 75 #最大空閑線程數75
ThreadsPerChild 25 #每個進程啟動25個線程
MaxRequestsPerChild 0 #每個進程可以處理無限個請求
</IfModule>
PV page view 頁面訪問量 只能大概得出每天的QPS
UV user page 用戶訪問量
PV UV 運營人員比較關注的數據
QPS: 每秒的請求數 (統計峰值QPS)
QPM: 每分鐘的請求數
一天的PV 一百萬,實際的QPS只有12,需要除以86400
峰值的QPS 峰值的QPM 才是我們需要關注的
經驗值:
QPS 硬件資源不成為瓶頸的前提下:
C++ 的應用迸發值一般在1500左右
JAVA (tomcat)的應用在 1000–1200
PHP 800–900
MPM(多路處理模塊機制):
多路處理模塊機制MPM(Multipath processing Modules)
Prefork :多進程模型,每個進程響應一個請求,一個主進程,多個子進程
Worker :多進程多線程模型,每個線程響應一個請求,MN
Event :事件驅動模型,一個進程響應多個請求
apache 2.2 中MPM不支持動態裝卸載,直接放在模塊里面
httpd -l #使用此命令可以看出改模式在模塊里面,
core.c
prefork.c
http_core.c
mod_so.c
httpd -M | grep prefork
注意: 如果想自己編譯一個Apache 2.2 那么你編譯成什么模式,它就是什么模式
如果想改模式 只能重新編譯
使用yum安裝的時候centos官方想了一個辦法同時提供了三個二進制可執行文件:
[root@CentOS68 www]# ll /usr/sbin/httpd
-rwxr-xr-x. 1 root root 356320 May 12 2016 /usr/sbin/httpd
-rwxr-xr-x. 1 root root 369480 May 12 2016 /usr/sbin/httpd.event
-rwxr-xr-x. 1 root root 368136 May 12 2016 /usr/sbin/httpd.worker
如果你想切換模式,可以直接修改/etc/sysconfig/httpd
LoadModule authn_default_module modules/mod_authn_default.so
DSO指令 模塊名 模塊的存放的相對路徑(/etc/httpd)
ServerName www.magedu.com:80
定義網站(中心主機)域名
1 需要借助DNS 將域名解析(A記錄)指定到服務器對應的IP
2 或者直接使用hosts文件
vim /etc/hosts
172.18.100.67 www.mageu.com
對于windows來說是在
C:\Windows\System32\drivers\etc\hosts
可基于兩種機制指明對哪些資源進行何種訪問控制
對目錄或者是文件進行訪問控制 不建議使用正則表達式
<Directory “/var/html/www”>
……
</Directory> // 對目錄下所有資源實現訪問控制
File “ ”>
….
</File> //
Options Indexes FollowSymLinks
如果訪問一個站點 首頁不存在且有Indexes選項 則:
要么直接返回資源不存在
要么將當前的目錄里面的內容全部給列出來,供自己選擇 indexs
如果你的網站是在公網上 訪問者將看到網站的所有內容,很危險
如果用作內容共享,供訪問者訪問目錄下的資源,可以將此選項打開。
FollowSymLinks 是否允許訪問軟連接所指向的真實文件,有的話表示允許
Includes // 允許啟用服務端包含
SymLinksifOwnerMatch // 源文件和鏈接的目標文件的屬主屬組相
同的時候才允許跟蹤訪問
ExecCGI // 允許執行CGI 腳本
None // 全部都不
ALL // 全部都
AccessFileName .htaccess
針對每個網站子目錄定義一個配置文件, #不建議使用,會耗費資源
基于源地址定義訪問規則:
Order allow,deny # 定義允許或者禁止
Allow from 172.16 # 僅允許172.16的網段訪問
Deny from 172.18.0.1 # 不允許此網絡訪問
DirectoryIndex index.html index.html.var index.php
定義默認的訪問主頁
路徑別名
www.magedu.com/bbs/a.jpg ——-網頁根目錄(/var/www/html) bbs/a.jpg
如果定義一個路徑別名的時候
www.magedu.com/bbs/a.jpg /data/www/a.jpg
定義一個別名:
exam: Alias /download/ “/data/www/” #定義download 指向/data/www/
mkdir download
cd download/
echo “/var/www/html/download” >> a.html
vim /etc/httpd/conf/httpd.conf
更改: Alias /download/ “/data/www/”
cd /data/www/
ls
echo “/data/www/” >> a.html #方便查看這樣寫
service httpd restart
AddDefaultCharset UTF-8
生產環境一定要保證字符集為UTF-8
error_log 放的是Apache本身出錯的信息 # 是本身的錯誤,而不是用戶出錯信息
acces_log 記錄訪問信息 每條訪問會生產一條日志信息
ErrorLog logs/error_log 定義錯誤日志的存放路徑已經名稱
日志級別:
debug, 所有信息,只要產生就全部記錄下來 日志量最大的,便于生產調試
info, 所有的信息數據
notice, 引起注意
warn, 警告 只記錄警告信息 #一般選擇中間值,
error, 發生錯誤
crit, 級別很嚴重
alert, 紅色警戒
emerg. 引起恐慌 日志量最小
一天某個日志量200G-300G
刪日志的時候 占用大量的CPU資源
echo “” >
> log
cp /dev/null log
禁止使用rm,使用上面三種
CustomLog logs/access_log common
定義訪問日志 日志格式
自定義日志格式 運維規范化中日志規范
日志的作用:
1 error
2 統計QPS QPM
統計訪問前10的IP:
cat /var/log/httpd/access_log |awk ‘{print $1}’ |sort | uniq -c | sort -nr | head
ELK 對日志做聚合分析
常見的用戶認證方式
basic : 明文認證
表單認證 : digest
Basic 認證配置步驟
定義安全域
<Directory “”>
Options None
AllowOverride None
AuthType Basic #基本basic認證
AuthName “String” #提示信息
AuthUserFile “/PATH/TO/HTTPD_USER_PASSWD_FILE” #密碼文件路徑
# AuthGroupFile “/PATH/TO/HTTPD_GROUP_FILE” # 基于組來認證
Require user username1 username2…
# Require group grpname1 grpname2 …
</Directory >
賬號和密碼存儲(文本文件)
新建密碼文件
htpasswd -c -m /etc/httpd/conf/.htpasswd tom
注意 -c 第一次創建密碼文件的時候使用,后面創建不需要,否則會覆蓋
-m MD5 認證
Httpd虛擬主機的使用:
通常情況下 ,一個服務器上只能跑一個網站,或者說一個進程只能跑
一個網站。虛擬主機實現了一臺機器上或者一個Web 服務上為多個網站提供服務。
站點標示:Socket
IP 相同,端口不同,易于實現,不實用
IP 不同,端口均為默認端口,不實用,需要多個IP ,成本很高
IP 相同,端口相同,FQDN 不同,在請求報文首部實現
虛擬主機的實現方式
基于IP 為每個虛擬主機至少準備一個IP 地址
基于port 為每個虛擬主機至少一個獨立的port
基于FQDN 每個虛擬主機至少一個FQDN
注意:虛擬主機和中心主機不能同時使用,直接注釋掉中心主機
基于端口
Listen 8080 #基于端口,需要監聽,在這方便些
<VirtualHost 172.18.100.67:80> #如果基于IP, 需要多個網卡,端口不變
ServerAdmin ma@mageud.com
DocumentRoot /data/www1
ServerName www.a.com
ErrorLog logs/a-error_log
CustomLog logs/a-access_log common
</VirtualHost>
<VirtualHost 172.18.100.67:8080>
ServerAdmin ma@mageud.com
DocumentRoot /data/www2
ServerName www.b.com
ErrorLog logs/b-error_log
CustomLog logs/b-access_log common
</VirtualHost>
新建子配置文件: #基于域名FQDN的虛擬主機
NameVirtualHost 172.18.100.67:80 #一定需要此選項
<VirtualHost 172.18.100.67:80>
ServerAdmin ma@mageud.com
DocumentRoot /data/www1
ServerName www.a.com
ErrorLog logs/a-error_log
CustomLog logs/a-access_log common
</VirtualHost>
<VirtualHost 172.18.100.67:80>
ServerAdmin ma@mageud.com
DocumentRoot /data/www2
ServerName www.b.com
ErrorLog logs/b-error_log
CustomLog logs/b-access_log common
</VirtualHost>
驗證:
/etc/hosts添加
172.18.100.67 www.a.com
172.18.100.67 www.b.com
[root@CentOS68 conf.d]# curl www.a.com
www1
[root@CentOS68 conf.d]# curl www.b.com
www2
curl
-i 返回網站信息的同時返回頭信息(GET)
-I 只返回請求的頭信息 (HEAD)
-o 將請求結果寫到某個文件里面
-s 靜默輸出
-k 不使用證書
-m 5 最大傳輸時間5秒
Httpd 狀態頁面開啟
/etc/httpd/conf/httpd.conf 開啟status 模塊
啟動狀態訪問頁面
<Location /server-status>
SetHandler server-status
Order deny,allow
Allow from all 修改訪問權限 #默認是deny
Allow from .example.com
</Location>
然后訪問域名:如:192.168.235.135/server-status
curl -I URL(不支持HEAD) #很多網站不支持此方式,默認不安全
405 method not allowed
curl -i -s http://www.baidu.com | grep “HTTP” | cut -d” ” -f2
200 #抓狀態碼200
通常用來判斷一個網站是否可以正常訪問
elinks www.a.com | grep “www”
#純文本界面的www,如果出現亂碼,需要調字符集UTF-8
#用來判斷一個網站是否正常
#狀態監控和健康檢查
使用mod_deflate 模塊壓縮頁面優化傳輸,生產模式默認沒有定義,需要再主配置文件尾部
手動添加,只需要三步就KO了
1.設置一個輸出過濾器
2.根據內容類型執行過濾
3.指定壓縮級別
4.有時需要排除壓縮文件
HTTP——-全站HTTPS
magedu.com 這個域的證書和key
如果只需要用戶通過某端口訪問:
1 跳轉 用戶通過80訪問,然后網站重定向到443端口
www.magedu.com 自動跳轉 重定向
https://www.magedu.com
Apache寫rewrite
2 HSTS協議(了解一下) 直接在瀏覽器里跳轉
訪問www.magedu.com 的時候瀏覽器直接幫你改成https://www.magedu.com
學習Nginx的時候 在Nginx寫rewrtie跳轉
壓力測試:全鏈路壓測
Jmeter, Loadrunner等圖形界面工具
網易tcpcopy #建議使用此工具
Httpd2.4在6上編譯安裝:
1.安裝apr-1.4和apr-util-1.4以上版本, 可移植的系統庫,來編譯安裝
2.編譯安裝以上版本,安裝apr-1.4只需要指定安裝目錄即可
3.編譯安裝apr-util-1.4以上版本,需要增加 –with-apr=(apr的安裝目錄)
4.然后就可以痛快的安裝httpd2.4了,可能需要開啟指定的功能
1 2.4 新建虛擬主機 以及中心主機需要對網頁目錄進行顯示授權
Require all granted #每個虛擬主機需要添加顯示授權
2 2.4上新建基于域名的虛擬主機的時候不需要指定
NameVirtualHost 172.18.100.67:80 #可以不需要指定這些
3 持久連接支持毫秒級別
KeepAlive On #默認沒有,需要手動在結尾添加
KeepAliveTimeout 30ms
MaxKeepAliveRequests 20
cookie 客戶端標識用戶的身份
session 服務器端標識用戶的身份
session共享
1 保存共享存儲 NFS 共享文件系統
2 保存到數據庫中 MySQL中
3 保存到cookie中
4 保存到內存數據庫中(memcached redis) 目前流行的
原創文章,作者:shewei,如若轉載,請注明出處:http://www.www58058.com/73794