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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
.cn 域名,1个 12个月
简介:

一、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