RHCE学习<6>Apache、Nginx详解和AWStats日志分析

  1. 云栖社区>
  2. 博客>
  3. 正文

RHCE学习<6>Apache、Nginx详解和AWStats日志分析

李振良 2016-05-05 17:52:28 浏览2162

一、Apache服务

ApacheApache软件基金会的一个开放源码的网页服务器是世界使用最广泛的Web服务端之一,译为阿帕奇;Apache具有优秀的性能,稳定性,是通过加载模块来提供各种功能。

1、主配置httpd.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
ServerRoot     #服务目录
ServerAdmin    #管理员邮箱
user           #运行服务的用户身份
group          #运行服务的组身份
ServerName     #网站服务器的域名
DocumentRoot   #网页文档的根目录
Listen         #监听的IP地址、端口号
PidFile        #保存httpd进程PID号的文件
DirectoryIndex #默认的索引页文件
ErrorLog       #错误日志文件的位置
CustomLog      #访问日志文件的位置
LogLevel       #记录日志的级别,默认为warn
Timeout        #网络连接超时,默认为300秒
KeepAlive      #http是否持续连接,可选On或Off
MaxKeepAliveRequests #保持一个连接的最大请求数
KeepAliveTimeout     #断开连接前的时间
Include              #需要包含进来的其他配置文件
<Directory />        #区域设置
 ……
</Directory>

 #工作模式(默认Prefork)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<IfModule prefork.c>
StartServers       8    #默认启动8个httpd进程
MinSpareServers    5    #最小的空闲进程数
MaxSpareServers   20    #最大的空闲进程数,如果空闲进程数大于这个值,Apache会自动kill掉一些多余进程
ServerLimit      256    #服务器允许配置进程数的上限
MaxClients       256    #同时最多能发起256个访问,超过的要进入队列等待
MaxRequestsPerChild  4000  #每个进程启动的最大线程数,如达到限制数时进程将结束,如置为0则子线程永不结束
</IfModule>
                              
<IfModule worker.c>
StartServers         4
MaxClients         300
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>

2、虚拟主机配置

1>.基于域名虚拟主机

每个网站使用不同域名,对应IP地址和TCP端口相同,也是使用最多的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@www ~]# mkdir -p /var/www/test1.com /var/www/test2.com
[root@www ~]# echo "www.test1.com" > /var/www/test1.com/index.html
[root@www ~]# echo "www.test2.com" > /var/www/test2.com/index.html
[root@www ~]# vi /etc/httpd/conf/httpd.conf
ServerName 192.168.0.200:80 #设置本机IP地址,不设置会启动报错
NameVirtualHost *:80
<VirtualHost *:80>
  ServerName www.test1.com
  DocumentRoot /var/www/test1.com
  ServerAlias test1.com
  ErrorLog "/var/www/logs/test1.com-error_log"
  CustomLog "/var/www/logs/test1.com-access_log" common
</VirtualHost>
<VirtualHost *:80>
  ServerName www.test2.com
  DocumentRoot /var/www/test2.com
  ServerAlias test2.com
  ErrorLog "/var/www/logs/test2.com-error_log"
  CustomLog "/var/www/logs/test2.com-access_log" common
</VirtualHost>
[root@www ~]# service httpd restart
设置权限
[root@www~]# chmod -R 750 /var/www/test1.com/ /var/www/test2.com/
[root@www~]# chgrp -R apache /var/www/test1.com/ /var/www/test2.com/

http://www.test1/2.com #测试成功,没有dns服务器情况下,客户端需要做host记录

2>.基于IP虚拟主机

每个网站使用不同域名,不同IP,相同TCP端口 配置多个IP,eth0:0表示网卡的第二个IP地址,依次0、1、2等添加更多IP地址)

1
2
3
4
5
6
7
8
9
10
[root@www~]# cd /etc/sysconfig/network-scripts/
[root@www network-scripts]# cp ifcfg-eth0 ifcfg-eth0:0
[root@www network-scripts]# vi ifcfg-eth0:0
DEVICE=eth0:0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.200
GATEWAY=192.168.0.1
NETMASK=255.255.255.0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@www ~]# vi /etc/httpd/conf/httpd.conf
NameVirtualHost *:80
<VirtualHost 192.168.0.200:80>
  ServerName www.test1.com
  DocumentRoot /var/www/test1.com
  ServerAlias test1.com
  ErrorLog "/var/www/logs/test1.com-error_log"
  CustomLog "/var/www/logs/test1.com-access_log" common
</VirtualHost>
<VirtualHost 192.168.0.201:80>
  ServerName www.test2.com
  DocumentRoot /var/www/test2.com
  ServerAlias test2.com
  ErrorLog "/var/www/logs/test2.com-error_log"
  CustomLog "/var/www/logs/test2.com-access_log" common
</VirtualHost>
[root@www ~]# service httpd restart

3>.基于端口虚拟主机

每个网站相同域名,相同IP,不同端口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@www ~]# vi /etc/httpd/conf/httpd.conf
NameVirtualHost *:80
Listen 8080
Listen 8081
<VirtualHost *:8080>
  ServerName www.test1.com
  DocumentRoot /var/www/test1.com
  ServerAlias test1.com
  ErrorLog "/var/www/logs/test1.com-error_log"
  CustomLog "/var/www/logs/test1.com-access_log" common
</VirtualHost>
<VirtualHost *:8081>
  ServerName www.test2.com
  DocumentRoot /var/www/test2.com
  ServerAlias test2.com
  ErrorLog "/var/www/logs/test2.com-error_log"
  CustomLog "/var/www/logs/test2.com-access_log" common
</VirtualHost>
[root@www ~]# service httpd restart

3、基于用户的身份验证

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@www ~]# vi /etc/httpd/conf/httpd.conf
<VirtualHost *:80>
    DocumentRoot /var/www/test.com
    ServerName www.test.com
    ServerAlias test1.com
    ErrorLog "/var/www/logs/test.com-error_log"
    CustomLog "/var/www/logs/test.com-access_log" common
<Directory "/var/www/html">
    AuthName "Please input Password" #保护领域的提示信息
    AuthType basic #定义使用认证方式,basic或digest
    AuthUserFile /etc/httpd/.passwd #指定认证口令文件的位置
    #Require user user1 #授权给指定的一个或多个用户,也可以是一个组:Require group 组名
    Require valid-user #授权给认证口令文件的所有用户
</Directory>
</VirtualHost>

4、创建用户及密码,此处密码与用户的系统密码无关

1
2
3
4
5
[root@www ~]# htpasswd -c /etc/httpd/.htpasswd user1
New password:
Re-type new password:
Adding password for user user
[root@www ~]# service httpd restart

5、基于客户端地址访问控制,主要应用在区域<Directory >……</Directory>

Order配置项,定义控制顺序

1>.先允许后拒绝,默认拒绝所有:Order allow,deny

2>.先拒绝后允许,默认允许所有:Order deny,allow

Allow、Deny配置项,设置允许或拒绝的IP地址、主机名

1>.Deny from address1 address2 …

2>.Allow from address1 address2 …

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@www ~]# vi /etc/httpd/conf/httpd.conf
NameVirtualHost 192.168.0.200
<VirtualHost *:80>
    DocumentRoot /var/www/test.com
    ServerName www.test.com
    ServerAlias test1.com
    ErrorLog "/var/www/logs/test.com-error_log"
    CustomLog "/var/www/logs/test.com-access_log" common
<Directory "/var/www/html">
    order allow,deny
    allow from 192.168.1.0/24 #all允许所有
</Directory>
</VirtualHost>
[root@www ~]# service httpd restart

6、Apache下301转向代码(需要开启mod_rewrite)

1>.将不带www的域名转向到带abc的域名下

1
2
3
4
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.test.com [NC]
RewriteRule ^(.*)$ http://abc.www.test.com

2>.重定向到新域名

1
2
3
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^(.*)$ http://www.test.com/$1 [L,R=301]

3>.使用正则进行301转向,网站实现伪静态

1
2
3
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^news-(.+)\.html$ news.php?id=$1 #将news.php?id=123这样的地址转向到news-123.html

7、Apache下虚拟主机配置301跳转

为实现URL规范化,SEO通常将不带www的域名转向到带www域名,vhosts.conf中配置为:

1
2
3
4
ServerName www.test.com
DocumentRoot /var/www/html
ServerName test.com
RedirectMatch permanent ^/(.*) http://www.test.com/$1

二、Nginx服务

Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理服务器,也是一个 IMAP/POP3/SMTP代理服务器

1、apache与nginx优缺点

1>.apache对客户端的响应是支持并发的,运行守护进程后,会产生多个子进程/线程,每个子进程/线程分别对客户端请求进行响应。

2>.apache可以提供静态和动态服务,通常使用php模块来实现,mod_php5或叫apxs2。

3>.apache缺点:工作方式是基于多进程模式,每个用户请求就会创建一个子进程/线程来响应,如果并发请求非常多的时候,就会占用极多的系统资源CPU和内存,因此在并发量大情况下,apache并不是优势。

4>.nginx稳定性和低系统资源消耗的特点,并发连接的高处理能力(单台物理服务器可支持30000~50000个并发请求)nginx采用异步服务器模式,异步服务器事件驱动模式,用户并发请求只需一个进程或几个线程,因此占用的系统资源也相对非常少,比如,10000的并发连接请求,nginx只需要几十M的内存,而apache可能需要几百M的内存。

5>.nginx没有内置的模块来对PHP进行支持,而是通过第三方FastCGI模块来支持处理

2、安装Nginx

1
2
3
4
5
6
7
8
[root@www ~]# yum -y install pcre-devel zlib-devel
[root@www ~]# useradd -M -s /sbin/nologin nginx
[root@www ~]# tar zxvf nginx-1.4.2.tar.gz
[root@www ~]# cd nginx-1.4.2
[root@www nginx-1.4.2]# ./configure --prefix=/usr/local/nginx \
--user=nginx --group=nginx --with-http_stub_status_module
[root@www nginx-1.4.2]# make && make install
[root@www nginx-1.4.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #设置软链接,方便使用

3、常用命令

1
2
3
nginx -t :检测配置文件语法是否正确
nginx :启动nginx服务
killall -9 nginx :关闭nginx服务

4、编写nginx启动 停止 重启等SysV管理脚本,方便使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[root@www ~]# vi /etc/init.d/nginx
#!/bin/bash
# chkconfig: 345 99 20
# description: Nginx service control script
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
 start)
 $PROG
 echo "Nginx service start success."
 ;;
 stop)
 kill -s QUIT $(cat $PIDF)
 echo "Nginx service stop success."
 ;;
 restart)
 $0 stop
 $0 start
 ;;
 reload)
 kill -s HUP $(cat $PIDF)
 echo "reload Nginx config success."
 ;;
  *)
 echo "Usage: $0 {start|stop|restart|reload}"
 exit 1
esac
[root@www ~]# chmod +x /etc/init.d/nginx
[root@www ~]# chkconfig --add nginx
[root@www ~]# chkconfig nginx on

5、主配置文件nginx.conf

全局配置

1
2
3
4
user nobody;              #默认运行用户,可以编译时指定
worker_processes 1;       #启动工作进程数,一般是cpu的两倍
error_log logs/error.log; #错误日志位置
pid logs/nginx.pid;       #pid文件位置

I/O事件配置

1
2
3
events {
 worker_connections 1024; #每个进程允许的最大连接数
}

HTTP配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
http {
 include mime.types;     #设置mime类型(conf/mime.types)
 default_type application/octet-stream;
 #设置日志格式
 log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  '$status $body_bytes_sent "$http_referer" '
  '"$http_user_agent" "$http_x_forwarded_for"';
 access_log logs/access.log main;     #访问日志位置
 sendfile on;                         #支持文件发送、下载
 keepalive_timeout 65;                #连接保持超时时间
 gzip on;                             #开启gzip动态压缩
 #配置虚拟主机
 server {
 listen 80;
 server_name localhost; #设置域名
 charset utf8; #设置网页默认字符集
 access_log logs/host.access.log main; #访问日志
 location / {
 root html; #网页根目录位置,默认在安装目录html下
 index index.html index.htm; #网站首页
 }
 error_page 404 /404.html; #访问网页不存在或删除,返回的页面
 error_page 500 502 503 504 /50x.html;内部错误返回页面
 location = /50x.html {
 root html;
  }
 }
}

6、虚拟主机配置

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@www nginx]# vi /usr/local/nginx/conf/nginx.conf #在http{}添加包含虚拟主机配置
include /usr/local/nginx/vhost/*.conf;
[root@www nginx]# vi /usr/local/nginx/conf/vhost/test1.com.conf #创建虚拟主机配置文件
server {
 listen 80;
 server_name www.test1.com test1.com; #设置域名
 charset utf8; #设置网页默认字符集
 access_log logs/test1.com.log main; #访问日志
 location / {
 root /usr/local/nginx/html/test1.com; #网页根目录位置
 index index.html index.htm; #网站首页
 }
}

7、Nginx域名重定向

1
2
3
4
5
6
7
server {
listen  80;
server_name www.test.com test.com;
location / {
rewrite "^/(.*)$"http://bj.test.com;
}
}

8、Nginx网站目录跳转域名

1
2
3
4
5
6
server {
listen  80;
server_name www.test.com test.com;
location / {
rewrite ^/Login/login.html http://www.test.com;
}

9、Nginx虚拟目录并设置用户认证

1
2
3
4
5
6
7
8
9
10
11
location ~ /stats{
root /usr/local/nginx/html/;
location ~ \.php$ {
fastcgi_pass  127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME         /usr/local/nginx/html/$fastcgi_script_name;
include  fastcgi_params;
}
auth_basic "说明信息";
auth_basic_user_file /usr/local/nginx/.htpasswds;
}

10、Nginx伪静态配置(wordpress或discuz)

1
2
3
4
5
6
7
server {
listen       80;
server_name www.yngx.net yngx.net;
if(!-e $request_filename)
{
rewrite ^/(.*)$ /index.php?p=$1 last;
}

11、配置FastCGI支持PHP网页

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#安装gd库
[root@www ~]# yum install -y gd freetype freetype-devel libpng libpng-devel libjpeg* libxml2 libxml2-devel openssl openssl-devel
[root@www php-5.4]# tar zxvf php-5.4.tar.gz
[root@www php-5.4]# ./configure --prefix=/usr/local/php \
-with-config-file-path=/usr/local/php/etc \
-with-gd --with-zlib --with-iconv --enable-zip --enable-pdo \
-enable-xml --with-openssl --with-curl --enable-bcmath --enable-ftp \
-enable-mbstring --enable-fpm --with-fpm-user=nginx \
-with-fpm-group=nginx
[root@www php-5.4]# make && make install
[root@www php-5.4]# cp php.ini-production /usr/local/php/etc/php.ini
[root@www php-5.4]# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
[root@www php-5.4]# chmod +x /etc/rc.d/init.d/php-fpm
[root@www nginx]# cd /usr/local/nginx
[root@www nginx]# cp etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf  #复制php-fpm配置模板
[root@www nginx]# vi etc/php-fpm.conf
user = nginx
group = nginx
pid = run/php-fpm.pid
pm.start_server = 20 #启动时开启进程数
pm.min_spare_servers = 5 #最小空闲进程数
pm.max_spare_servers = 35 #最多空闲进程数
[root@www php-5.4]# service php-fpm start
[root@www php-5.4]# chkconfig php-fpm on
[root@www php-5.4]# vi /usr/local/nginx/conf/nginx.conf #访问php页面配置段,去掉以下注释
location ~ \.php$ { root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name; #SCRIPT_FILENAME后面写网站根目录
include fastcgi_params;
}

测试:

1
2
3
4
[root@www nginx]# vi html/index.php
<? php
phpinfo();
?>

三、AWStats+JAWStats日志分析工具

Awstats是一款基于Perl的WEB日志分析工具,而JAWStats是一款基于PHP的统计套件,旨在为Awstats提供更为精美图形界面。

JAWStats 是一个用来统计网站日志的工具,在 AWStats 的基础上生成更加清晰的关于网站访问数据的图表、表格。

它可以统计您站点的如下信息:

1>.访问量,访问次数,页面浏览量,点击数,数据流量等
2>.精确到每月、每日、每小时的数据
3>.访问者国家
4>.访问者IP
5>.Robots/Spiders的统计
6>.访客持续时间
7>.对不同Files type 的统计信息
8>.Pages-URL的统计
9>.访客操作系统浏览器等信息
10>.其它信息(搜索关键字等等)

1、安装配置AWStats

下载:http://www.awstats.org/#DOWNLOAD

1
2
3
4
5
6
7
[root@www ~]# tar zxvf awstats-7.2.tar.gz
[root@www ~]# mv awstats-7.2 /usr/local/awstats
[root@www ~]# chown -R root.root /usr/local/awstats/
[root@www ~]# chmod +x /usr/local/awstats/tools/*.pl
[root@www ~]# chmod +x /usr/local/awstats/wwwroot/cgi-bin/*.pl
[root@www ~]# cd /usr/local/awstats/tools/
[root@www tools]# ./awstats_configure.pl #向导工具,生成网站配置文件

1>.输入 none 然后回车
2>.输入 y 确认创建配置文件
3>.输入配置文件名称,一般输入域名。

4>.配置文件使用默认路径 /etc/awstats
5>.按回车继续
6>.按回车完成配置文件的创建

1
2
3
4
5
6
7
8
[root@www tools]# vi /etc/awstats/awstats.www.test.com.conf
LogFile=LogFile="/var/log/httpd/access_log" #修改统计网站的日志文件路径
DirData="/var/lib/awstats"  #默认日志信息统计数据库
[root@www tools]# mkdir /var/lib/awstats #创建统计数据库
[root@www tools]# perl /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=www.test.com #为指定网站生成数据
[root@www tools]# /usr/local/awstats/tools/awstats_updateall.pl now #为所有网站生成数据
[root@www tools]# crontab -e  #设置定时运行日志分析程序
* */1 * * * /usr/local/awstats/tools/awstats_updateall.pl now

添加apache支持awstats参数

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@www ~]# vi /etc/httpd/conf/httpd.conf
Alias /awstatsclasses "/usr/local/awstats/wwwroot/classes/"
Alias /awstatscss "/usr/local/awstats/wwwroot/css/"
Alias /awstatsicons "/usr/local/awstats/wwwroot/icon/"
ScriptAlias /awstats/ "/usr/local/awstats/wwwroot/cgi-bin/"
<Directory "/usr/local/awstats/wwwroot">
    Options None
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
[root@www ~]# service httpd restart
[root@www ~]# chmod 755 -R /usr/local/awstats

测试访问:http://192.168.0.102/awstats/awstats.pl?config=www.test.com

144756478.jpg

2、安装配置JAWStats

下载:http://www.jawstats.com/download

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[root@www ~]# mkdir /usr/local/jawstats
[root@www ~]# tar zxvf jawstats-0.7beta.tar.gz -C /usr/local/jawstats
[root@www ~]# cd /usr/local/jawstats/
[root@www jawstats]# cp config.dist.php config.php
[root@www jawstats]# vi config.php
<?php
  // core config parameters
  $sDefaultLanguage      = "zh-cn";  #设置默认语言
  $sConfigDefaultView    = "thismonth.all";  #默认按月显示
  $bConfigChangeSites    = true#是否可以更换站点
  $bConfigUpdateSites    = true#是否可以更新统计数据
  $sUpdateSiteFilename   = "xml_update.php";
  // individual site configuration
  $aConfig["www.test.com"] = array(   #web站点域名
    "statspath"   => "/var/lib/awstats",  #awstats统计数据目录
    "updatepath"  => "/usr/local/awstats/wwwroot/cgi-bin/awstats.pl"#用于更新统计数据
    "siteurl"     => "http://www.test.com",  #点击首页标题前往的地址
    "sitename"    => "www.test.com",  #首页标题
    "theme"       => "default",
    "fadespeed"   => 250,
    "password"    => "123456",  #更新统计数据输入的密码
    "includes"    => "",
    "language"    => "zh-cn"
  );
?>

3、添加中文语言包

下载:http://www.jawstats.com/src/languagepack.zip

1
2
3
4
[root@www jawstats]# cd /usr/local/jawstats/languages/
[root@www languages]# rm -rf ./*
[root@www languages]# unzip languagepack.zip
[root@www languages]# rm -rf languagepack.zip

4、配置虚拟目录用户认证访问

1
2
3
4
5
6
7
8
9
[root@www ~]# vi /etc/httpd/conf/httpd.conf
Alias /tongji "/usr/local/jawstats"
<Directory "/usr/local/jawstats">
Options Indexes MultiViews
  AuthType Basic
  AuthName "Please Login"
  AuthUserFile /etc/httpd/.passwd
  Require valid-user
</Directory>

5、测试

http://www.test.com/tongji