wsjz_01 发表于 2018-5-7 09:52:36

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.9ubuntu10.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

  但是,即使添加了这几句之后,再次查看apache访问日志会看到全是nginx内网地址访问记录。
  root@ubuntu2:~# less /var/log/apache2/access.log

  可见,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`
  如图所示

  到此,安装配置完毕。
  4.测试
  重启apahce2,在客户端浏览器打开http://192.168.80.8 多刷新几次。然后查看apache2上的访问日志,即可发现日志中记录的是真实的客户端IP了。
  root@ubuntu2:~# tail -5 /var/log/apache2/access.log

  10.10.10.3即为真实的客户端IP地址。
页: [1]
查看完整版本: Ubuntu下Nginx做负载实现高性能WEB服务器2—日志优化