Apache服務簡介
HTTP Server(簡稱Apache)是Apache軟件基金會的一個開放源碼的網頁服務器,可以在大多數計算機操作系統中運行,由於其多平臺和安全性被廣泛使用,是最流行的Web服務器端軟件之一。它快速、可靠並且可通過簡單的API擴展,將Perl/Python等解釋器編譯到服務器中。
相關模塊
1.SSO Module - LemonLDAP
LemonLdap 是 Apache 的一個實現了 Web SSO 的模塊,可處理超過 20 萬的用戶。
2.併發限制模塊 - limitipconn
limitipconn 是一個 Apache 的模塊,用來限制每個 IP 的併發連接數。支持 Apache 1.x 和 2.x。
3.日誌監控模塊
Apache Live Log 是一個 Perl 編寫的模塊,可以在瀏覽器上直接實時的通過 Ajax 技術瀏覽和監控 Apache 的 日誌文件。
4.負載均衡模塊
mod_backhand 是一個Apache 的負載平衡模塊 。它定義了每個請求的HTTP重定向在一個異構的Apache服務器群集。每個請求的處理,並貫穿了一套“候選人的職能” ,以確定哪些服務器是最適合的回應。請求然後代理到該服務器。設施已到位,讓你寫您自己的動態加載決策算法。一切有關的要求和當前可用的資源可用於決策過 程。
5.圖像處理模塊
mod_gfx 是一個對圖像進行即時處理的 Apache 模塊,提供很多靈活的接口,包括:
Resizing
Resampling
Watermarking
Cropping
以後還將添加如下功能:
Add Text
Rotate
Draw Polygons
6. 壓縮模塊
mod-gzip-disk 是一個使用磁盤進行存儲預壓縮頁面的 Apache 模塊,與 mod-gzip 不同的是不需要每次請求的時候重新壓縮。
使用方法:
gunzip -c mod_gzip_disk-0.5.tar.gz | tar -xvpf -
cd mod_gzip_disk
sudo make module
7. 音樂模塊
mod_musicindex 是一個 Apache 用來處理音頻文件的模塊,類似 Perl 的 Apache::MP3,支持音頻格式包括:MP3, Ogg Vorbis, FLAC, or MP4 / AAC ,可根據不同的音頻屬性進行排序列表、在線播放、下載、構建播放列表和搜索等,提供 RSS 和 Podcast 輸出,支持多 CSS 和包下載。
8.LDAP 認證模塊
LDAP 是輕量級目錄訪問協議,基於 X.500 標準,但更簡單,並可根據需要進行定製。mod_psldap 是 Apache 用來執行 LDAP 認證和授權的模塊。同時可通過 Web 界面進行簡單的 LDAP 管理
9.帶寬限制模塊
mod_cband 是一個用來限制請求佔用帶寬的 Apache 模塊。
10.CGI V8 引擎包
v8cgi 是一個很小的 C ++ 和 JS 文件集合,允許開發者在服務器端使用 JS 的模塊,基本功能包括:IO, GD, MySQL, Sockets, templates, FastCGI and Apache module.
安裝HTTPD服務
1.在終端輸入更新檢查命令,sudo apt-get update
2. 在更新完成後(如果不想檢查更新,也可直接輸入此步)輸入:sudo apt-get install apache2
3.完成後,在瀏覽器輸入https://localhost 或者127.0.0.1,如果順利跳出Apache版本網頁,即代表安裝成功
4.停止服務:sudo /etc/init.d/apache2 stop
配置httpd服務
查看版本
[root@conling 桌面]# httpd -vServer version: Apache/2.2.15 (Unix)Server built: Aug 2 2013 08:02:15123
httpd的常用的功能特性:
支持路徑別名:alias
支持用戶認證:基本認證和摘要認證authentication
支持虛擬主機:virtual host 在一個物理主機上提供多個站點
支持負載均衡:是反向代理的一個子特性
支持用戶站點:當前用戶都可以在自己的家目錄下創建自己的站點
支持CGI:Common Gateway Interface 通用網關接口
目錄結構
服務腳本:/etc/rc.d/init.d/httpd
腳本配置文件路徑:/etc/sysconfig/httpd
運行目錄:/etc/httpd
配置文件:
主配置:/etc/httpd/conf/httpd.conf
擴展配置:/etc/httpd/conf.d/*.conf
監聽的Socket: tcp的80, 443是https/tcp的監聽端口
在內核中使用小於1023的端口的只有管理員
文檔根目錄:/var/www/html
CGI目錄:/var/www/cgi-bin/12345678910
主配置文件結構
全局配置:對主服務器或虛擬主機都有效,且有些功能是服務器自身工作屬性;
主服務器配置:主站屬性
虛擬服務器:虛擬主機及屬性定義
測試配置和查看的命令
service httpd configtest #測試配置文件有沒有語法錯誤httpd -t #同上httpd -l #當前服務器所使用的模型及開啟模塊httpd -D DUMP_MODULES #當前服務器支持的模塊service httpd reload #重新加載配置文件service httpd restart #重啟httpd服務1234567891011
注意:修改配置文件後要重新加載配置文件,修改服務器監聽端口後要重啟服務
主配置文件的基本配置
配置httpd的工作屬性時,指令不區分大小寫,但有約定俗成的習慣:
單詞的首字母大寫;指令的值很有可能區分大小寫;有些指令可以重複使用多次;
Listen [IP:]PORT //配置監聽的端口,IP為可選項,不寫則監聽所有接口的端口。
例如:Listen 172.16.3.1:80 ,多個站點時需要監聽多個接口。12
指定網站的主目錄
DocumentRoot "/var/www/html" 1
Options //配置頁面文件的訪問屬性Indexes #是否允許索引頁面文件,建議關閉FollowSymLinks #是否跟隨軟連接文件SymLinksifOwnerMatch #跟隨符號鏈接,只允許訪問運行apache的用戶有屬主權限的文件ExecCGI: #是否允許執行CGI腳本;12345
基於客戶端的訪問控制
系統默認允許所有人訪問Order #定義allow和deny那個為默認法則;寫在後面的為默認法則:寫在前面的指令沒有顯示定義的即受後面的指令控制:Order allow,deny
Allow from all #所有人可以訪問例:配置允許172.16.0.0/16訪問,但不允許172.16.3.1訪問Order allow,deny
Deny from 172.16.3.1 #禁用一個IP訪問Allow from 172.16.0.0/16 #允許一個網段訪問123456789
userdir個人站點
# UserDir is disabled by default since it can confirm the presence# of a username on the system (depending on home directory# permissions).##UserDir disabled #註釋此項## To enable requests to /~user/ to serve the user's public_html# directory, remove the "UserDir disabled" line above, and uncomment# the following line instead:#UserDir public_html #開啟此項//在相應的用戶家目錄中創建文件public_html 即可實現訪問。重新加載配置文件後用:http://HOST/~username/例如:http://172.16.3.1/~centos/1234567891011121314
定義默認主頁
DirectoryIndex index.PHP index.jsp index.html1
日誌功能
日誌有兩類:訪問日誌(格式自定義)、錯誤日誌
錯誤日誌:
ErrorLog "/path/to/error_log_file"訪問日誌:
CustomLog "/path/to/custom_log_file" logformat
日誌格式:{combined|common|agent}
LogFormat "%h %l %u %t \\"%r\\" %>s %b \\"%{Referer}i\\" \\"%{User-Agent}i\\"" combined
LogFormat "%h %l %u %t \\"%r\\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent1234567891011121314151617
%h #主機名
%l #
%u #用戶名
%t #請求到達的時間
%r #請求報文的起始行,方法
%s #
%b #響應報文的大小
%{Foobar}i #顯示從發那個站點跳轉過來
%{User-Agent}i #用戶代理
基於用戶訪問控制
當你的網站或者站點的某個路徑只想讓你授權的用戶訪問時,就可以使用基於用戶的訪問控制
這裡使用htpasswd命令建立用戶帳號文件
htpasswd
-c #第一次使用-c創建新文件,不是第一次不要使用此選項-m #用戶密碼使用MD5加密後存放-s #用戶密碼使用SHA加密後存放-p #用戶密碼不加密-d #禁用一個賬戶-e #啟用一個賬戶12345678910111213
例如:
# htpasswd -c -m /etc/httpd/conf/.htpass tom
命令 選項 生成的用戶文件路徑及文件名 用戶名
# htpasswd -m /etc/httpd/conf/.htpass jerry
# 再次添加用戶時就不要使用-c選項了,否則會覆蓋之前內容先生成
(1)建立用戶帳號文件
\\# htpasswd -c -m /etc/httpd/conf/.htpass tom(2)修改主配置文件(直接在主站添加用戶認證功能)
\\# vi /etc/httpd/conf/httpd.conDocumentRoot "/www/html" #此時網站根目錄就是/www/htmlOptins Indexes
AllowOverride AuthConfig
AuthName "Oaly for employees." #登錄提示信息,可自定義AuthType Basic #認證方式AuthUserFile /etc/httpd/conf/.htpass #用戶帳號文件Require valid-user #允許的用戶Require 指定可以訪問的用戶,可以指定單個用戶,直接寫用戶名就可以了,用戶名可以寫多個用空格分開,也可以指定所有用戶就用 valid-user1234567891011121314151617181920212223
對某個目錄進行用戶訪問控制
虛擬主機
第一種方式,在主配置文件的末尾,有虛擬主機的模板
<virtualhost>
DocumentRoot /var/www/blog
DirectoryIndex index.html
/<virtualhost>
Listen 8080//添加以上內容 意為啟用監聽8080端口,且該端口的網站目錄為/var/www/blog,默認文檔為index.html.//該方式為通過指定端口的形式來訪問不同的站點。12345678
第二種方式,在同一臺服務器上創建不同的主機名的虛擬主機。
(1)註釋主服務器,添加虛擬主機# DocumentRoot "/www/html" #註釋主服務器NameVirtualHost 172.16.3.1:80 #開啟虛擬主機DocumentRoot /www/web1 #虛擬主機的網站根目錄ServerName web1.lyd.com #主機名DocumentRoot /www/web2
ServerName web2.lyd.com(2)給虛擬主機提供測試文件
mkdir /www/web{1,2}
echo web1.lyd.com > /www/web1/index.htmlecho web2.lyd.com > /www/web2/index.html(3)配置完後用 httpd -t 測試配置文件有沒有錯誤
(4)重啟服務 service httpd restart
(5)驗證,修改驗證客戶端的hosts文件,
windows客戶端
開始-->運行-->輸入"c:\\windows\\system32\\drivers\\etc\\hosts"用記事本打開並添加以下行172.16.3.1web1.lyd.com172.16.3.1web2.lyd.com12345678910111213141516171819
配置防火牆
#修改防火牆配置:
# vi + /etc/sysconfig/iptables
#添加配置項
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT #重啟防火牆
# service iptables restart123456
檢查端口狀態
netstat -tln //查看相應的端口是否已開啟
配置負載均衡
項目準備
負載均衡就是把所有用戶的訪問壓力分散到多臺服務器上,也可以分散到多個tomcat裡。
現在只是做的一個測試例子,所以apache,tomcat都是裝在我的電腦上,我的IP是172.16.X.X
首先要創建一個web項目,在項目的web.xml中需要加上以下配置,表明該應用可多應用分流處理,能進行Session的複製。
<display-name>TomcatClusterDemo/<display-name>
<distributable> 123
把項目放到到tomcat1、tomcat2的webapps目錄下。
我的目標是要用兩個tomcat(tomcat1,tomcat2)來進行分流,這兩個Tomcat的端口、AJP等配置要不一樣。
tomcat1的server.xml:
<server>12/<server>
<connector> connectionTimeout="20000"
redirectPort="8443" />123/<connector>
<connector> 1
<engine> 1/<engine>
tomcat2的server.xml
<server>12/<server>
<connector> connectionTimeout="20000"
redirectPort="8443" />123/<connector>
<connector>1
<engine>1/<engine>
修改httpd.conf
在Apache安裝目錄下找到Apache24/conf/下的 httpd.conf,去掉以下文本前的註釋符(#)以便讓Apache在啟動時自動加載代理(proxy)模塊。
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
去掉 Include conf/extra/httpd-vhosts.conf前面的註釋#,
在httpd.conf文檔最下面加上以下代碼:
ProxyRequests Off
<proxy>
BalancerMember ajp://172.16.X.X:20001/ loadfactor=1 route=jvm1
BalancerMember ajp://172.16.X.X:20002/ loadfactor=1 route=jvm2
/<proxy> 12345
這裡的配置是跟tomcat的server.xml配置對應的。172.16.X.X是tomcat服務器的IP,端口號對應tomcat中server.xml裡的ajp的端口號,route對應jvmRoute的配置。
3.用文本編輯器打開conf/extra/httpd-vhosts.conf,配置虛擬站點,在最下面加上以下代碼:
<virtualhost> ServerName 172.16.X.XServerAlias localhostProxyPass / balancer://mycluster/ stickysession=jsessionid nofailover=OnProxyPassReverse / balancer://mycluster/ErrorLog "logs/lbtest-error.log"CustomLog "logs/lbtest-access.log" common/<virtualhost> 12345678
到這裡配置就基本上完成了。
然後寫個測試頁面test.jsp放到兩個tomcat的項目裡測試:
%><title>Cluster App Test/<title>Server Info:out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"
");%>out.println("
ID " + session.getId()+"
");
// 如果有新的 Session 屬性設置
System.out.println( "=========test==========");
%>123456789101112131415161718192021222324
重啟apache,tomcat1,tomcat2,
在瀏覽器輸入http://172.16.X.X/test.jsp ,然後多刷新幾次。
閱讀更多 青峰科技 的文章