04.18 Apache web服務軟件安裝啟動、負載均衡、反向代理配置

Apache服務簡介

HTTP Server(簡稱Apache)是Apache軟件基金會的一個開放源碼的網頁服務器,可以在大多數計算機操作系統中運行,由於其多平臺和安全性被廣泛使用,是最流行的Web服務器端軟件之一。它快速、可靠並且可通過簡單的API擴展,將Perl/Python等解釋器編譯到服務器中。

Apache web服務軟件安裝啟動、負載均衡、反向代理配置

相關模塊

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

對某個目錄進行用戶訪問控制

Apache web服務軟件安裝啟動、負載均衡、反向代理配置

虛擬主機

第一種方式,在主配置文件的末尾,有虛擬主機的模板

<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 //查看相應的端口是否已開啟

配置負載均衡

  1. 項目準備

    負載均衡就是把所有用戶的訪問壓力分散到多臺服務器上,也可以分散到多個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>
  1. 修改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 ,然後多刷新幾次。

Apache web服務軟件安裝啟動、負載均衡、反向代理配置

Apache web服務軟件安裝啟動、負載均衡、反向代理配置


分享到:


相關文章: