Ubuntu下Nginx做負載實現高性能WEB服務器2—日誌優化

接上篇文章,網站架構採用nginx 1+2架構,後端2臺apache2web 服務器。

1.環境

前端nginx:外網 192.168.80.8 內網 192.168.1.8 ubuntu10.10 X86 +nginx 1.0.14

後端web1 : 內網 192.168.1.9  ubuntu10.10 X86+apache 2.2.16+mysql 5.1.61+PHP 5.3.3

後端web2:內網 192.168.1.10 ubuntu10.10 X86+apache 2.2.16+mysql 5.1.61+PHP 5.3.3

Notice: 需要在web1和web2上做同樣的設置,或者做好同步工作。

2.首先看前端nginx設置 /etc/nginx/conf.d/default.conf

upstream loadbalance {
server 192.168.1.9 weight=10 max_fails=3 fail_timeout=30s; # Reverse proxy to Web server 1
server 192.168.1.10 weight=10 max_fails=3 fail_timeout=30s; # Reverse proxy to Web server 2
server 192.168.1.11 backup;
server 192.168.1.12 down;
#ip_hash;
}
server
{
listen 192.168.80.8:80; # Listen on the external interface

server_name 192.168.80.8; # The server name , also can www.xxx.com

location / {
proxy_pass
http://loadbalance; # Load balance the URL location "/" to the upstream loadbalance

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # Get the real client ip address
}

log_format 192.168.80.8 '$remote_addr - $remote_user [$time_local] $request '
'"$status" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log 192.168.80.8; # access log format

location /nginx_status { # nginx status monitor
stub_status on;
access_log off;

allow 10.10.10.3;
deny all;} # only allow 10.10.10.3 access
}

其中有下面幾句代碼,其中"proxy_set_header"指令便是向用來向後端apache2發送真實IP的。

proxy_set_header Host $host;  # 向後端服務器發起請求時添加指定的header頭信息

proxy_set_header X-Real-IP $remote_addr; # 向後端服務器發送真實 IP

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 讓後端能直接通過變量獲取真實IP

如果沒有這幾句,查看apache訪問日誌會看到全是127.0.0.1的訪問記錄

root@ubuntu2:~# less /var/log/apache2/access.log

image

 

但是,即使添加了這幾句之後,再次查看apache訪問日誌會看到全是nginx內網地址訪問記錄。

root@ubuntu2:~# less /var/log/apache2/access.log

image

 

可見,nginx只是將真實的IP發送給了後端apache2,但是apache2並未接收,這裏就需要安裝一個apache2的模塊功能來實現。即mod_rpaf

3.ubuntu10.10下apache2安裝mod_rpaf模塊

mod_rpaf 模塊不是必須安裝,因爲在前端已經有 nginx 日誌了,但是有時候確實有查看 apache 日誌的需求,個人感覺還是非常有用的。

3.1 首先需要安裝apache2的apxs

使用apt-get install apache2安裝的apache默認是不帶apxs的,但這裏安裝的mod需要apxs,可以通過安裝apache2-dev實現。

命令如下:
  root@ubuntu2:~# apt-get install apache2-dev

       安裝完後查看安裝的路徑:

  root@ubuntu2:~# whereis apxs2
  apxs2: /usr/bin/apxs2 /usr/share/man/man8/apxs2.8.gz
  root@ubuntu2:~#

如果make過程出現這樣到錯誤:fatal error: Python.h: No such file or directory 可以安裝python2.6-dev解決
  root@ubuntu2:~# apt-get install python2.6-dev

3.2 安裝rpaf

      到http://stderr.net/apache/rpaf/download/ 下載最新軟件包

     tips:查看下載的軟件包README文件,你會發現非常有用。

root@ubuntu2:~# wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz

root@ubuntu2:~# tar xvf mod_rpaf-0.6.tar.gz

root@ubuntu2:~# cd mod_rpaf-0.6

root@ubuntu2:~# /usr/bin/apxs2 -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c

       或者直接使用make命令安裝

       此模塊會被自動安裝到/usr/lib/apache2/modules裏面,具體文件是mod_rpaf-2.0.so

下面最重要:

root@ubuntu2:~# cd /etc/apache2/mods-available

root@ubuntu2:~# touch rpaf.load rpaf.conf

root@ubuntu2:~# vim rpaf.load

添加如下內容:

LoadModule rpaf_module /usr/lib/apache2/modules/mod_rpaf-2.0.so

root@ubuntu2:~# vim rpaf.conf

添加如下內容:

<ifmodule mod_rpaf-2.0.c>
RPAFenable On 
RPAFsethostname On 
RPAFproxy_ips 127.0.0.1 192.168.1.8 # 填寫Nginx所在的前端的來訪IP,有幾個寫幾個
</ifmodule>

此時即可使用ubuntu apache2中的a2enmod命令啓用或禁用模塊

root@ubuntu2:~# a2enmod rpaf

root@ubuntu2:~# kill –HUP `cat /var/run/apache2.pid`

如圖所示

QQ截圖20120411131943

到此,安裝配置完畢。

4.測試

    重啓apahce2,在客戶端瀏覽器打開http://192.168.80.8 多刷新幾次。然後查看apache2上的訪問日誌,即可發現日誌中記錄的是真實的客戶端IP了。

root@ubuntu2:~# tail -5 /var/log/apache2/access.log

image

10.10.10.3即爲真實的客戶端IP地址。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章