apache_技術研究報告

Apache_技術研究報告php

1.   Apache 啓動

1.1 編譯安裝

1.   下載apr-1.5.0.tar.gzapr-util-1.5.3.tar.gzhttpd-2.4.7.tar.gzhtml

2.   解壓apr-1.5.0.tar.gz包,進入apr-1.5.0文件夾,執行前端

./configure  --prefix=/usr/local/aprjava

makenode

make installlinux

3.   解壓apr-util-1.5.3.tar.gz包,進入apr-util-1.5.3文件夾,執行web

./configure  --prefix=/usr/local/apr-util  --with-apr=/usr/local/aprapache

makewindows

make install後端

4.   解壓httpd-2.4.7.tar.gz包,進入httpd-2.4.7文件夾,執行

./configure --prefix=/usr/local/apache2/ --with-apr=/usr/local/apr/ --with-apr-util=/usr/local/apr-util/  --with-pcre=/usr/local/pcre

make

make install

1.2 啓動命令

  1. :進入安裝目錄的bin下,輸入:

apachectl  start     #啓動

apachectl  stop     #中止

apachectl  restart   #從新啓動

apachectl  graceful #在不中斷當前鏈接的狀況下重啓apache

  1. 若是apache安裝成爲linux的服務的話,能夠用如下命令操做:

service httpd start     #啓動

service httpd restart   #從新啓動

service httpd stop     #中止服務

1.   Apache 監控

2.1 經過server-status查看監控信息

1)加載mod_status.so

Apache的狀態管理的模塊是LoadModule status_module modules/mod_status.so ,因此須要...apache2\conf'\httpd.conf配置文件中修改。

找到LoadModule status_module modules/mod_status.so ,去掉其前面的# 號(默認是沒有# 號的)

2)下面有修改配置文件有兩種方式:

方式一:在httpd.conf文件底部分添加如下內容:

<location/c-server-status>

         SetHandler server-status

         Order Deny,Allow

         Deny from nothing

         Allow from all

</location>

ExtendedStatus On

方法二:在httpd.conf中找到如下內存,修改http-info.conf

# Real-time info on requests and configuration

#Include conf/extra/httpd-info.conf   //去掉這一行前面的#

打開...apache2\conf\extra\http-info.conf 配置文件進行修改。修改內容與方式一相同。

其實,兩種無方法是相同的,只是第二種方法更爲優雅一點。

修改信息解釋:

<location /c-server-status>  : c-server-status 這個名字能夠任意的取,但最好不要被別人猜到。

Deny from   表示禁止的訪問地址;nothing 表示沒有禁止訪問的地址。

Allow from   表示容許的地址訪問;all 表示全部的地址均可以訪問。

ExtendedStatus On   表示的是待會訪問的時候能看到詳細的請求信息,另外該設置僅能用於全局設置,不能在特定的虛擬主機中打開或關閉。啓用擴展狀態信息將會致使服務器運行效率下降。

3)重啓apache

[root@localhost /]# cd /usr/local/apache/bin/

[root@localhost bin]# apachectl start  啓動

[root@localhost bin]# apachectl stop  中止

4)訪問

http://你的IP地址:端口/c-server-status

http://你的IP地址:端口/c-server-status ?refresh=N

N將表示訪問狀態頁面能夠每N秒自動刷新一次

5)顯示結果:

Apache Server Status for localhost

Server Version: Apache/2.2.19 (Win64)

Server Built: May 28 2011 15:18:56

Current Time: Sunday, 11-Nov-2012 17:44:21 Öйú±ê׼ʱ¼ä

Restart Time: Sunday, 11-Nov-2012 17:36:28 Öйú±ê׼ʱ¼ä

Parent Server Generation: 1

Server uptime: 7 minutes 52 seconds

Total accesses: 0 - Total Traffic: 0 kB

0 requests/sec - 0 B/second -

1 requests currently being processed, 63 idle workers

______________________________________________________________W_

................................................................

 

Scoreboard Key:"_" Waiting for Connection, "S" Starting up, "R" Reading Request,"W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,"C" Closing connection, "L" Logging, "G" Gracefully finishing,"I" Idle cleanup of worker, "." Open slot with no current process

Srv    PID    Acc    M    SS    Req    Conn    Child    Slot    Client    VHost    Request

0-1    4140    0/0/0    W    0    287636364    0.0    0.00    0.00    127.0.0.1    192.168.0.100    GET /c-server-status HTTP/1.1

 

Srv    Child Server number - generation

PID    OS process ID

Acc    Number of accesses this connection / this child / this slot

M    Mode of operation

SS    Seconds since beginning of most recent request

Req    Milliseconds required to process most recent request

Conn    Kilobytes transferred this connection

Child    Megabytes transferred this child

Slot    Total megabytes transferred this slot

參數分析:

參數分析:

字段說明

Server Version       Apache 服務器的版本。

Server Built         Apache 服務器編譯安裝的時間。

Current Time        目前的系統時間。

Restart Time         Apache 從新啓動的時間。

Parent Server Generation        Apache 父程序 (parent process) 的世代編號,就是 httpd 接收到 SIGHUP 而從新啓動的次數。

Server uptime         Apache 啓動後到如今通過的時間。

Total accesses         到目前爲此 Apache 接收的聯機數量及傳輸的數據量。

CPU Usage           目前 CPU 的使用情形。

_SWSS....            全部 Apache process 目前的狀態。每個字符表示一個程序,最多能夠顯示 256 個程序的狀態。

Scoreboard Key         上述狀態的說明。如下爲每個字符符號所表示的意義:

    * _:等待連結中。

    * S:啓動中。

    * R:正在讀取要求。

    * W:正在送出迴應。

    * K:處於保持聯機的狀態。

    * D:正在查找DNS

    * C:正在關閉連結。

    * L:正在寫入記錄文件。

    * G:進入正常結束程序中。

    * I:處理閒置。

    * .:尚無此程序。

Srv        本程序與其父程序的世代編號。

PID        本程序的process id

Acc        分別表示本次聯機、本程序所處理的存取次數。

M         該程序目前的狀態。

CPU        該程序所耗用的CPU資源。

SS         距離上次處理要求的時間。

Req        最後一次處理要求所耗費的時間,以千分之一秒爲單位。

Conn       本次聯機所傳送的數據量。

Child       由該子程序所傳送的數據量。

Slot        由該 Slot 所傳送的數據量。

Client       客戶端的地址。

VHost       屬於哪個虛擬主機或本主機的IP

Request     聯機所提出的要求信息。

2.2linux下經過命令查看監控信息

1、用 ps 來看 httpd 進程數

# ps -ef | grep httpd | wc -l

用這個命令統計當前的httpd進程數,固然這結果包含 grep httpd 的進程輸出,通常來講實際進程數比輸出結果少1Apache啓動的時候,默認就起來幾個進程,若是鏈接數多了,它就會生出更多的進程來處理請求。

2、用 netstat 來看當前的鏈接數

# netstat -ant | grep ":80 " | wc -l

鏈接數目並不等於httpd線程數目,固然鏈接數目越多,httpd進程數就有可能數會增多。上面的返回結果數目,有可能包括多種鏈接狀態,好比 LISTENESTABLISHEDTIME_WAIT等等,能夠加入狀態關鍵字進一步過濾,獲得想要的結果。

2.   Apache 負載均衡

3.1 proxy模式負載均衡策略

3.1.1按請求(byrequests

設置lbmethod = byrequests,可不寫。

  1. 輪詢方式

打開對應的模塊,在httpd.conf文件中添加以下代碼:

ProxyRequests Off

<Proxy balancer://mycluster/> 

    BalancerMember http://192.168.51.50:8080/

    BalancerMember http://192.168.51.106:8080/

</Proxy>

ProxyPass / balancer://mycluster/

  1. 權重方式(以請求數爲權重)

  參數」loadfactor」表示後臺服務器負載到由Apache發送請求的權值,該值默認爲1,能夠將該值設置爲1100之間的任何值。

ProxyRequests Off

<Proxy balancer://mycluster/> 

    BalancerMember http://192.168.51.50:8080/ loadfactor=2

    BalancerMember http://192.168.51.106:8080/ loadfactor=1

</Proxy>

ProxyPass / balancer://mycluster/

 

以上面的配置爲例,介紹如何實現按權重分配的負載均衡,現假設Apache收到http://myserver/aaa 4次這樣的請求,該請求分別被負載到後臺服務器,則有2次連續的這樣請求被負載到BalancerMemberhttp://192.168.51.50:8080的服務器,有1次這樣的請求被負載BalancerMemberhttp://192.168.51.106:8080後臺服務器。實現了按照權重連續分配的均衡策略。

3.1.2 按流量(bytraffic

參數「lbmethod=bytraffic」表示後臺服務器負載請求和響應的字節數,處理字節數的多少是以權值的方式來表示的。 loadfactor」表示後臺服務器處理負載請求和響應字節數的權值,該值默認爲1,能夠將該值設置在1100的任何值。

ProxyRequests Off

ProxyPass /hello  balancer://mycluster/  lbmethod=bytraffic

#ProxyPassReverse /hello balancer://mycluster/

<Proxy balancer://mycluster> 

    BalancerMember http://192.168.51.50:8080 loadfactor=2

    BalancerMember http://192.168.51.106:8080 loadfactor=1

</Proxy>

3.1.2按照繁忙程度均衡(bybusyness

老是分配給活躍請求數最少的服務器

ProxyRequests Off

ProxyPass /hello  balancer://mycluster/  lbmethod= bybusyness

#ProxyPassReverse /hello balancer://mycluster/

<Proxy balancer://mycluster> 

    BalancerMember http://192.168.51.50:8080

    BalancerMember http://192.168.51.106:8080

    ProxySet lbmethod=bybusyness

</Proxy>

3.2 proxy模式熱備份

熱備份的實現很簡單,只需添加 status=+H 屬性,就能夠把某臺服務器指定爲備份服務器,配置文件以下:

Listen 202.x.xx.xxx:80        (別人訪問的IP和端口)

<VirtualHost 202.x.xx.xxx:80>

     ServerAdmin admin@bit.com

     ProxyRequests Off

     Proxypass / balancer://proxy/ 

 ProxySet lbmethod=bytraffic  (加上這句)

<Proxy balancer://proxy>

         Order Deny,Allow

         Allow from all

         BalancerMember http://10.0.0.1  

         BalancerMember http://10.0.0.2   status=+H

</Proxy>

</VirtualHost>

 

從配置中能夠看出請求老是流向http://10.0.0.1,一旦http://10.0.0.1掛掉, Apache會檢測到錯誤並把請求分流給 http://10.0.0.2Apache會每隔幾分鐘檢測一下http://10.0.0.1的情況,若是http://10.0.0.1恢復,就繼續使用http://10.0.0.1,這樣就能夠實現熱備份了

2.3   mod_jk模式負載均衡策略

mod_jkASF的一個項目,是一個工做於apache端基於AJP協議與應用服務器通訊的鏈接器,它是apache的一個模塊,是AJP協議的客戶端(服務端是應用服務器的AJP鏈接器)。

比較經常使用的負載均衡模式爲以下三種:

  1. 按請求(method =Request)

默認狀況是按照請求負載

workers.properties配置以下

worker.list=loadBalancer

worker. server1.port=8009

worker. server1.host=100.100.10.22

worker. server1.type=ajp13

worker. server1.lbfactor=1

。。。。

worker. server2.port=8009

worker. server2.host=100.100.10.23

worker. server2.type=ajp13

worker. server2.lbfactor=1

。。。。

worker.loadBalancer.type=lb

worker.loadBalancer.balance_workers= server1, server2

worker.loadbalancer.method= Request

如上配置中,負載均衡策略是Request,按照請求個數進行負載,lbfactor是權重值,其範圍是1-100

  1. 按流量(method= Traffic)

workers.properties配置以下

worker.list=loadBalancer

worker. server1.port=8009

worker. server1.host=100.100.10.22

worker. server1.type=ajp13

worker. server1.lbfactor=1

。。。。

worker. server2.port=8009

worker. server2.host=100.100.10.23

worker. server2.type=ajp13

worker. server2.lbfactor=1

。。。。

worker.loadBalancer.type=lb

worker.loadBalancer.balance_workers= server1, server2

worker.loadbalancer.method= Traffic

  1. 按繁忙程度均衡(method =Busyness)

配置以下:

worker.list=loadBalancer

worker. server1.port=8009

worker. server1.host=100.100.10.22

worker. server1.type=ajp13

。。。。

worker. server2.port=8009

worker. server2.host=100.100.10.23

worker. server2.type=ajp13

。。。。

worker.loadBalancer.type=lb

worker.loadBalancer.balance_workers= server1, server2

worker.loadbalancer.method= Busyness

 

經過查找apache官網,有5種均衡策略,以下:

1.   Request

2.   Session

3.   Next

4.   Traffic

5.   Busyness

Method參數的具體說明以下:

Specifies what method load balancer is using for electing the best worker. Please note, that session stickiness and perfect load balancing are conflicting targets, especially when the number of sessions is small, or the usage of sessions is extremely varying For huge numbers of sessions this usually is not a problem.

Some methods note, that they aggregate in a sliding time window. They add up accesses, and on each run of the global maintain method, the load counters get divided by 2. Usually this happens once a minute, depending on the setting of worker.maintain. The value of the load counters can be inspected using the status worker.

If method is set to R[equest] the balancer will use the number of requests to find the best worker. Accesses will be distributed according to the lbfactor in a sliding time window. This is the default value and should be working well for most applications.

If method is set to S[ession] the balancer will use the number of sessions to find the best worker. Accesses will be distributed according to the lbfactor in a sliding time window. This method should be used, if sessions are your limiting resource, e.g. when you only have limited memory and your sessions need a lot of memory. Because the balancer does not keep any state, it actually does not know the number of sessions. Instead it counts each request without a session cookie or URL encoding as a new session. This method will neither know, when a session is being invalidated, nor will it correct its load numbers according to session timeouts or worker failover. If you know request URLs, that will be called without a session ID but should not be counted as new sessions, you should add them to the stateless mapping rule extension or set the Apache HTTPD environment variable JK_STATELESS for them.

If method is set to N[ext] the balancer will again use the number of sessions to find the best worker. All remarks concerning the Sessionmethod apply as well. The difference to the Session method is how the session count is handled in the sliding time window. The Next method does not divide by 2, instead it subtracts the current minimum number. This should effectively result in a round-robin session balancing, thus the name Next. Under high load, the two session balancing methods will result in a similar distribution, but Next will be better if you need to distribute small numbers of sessions.

If set to T[raffic] the balancer will use the network traffic between JK and Tomcat to find the best worker. Accesses will be distributed according to the lbfactor in a sliding time window. This method should be used, if network to and from the backends is your limiting resource.

If set to B[usyness] the balancer will pick the worker with the lowest current load, based on how many requests the worker is currently serving. This number is divided by the workers lbfactor, and the lowest value (least busy) worker is picked. This method is especially interesting, if your request take a long time to process, like for a download application.

This feature has been added in version 1.2.9. The Session method has been added in version 1.2.20, the Next method in version 1.2.33.

3.   Apache正向代理和反向代理

4.1 正向代理

. 正向代理配置:

<VirtualHost *:80>

    ServerAdmin prograsliu@gmail.com

    DocumentRoot "D:/www/test"

    ServerName www.test.com

    ServerAlias test.com

    ErrorLog "logs/test.com-error.log"

    CustomLog "logs/test.com-access.log" common   

    Alias /sublook "D:/www/test/look/sublook/"

    <Directory "D:/www/test">

        Options FollowSymLinks

        AllowOverride All

        Order allow,deny

        Allow from all

    </Directory>

    #正向代理設置

    ProxyRequests On

    ProxyVia On

    <Proxy *>

        Order deny,allow

        Deny from all

        Allow from 127.0.0.1

    </Proxy>

</VirtualHost>

    ProxyRequests On:開啓Apache正向代理

    ProxyVia On:控制位於代理服務器鏈中的代理請求的流向

引用Apache2.2官方文檔中對ProxyVia的解釋以下:

1.   若是設置爲默認值Off ,將不會採起特殊的處理。若是一個請求或應答包含"Via:"頭,將不進行任何修改而直接經過。

2.   若是設置爲On每一個請求和應答都會對應當前主機獲得一個"Via:"頭。

3.   若是設置爲Full ,每一個產生的"Via:"頭中都會額外加入Apache服務器的版本,以"Via:"註釋域出現。

4.   若是設置爲Block ,每一個代理請求中的全部"Via:"頭行都將被刪除。且不會產生新的"Via:"頭。

    <Proxy *>...</Proxy>:用來控制誰能夠訪問你的代理

. 瀏覽器設置:(以FireFox爲例)

三.訪問效果:

訪問 www.sina.com,觀察HTTP請求Response

能夠看到,Viawww.test.com,正向代理成功了。

3.2   反向代理

反向代理配置以下:

Listen 202.xxx.xxx.xxx:80     (別人訪問的IP和端口)
<VirtualHost 202.xxx.xxx.xxx:80> (
同上
)
ServerAdmin admin@bit.net
ProxyRequests Off            
(說明開啓的是反向代理)

ProxyMaxForwards 100
ProxyPreserveHost On
ProxyPass / http://10.x.xx.xxx/
(轉發到url上的請求)
ProxyPassReverse / http://10.x.xx.xxx/
 <Proxy *>                (
這段是訪問的控制)
 Order Deny,Allow
 Allow from all
 </Proxy>
</VirtualHost>

而後反向代理就開啓了

當別人輸入http://202.xxx.xxx.xxx時就會經過反向代理轉到http://10.x.xx.xxx上,這樣簡單的反向代理功能就開啓了。

4.    Apache 會話保持

5.1 mod_jk負載均衡模式的會話保持

1.環境:

一臺服務器裝apache,做負載均衡器

地址100.100.11.110

操做系統:windows2003

另外兩臺服務器裝應用服務器V9,做站點1和站點2

地址爲:100.100.10.22 100.100.10.23

操做系統:window2003

2.安裝軟件:

apache_2.2.4

應用服務器V9

mod_jk-apache-2.2.4.so

jdk-1_5_0_06

3.配置:

3.1 apache服務器:

100.100.11.110上安裝jdk,配置環境變量,執行java -version查看是否正常

100.100.11.110上安裝apache

mod_jk-apache-2.2.4.so拷貝到/modules

編輯httpd.conf,在最後添加:Include conf/mod_jk.conf

conf目錄下新建一個mod_jk.conf文件,內容以下:

# Load mod_jk module

LoadModule jk_module modules/mod_jk-apache-2.2.4.so

# Where to find workers.properties

JkWorkersFile conf/workers.properties

# Where to put jk logs

JkLogFile logs/mod_jk.log

# Set the jk log level [debug/error/info]

JkLogLevel info

# Select the log format

JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "

# JkOptions indicate to send SSL KEY SIZE,

JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories

# JkRequestLogFormat set the request format

JkRequestLogFormat "%w %V %T"

# Send JSPs for context / to worker named loadBalancer

JkMount /*.jsp loadBalancer

 

conf目錄裏新建一個名稱爲workers.properties的文件,內容以下:

worker.list=loadBalancer

worker.server1.port=8009

worker.server1.host=100.100.10.22

worker. server1.type=ajp13

worker. server1.lbfactor=1

#worker. server1.cachesize=60

#worker. server1.cache_timeout=300

worker. server1.socket_keepalive=1

worker. server1.socket_timeout=180

worker. server1.connect_timeout=0

worker. server1.reply_timeout=0

worker. server1.recovery_options=1

worker. server1.retries=1

worker. server2.port=8009

worker. server2.host=100.100.10.23

worker. server2.type=ajp13

worker. server2.lbfactor=1

#worker. server2.cachesize=60

#worker. server2.cache_timeout=300

worker. server2.socket_keepalive=1

worker. server2.socket_timeout=180

worker. server2.connect_timeout=0

worker. server2.reply_timeout=0

worker. server2.recovery_options=1

worker. server2.retries=1

worker.loadBalancer.type=lb

worker.loadBalancer.balance_workers=server1, server2

#worker.loadbalancer.method=Session

worker.loadBalancer.sticky_session=true

#worker.loadBalancer.sticky_session_force=false

worker.list=loadbalancer:設定工做的負載平衡器。

worker.<work_name>.lbfactor:負載平衡的權重比,若是此權重比越大,則分配到此節點的請求越多,如以上兩個節點的權重比爲1:1,則爲平均分配。

worker.loadbalancer.balanced_workers= server1, server2:指定此負載平衡器負責的2個節點。

worker.loadbalancer.sticky_session =true:若是設爲true1,則代表爲會話粘性,不進行會話複製,當某用戶的請求第一次分發到哪臺server後,後繼的請求會一直分發到此server服務器上處理;若是後端的各server之間支持session複製,則能夠將此屬性值設爲false0。默認值爲true

worker.loadbalancer.sticky_session_force:假設sticky_session設爲true,用戶會話具備了粘性,噹噹前server服務器中止服務後,若是sticky_session_forcetrue也就是強制會話與當前server關聯,那麼會報500錯誤;若是設爲false則當前server出現故障時,請求會轉移到其餘的server上,此時會session丟失。

 

3.2 配置應用服務器V9:

須要注意的是,worker.propeties配置文件中hostporthost就是應用服務器所在主機的ip,端口就是應用服務器打開jk支持的Network Listener所監聽的端口。應用服務器如何打開jk支持下文會講述。

若是須要將某個域名的動態請求轉發給jk,那麼就在httpd.conf里加上:

NameVirtualHost *:80

<VirtualHost *:80>

ServerName  www.test.com

JkMount /* loadBalancer

</VirtualHost>

這樣,www.test.com的請求都會轉發到jk上,而且由jk轉發到應用服務器節點上了(就是workers.properties配置的hostport上)。

下面配置應用服務器V9

經過瀏覽器進入應用服務器的管理工具界面,展開 配置管理->網絡配置->網絡監聽,頁面會列出現有的全部監聽的端口。例如默認的http-listener1監聽8080http-listener2監聽8181admin-listener監聽4848

點擊listener1,進入listener1 的設置,勾選JK 監聽複選框。

這樣,應用服務器的8080端口就會處理jk發送過來的請求了。

應用服務器的jvm參數配置以下:

asadmin create-jvm-options --target cluster1 "-DjvmRoute=\${AJP_INSTANCE_NAME}"

asadmin create-jvm-options --target cluster1

"-Dcom.sun.enterprise.web.connector.enableJK=\${AJP_PORT}"

asadmin create-system-properties --target server1 AJP_INSTANCE_NAME=server1 

asadmin create-system-properties --target server1 AJP_PORT=8019

asadmin create-system-properties --target server2 AJP_INSTANCE_NAME=server2 

asadmin create-system-properties --target server2 AJP_PORT=8029

5.2 proxy模式的會話保持

基於用戶的負載均衡: 該種方式下,當用戶發出第一個request後,負載均衡器動態的把該用戶分配到某個節點,並記錄該節點的jvm路由,之後該用戶的全部request都會被綁定這個jvm路由,用戶只會與該server發生交互,這種策略被稱爲粘性session(session sticky)

優勢是響應速度快,多個節點之間無須通訊。缺點也很明顯,某個node死掉之後,它負責的全部用戶都會丟失session

首先在apache conf目錄下找到httpd.conf(apache 的配置文件)文件

在該文件裏找到

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

而且把上面的#號去掉

而後找到

Include conf/extra/httpd-vhosts.conf

把上面的#號去掉

在最後一行加上

ProxyRequests Off

<proxy balancer://cluster>

BalancerMember http://192.168.10.11:8080 loadfactor=1 route=server1(與該應用服務器裏的jvmRote名字同樣)

BalancerMember http://192.168.10.12:8080 loadfactor=1 route=server2

</proxy>

第二步找到\conf\extra包下面的httpd-vhosts.conf

在下面加上

<VirtualHost *:80>

ServerAdmin yancheng100088@163.com

ServerName localhost

ServerAlias   localhost

ProxyPass / balancer://cluster/ stickysession=jsessionid nofailover=On

ProxyPassReverse / balancer://cluster/

ErrorLog "logs/dummy-host2.163.com-error.log"

    CustomLog "logs/dummy-host2.163.com-access.log" common

</VirtualHost>

 

 

第三步對應用服務器參數的配置

loong服務器上增長jvmRoute參數以下:

1.  asadmin create-jvm-options --target cluster1 "-DjvmRoute=\${INSTANCE_NAME}"

2. asadmin create-system-properties --target instance1 INSTANCE_NAME=server1

3. asadmin create-system-properties --target instance2 INSTANCE_NAME=server2

5.   用戶受權和訪問控制

訪問控制權限步驟以下:

1、首先對httpd.conf文件進行設置以下:

<Directory /home/httpd/html>

# AllowOverride FileInfo AuthConfig Limit

# Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec

Options Includes FollowSymLinks Indexes

AllowOverride All //*注意AllowOverride 必定要設置爲All,這樣後面的.htaccess文件纔會起

#做用容許存在於.htaccess文件中的指令類型(.htaccess文件名是能夠改變的,其文件名由#AccessFileName指令決定) 
#None:
AllowOverride被設置爲None時。不搜索該目錄下的.htaccess文件(能夠減少服務器開銷)。
 
#All:
.htaccess文件中可使用全部的指令

<Limit GET POST OPTIONS PROPFIND>

Order allow,deny

Allow from all

</Limit>

# <Limit PUT DELETE PATCH PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>

# Order deny,allow

# Deny from all

# </Limit>

</Directory>

#Order:控制在訪問時AllowDeny兩個訪問規則哪一個優先: 
#Allow
:容許訪問的主機列表(可用域名或子網,例如:Allow from 192.168.0.0/16)
 
#Deny
:拒絕訪問的主機列表。

#指定配置存取控制權限的文件名稱

AccessFileName .htaccess

2、建立.htaccess文件內容

要控制某目錄的訪問權限必須創建一訪問控制文件,文件名前面指定的「.htaccess」,其內容格式以下:

AuthUserFile    用戶賬號密碼文件名

AuthGroupFile   羣組賬號密碼文件名

AuthName       畫面提示文字

AuthType       驗證方式

<Limit GET>

密碼驗證方式

</Limit>

用戶驗證方式AuthType目前提供了BasicDigest兩種。 密碼檢驗設定方法與httpd.conf中的相關設定相同。 具體例子以下:

AuthUserFile /etc/secure.user

AuthName 安全認證中心

AuthType Basic

<Limit GET>

require valid-user

</Limit>

3       創建用戶密碼文件

若是你是第一次建立用戶密碼,命令格式以下:

htpasswd -c 密碼文件名 用戶名稱

在上面的例子中,咱們將用戶密碼文件放到了/etc/secure.user文件中,因此這裏應按照以下進行操做:

htpasswd -c /etc/secure.user sword

程序會提示你輸入兩次用戶的口令,而後用戶密碼文件就已經建立sword這個用戶也添加完畢了。

若是要向密碼文件中添加新的用戶,按照以下命令格式進行操做:

htpasswd 密碼文件 用戶名稱

這樣,從新啓動httpd後,進行該WEB目錄時就會有一個對話框彈出,要求輸入用戶名及用戶口令了。

4       如何減小訪問控制對Apache性能的影響

頻繁的使用訪問控制會對Apache的性能產生較大的影響,那麼,如何才能減小這種影響呢?最簡單也是最有效的方法之一就是減小.htaccess文件的數目,這樣能夠避免Apache對每個請求都要按照.htaccess文件的內容進行受權檢查。它不只在當前的目錄中查找.htaccess文件,它還會在當前目錄的父目錄中查找。

/

/usr

/usr/local

/usr/local/etc

/usr/local/etc/httpd

/usr/local/etc/httpd/htdocs

/usr/local/etc/httpd/htdocs/docs

一般在根目錄下沒有htaccess文件,但Apache仍然會進行例行檢查以肯定該文件確實不存在。這是影響很影響服務器工做效率的事情。下面的方法能夠消除這個討厭的過程:將AllowOverride選設置爲None,這樣Apache就會檢查.htaccess文件了。將/根目錄的 AllowOverride選項設爲None,只將須要進行訪問控制的目錄下的AllowOverride選項設置爲all,以下面的例子中將/根目錄的 AllowOverride 選項關閉了,只打開了/usr/local/etc/httpd/htdocs目錄下的AllowOerride選項,這樣,系統就只在 /usr/local/etc/httpd/htdocs中檢查.htaccess文件,達到的提升服務效率的目的。

<Directory />

AllowOverride None

</Directory>

<Directory /usr/local/etc/httpd/htdocs>

AllowOverride All

</Directory>

若是除了根目錄之外,還有其它存放WWW文件的目錄,你也能夠採起一樣的方法進行設置。好比:若是你使用UserDir來容許用戶訪問本身的目錄,AllowOverride的設置以下:

<Directory /home/*/public_html>

AllowOverride FileInfo Indexes IncludesNOEXEC

</Directory>

5、防止用戶訪問指定的文件

系統中有一些文件是不適宜提供給WWW用戶的,如:.htaccesshtpasswd*.pl等,能夠用達到這個目的:

<Files .htaccess>

order allow,deny

deny from all

</Files>

用戶訪問控制三個.htaccess文件、.htpasswd.htgroup(用於用戶受權) ,爲了安全起見,應該防止用戶瀏覽其中內容,能夠在httpd.conf中加入如下內容阻止用戶對其進行訪問:

<Files ~」/.ht」>

Order deny, allow

Deny from all

</Files>

這樣這三個文件就不會被用戶訪問了。

6、限制某些用戶訪問特定文件

能夠對目錄進行約束,要限制某些用戶對某個特定文件的訪問可使用,好比:不容許非domain.com域內的用戶對/prices/internal.html進行訪問,能夠用以下的設置:

<Location /prices/internal.html>

order deny,allow

deny from all

allow from .domain.com

</Location>

若是你要授於相應權限的機器沒有公開的域名,請在你的/etc/hosts文件中,將其IP地址映射到某個指定的名稱,而後在Location中對其進行設置,不然該選項是不起做用的。

7、只接受來自特定連接的訪問

例如,只讓全部來自 http://www.cvicse.com.cn/* 的連接的用戶進入此目錄,由其它連接來的訪客都不得進入; " * "表示此網站底下全部的連接。其中的 http://www.cvicse.com.cn/* 也能夠是:http://192.168.2.23/* 或是指定文件 http://www.cvicse.com.cn/news.html

.htaccess文件的內容以下:

AuthUserFile /dev/null

AuthGroupFile /dev/null

AuthName ExampleAllowFromSpecificURL

AuthType Basic

<Limit GET>

order deny,allow

deny from all

referer allow from http://www.cvicse.com.cn/*

</Limit>

6.   性能優化

#服務端口,缺省是8080,建議將整個Apache配置調整好後再將服務端口改到正式服務的端口
Port 8080 => 80
#服務器名:缺省沒有
ServerName name.example.com
#
最大服務進程數:根據服務容量預測設置
MaxClients 256 => 800
#
缺省啓動服務後的服務進程數:等服務比較平穩後,按平均負載下的httpd個數設置就能夠
StartServers 5 => 200
#
不要修改:
MinSpareServers 5 => 100
MaxSpareServers 10 => 200
#
特別修改:
#solaris或一些比較容易出現內存泄露的應用上:
MaxRequestsPerChild 0 =>3000

工做機制優化:

apache主要的優點就是對多處理器的支持更好,在編譯時經過使用--with-mpm選項來決定apache的工做模式。若是知道當前的apache使用什麼工做機制,能夠經過httpd -l命令列出apache的全部模塊,就能夠知道其工做方式: 
prefork
:若是httpd -l列出prefork.c,則須要對下面的段進行配置:

<IfModule prefork.c> 

StartServers 5 #啓動apache時啓動的httpd進程個數。 

MinSpareServers 5 #服務器保持的最小空閒進程數。

MaxSpareServers 10 #服務器保持的最大空閒進程數。 

MaxClients 150 #最大併發鏈接數。

MaxRequestsPerChild 1000 #每一個子進程被請求服務多少次後被kill掉。0表示不限制,推薦設置爲1000 

</IfModule> 

在該工做模式下,服務器啓動後起動5httpd進程(加父進程共6個,經過ps -ax|grep httpd命令能夠看到)。當有用戶鏈接時,apache會使用一個空閒進程爲該鏈接服務,同時父進程會fork一個子進程。直到內存中的空閒進程達到MaxSpareServers。該模式是爲了兼容一些舊版本的程序。我缺省編譯時的選項。

 

worker:若是httpd -l列出worker.c,則須要對下面的段進行配置: 

<IfModule worker.c> 

StartServers 2 #啓動apache時啓動的httpd進程個數。 

MaxClients 150 #最大併發鏈接數。 

MinSpareThreads 25 #服務器保持的最小空閒線程數。 

MaxSpareThreads 75 #服務器保持的最大空閒線程數。 

ThreadsPerChild 25 #每一個子進程的產生的線程數。 

MaxRequestsPerChild 0 #每一個子進程被請求服務多少次後被kill掉。0表示不限制,推薦設置爲1000 

</IfModule> 

該模式是由線程來監聽客戶的鏈接。當有新客戶鏈接時,由其中的一個空閒線程接受鏈接。服務器在啓動時啓動兩個進程,每一個進程產生的線程數是固定的(ThreadsPerChild決定),所以啓動時有50個線程。當50個線程不夠用時,服務器自動fork一個進程,再產生25個線程。 

perchild:若是httpd -l列出perchild.c,則須要對下面的段進行配置:

<IfModule perchild.c> 

NumServers 5 #服務器啓動時啓動的子進程數 

StartThreads 5 #每一個子進程啓動時啓動的線程數 

MinSpareThreads 5 #內存中的最小空閒線程數 

MaxSpareThreads 10 #最大空閒線程數 

MaxThreadsPerChild 2000 #每一個線程最多被請求多少次後退出。0不受限制。 

MaxRequestsPerChild 10000 #每一個子進程服務多少次後被從新fork0表示不受限制。 

</IfModule> 

該模式下,子進程的數量是固定的,線程數不受限制。當客戶端鏈接到服務器時,又空閒的線程提供服務。 若是空閒線程數不夠,子進程自動產生線程來爲新的鏈接服務。該模式用於多站點服務器。

 

應用模塊和工具的安裝配置優化:

因爲使用模塊動態加載的模式,因此能夠方便的經過簡單的配置調整來把Apache定製成你須要的:最好把不經常使用模塊所有清除(不管處於安全仍是效率)。
好比:對於靜態頁面服務器:就什麼其餘子模塊都不加載,對於PHP應用就加上PHP模塊,對於JAVA應用就把Resin模塊加載上。並且各類模塊的插拔很是簡單,這樣調試過程當中就能夠簡單的經過註釋掉不須要的模塊,而不用從新編譯。
通常說來,能夠不須要的模塊包括:
#LoadModule env_module libexec/mod_env.so
#LoadModule negotiation_module libexec/mod_negotiation.so
#LoadModule status_module libexec/mod_status.so
#server side include
已通過時了
#LoadModule includes_module libexec/mod_include.so
#
不須要將沒有缺省index文件的目錄下全部文件列出
#LoadModule autoindex_module libexec/mod_autoindex.so
#
儘可能不使用CGI:一直是Apache安全問題最多的地方
#LoadModule cgi_module libexec/mod_cgi.so
#LoadModule asis_module libexec/mod_asis.so
#LoadModule imap_module libexec/mod_imap.so
#LoadModule action_module libexec/mod_actions.so
#
不使用安全認證能夠大大提升訪問速度
#LoadModule access_module libexec/mod_access.so
#LoadModule auth_module libexec/mod_auth.so
#LoadModule setenvif_module libexec/mod_setenvif.so
最好保留的有:
#用於定製log格式
LoadModule config_log_module libexec/mod_log_config.so
#
用於增長文件應用的關聯
LoadModule mime_module libexec/mod_mime.so
#
用於缺省index文件:index.php
LoadModule dir_module libexec/mod_dir.so
可用可不用的有:
#好比:須要在~/username/下調試php能夠將
LoadModule userdir_module libexec/mod_userdir.so
#
好比:須要將之前的URL進行轉向或者須要使用CGI script-alias
LoadModule alias_module libexec/mod_alias.so
經常使用的模塊:

    最經常使用的可能就是phpJAVA應用服務器的前端,此外,從性能上講利用mod_gzip能夠減小40%左右的流量,減小機器用於傳輸的負載,而 mod_expires能夠減小10%左右的重複請求,讓重複的用戶對指定的頁面請求結果都CACHE在本地,根本不向服務器發出請求。

建議將全部MODULE的配置都放到相應模塊的配置內部:some_module config

7.   Apache多應用配置

httpd.conf文件中作以下配置:

ProxyRequests Off

ProxyPass /helloworld  balancer://mycluster/helloWorld

ProxyPass /jspDS  balancer://myserver/jspDS

#ProxyPassReverse /hello balancer://mycluster/

<Proxy balancer://mycluster> 

    BalancerMember http://192.168.51.50:8080 loadfactor=1

    #ProxySet lbmethod=bybusyness

</Proxy>

<Proxy balancer://myserver> 

    BalancerMember http://192.168.51.106:8080 loadfactor=1

    #ProxySet lbmethod=bybusyness

</Proxy>

8.   mod_proxy VS  mod_jk

何時使用哪個呢?這依賴於你的架構。若是你已經有了或者須要apache 2.2的功能,那麼你能夠再mod_proxymod_jk直接選擇。mod_jkapache2.2上容許得很好。關鍵看你須要什麼樣的功能:

mod_proxy

優點:

不須要編譯和維護一個對立的模塊。mod_proxy,mod_proxy_http,mod_proxy_ajp,mod_proxy_balancer已是apache 2.2+的標準集成部分;

可使用httphttpsAJP協議,即使是在同一個balancer中。

劣勢:

mod_proxy_ajp不支持大於8k的數據包;

只有最基本的負載均衡器;

不支持域模型集羣(domain model clustering

mod_jk

優點:

先進的負載均衡器;

先進的節點失敗偵察功能;

支持大型AJP 數據包

劣勢:

須要單獨維護一個獨立的模塊

相關文章
相關標籤/搜索