您的位置:首页 > 运维架构 > Apache

Apache编译和rpm安装,统计appche站点IP访问量脚本

2014-06-25 12:52 579 查看
源码包编译安装apache 下载所需要的软件包: httpd:http://mirrors.hust.edu.cn/apache/httpd/httpd-2.4.9.tar.gz apr:http://apache.fayea.com/apache-mirror//apr/apr-1.5.1.tar.gz; apr-util:http://apache.fayea.com/apache-mirror//apr/apr-util-1.5.3.tar.gz安装apr
cd /usr/src/apr-1.5.1
./configure --prefix=/usr/local/apr make
make install
安装apr-util
cd /usr/src/apr-util-1.5.3
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/ make
make install
安装httpd(apache)
cd /usr/src/httpd-2.4.9 ./configure --prefix=/usr/local/httpd-2.4.9 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util 注:这里只是为了演示源码包的安装,如果需要定制httpd的功能,使用./configure --help,查阅帮助信息;
make
make install 将httpd的bin目录加入到PATH中
vim /etc/profile.d/httpd.sh
输入"export PATH=$PATH:/usr/local/httpd-2.4.9/bin",保存退出;
source /etc/profile
启动apache:apachectl start 在浏览器中输入服务器的IP地址,如果看到“It works!“表示安装成功! 停止apache:apachectl stop
删除apache:将/usr/local/httpd-2.4.9目录删除即可;

使用rpm格式安装并配置httpd

httpd相关软件包说明 httpd 主软件包; httpd-devel http相关的开发包; httpd-manual 官方提供的手册; httpd-tools httpd相关的工具(包括一些测试工具); 安装httpd(centos6.4-x64系统,使用rpm安装) yum install -y httpd 服务脚本:/etc/rc.d/init.d/httpd; 工作目录:/etc/httpd; 配置文件存放目录:/etc/httpd/conf/; 主配置文件:/etc/httpd/conf/httpd.conf; 扩展配置文件:/etc/httpd/conf.d/*.conf; socket:http(80/tcp),https(443/tcp); 网页文件存放目录:/var/www/html/ CGI脚本目录:/var/www/cgi-bin/ 模块目录:/etc/httpd/modules(链接到/usr/lib/httpd/modules); 日志目录:/etc/httpd/logs(链接到/var/log/httpd); 启动httpd服务:service httpd start; 注意:在rhel系列中,启动httpd后会默认打开一个测试页面,如果不想显示该测试页,使用"mv -f /etc/httpd/conf.d/welcome.conf webcome.conf.bak",并重启服务即可; 配置文件语法 1,指令不区分大小写,但通常建议将首字母大写; 2,指令的值可能会区分大小写(比如路径); 3,指令和值之间用空格隔开即可; 4,某些指令可以重复出现多次(如listen); 5,紧跟在"#"符号后没有空格的为指令,是可以启用的,"#"符号后面紧跟有空格的为注释; 主配置文件的构成 1,全局配置:对主服务器或虚拟主机都生效,并且有些功能是服务器自身的工作属性; 2,主服务器:与主站相关的设置; 3,虚拟主机:虚拟主机相关的设置; 注意:主服务器和虚拟主机不能同时启用;
主配置文件的设置:/etc/httpd/conf/httpd.conf; ### Section 1: Global Environment ServerTokens OS 定义页面显示的服务器信息详细程度,可以指定其他参数; ServerRoot "/etc/httpd" 定义服务器的工作的根目录; PidFile run/httpd.pid 定义pid配置文件的路径(这是一个相对路径); Timeout 60 TCP连接的超时时间(如三次握手等等); KeepAlive Off 是否打开长连接,开启后有助于提升服务器性能,但如果在比较繁忙的服务器中,应考虑是否开启(服务器处理客户端的数量是有限的,要避免客户端长时间占用资源); MaxKeepAliveRequests 100 长连接请求的最大资源数,达到该限制后断开链接; KeepAliveTimeout 15 <IfModule prefork.c> prefork模型的相关设置; StartServers 8 服务器启动多少个空闲进程; MinSpareServers 5 最少空闲进程(如果8个空闲进程使用了4个,则会再启动一个空闲进程,保证存在5个空闲进程); MaxSpareServers 20 最大空闲进程(如果有500个用户访问,退出了450个,则kill掉30个); ServerLimit 256 为MaxClients设定的上限值(需要将服务器进程kill掉,然后在重启) MaxClients 256 最大客户端数量(最大允许多少个连接请求); MaxRequestsPerChild 4000 一个进程最多响应多少个用户请求,当接收用户请求4000次后,将其kill掉,生成新的进程响应用户请求; </IfModule> <IfModule worker.c> worker模型的相关设置; StartServers 4 默认启动的进程数; MaxClients 300 最大客户端数量(最大允许多少个连接请求); MinSpareThreads 25 最小空闲线程(所有进程的线程数之和); MaxSpareThreads 75 最大空闲线程(所有进程的线程数之和); ThreadsPerChild 25 一个进程生成多少个线程; MaxRequestsPerChild 0 每个进程响应多少个用户请求(由于是由线程来控制,为0表示不限制);
</IfModule> Listen 12.34.56.78:80 httpd监听的IP地址和端口,可以不指定IP地址表示监听本机所有地址(listen可以出现多次,用于监听多个端口);
LoadModule auth_basic_module modules/mod_auth_basic.so 指定httpd启动时装载的模块(前后分别为"模块名称/模块路径",路径为相对路径); Include conf.d/*.conf 装载额外的配置文件(相对路径); ExtendedStatus On 使用status时,是否显示更详细的信息(默认注释掉); User apache httpd的work进程使用的用户; Group apache httpd的work进程使用的组名;
### Section 2: 'Main' server configuration ServerAdmin root@localhost 服务器管理员的邮箱地址; ServerName www.example.com:80 服务器名称(如果不启用此指令,则服务器启动时会试图反解当前主机的IP地址,如果解析成功,则引用此主机名作为服务器名称,否则会使用"127.0.0.1"来作为默认主机名); DocumentRoot "/var/www/html" 网页文件存放的根目录; <Directory "/var/www/html"> 定义一个网站容器; Options FollowSymLinks 定义容器名称内文件被访问时的访问属性; Options的参数 Indexes 允许索引目录,即没有默认页面时,列出网页文件列表(生成环境中应该关闭,如果作为下载站点时可以开启); none 不支持任何参数; FollowSymLinks 允许符号链接(是否允许访问页面中的符号链接所指向的源文件,如果没有必要可以关闭,在一定程度上可以提高服务器性能); Includes 允许执行服务器端包含"SSI"的文档,为了安全起见,应该关闭; ExecCGI 是否允许执行CGI脚本; MultViews 内容协商机制,根据客户端来源的语言来判定显示相匹配的的网页(消耗资源,没有必要不必开启); All 支持所有参数; AllowOverride None 是否使用.htacess覆写访问权限; AuthConfig 需要进程用户认证后才可以访问网页; Order allow,deny 定义基于主机的访问控制功能,可以实现基于IP、网络地址或主机名来定义,deny写在后面表示deny所有; Allow from all 允许所有的主机访问,或者使用Deny from all拒绝所有主机,也可以使用以下写法: Deny from 192.168.0.0/24 Allow from 192.168.1.0/24 172.16.100.0/24 .edu apache.org www.example.com 172.16 </Directory> 注意: 目录可能会继承父目录的选项,在选择前"-”符号表示取消从父目录继承的某项功能; <IfModule mod_userdir.c> 是否支持用户在个人的家目录中建立网页文件,使用http://xxx/~home/的方式访问; UserDir disabled 默认不允许,如果要启用此功能,将此项注释,去掉#UserDir public_html的注释,用户建立public_html目录,然后将网页文件放到该目录即可; </IfModule> DirectoryIndex index.html index.html.var 定义访问的默认页面,从左向右匹配; AccessFileName .htaccess apache的每目录访问控制,在对应的目录下创建".htacess"文件,将访问控制机制写入即可,但会降低apache的执行效率,生产中通常禁用; <Files ~ "^\.ht"> 模式匹配,以ht开头的文件,保障此类开头文件的安全性;
Order allow,deny
Deny from all
Satisfy All
</Files> TypesConfig /etc/mime.types 定义httpd支持的mime类型的文件; DefaultType text/plain 如果没有指定类型,默认使用的类型为:明文的纯文本类型; HostnameLookups Off 日志记录中,是否将每个访问用户的IP反解成主机名(消耗系统资源,建议不启用); EnableSendfile off ErrorLog logs/error_log 定义错误日志的存放位置; LogLevel warn 定义日志级别; LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 定义日志格式,最后面的一项为日志格式的名称; %h 客户端地址; %l 远端主机的登录名称(远程主机登录系统的用户名); %u 登录网站使用的用户; %t 日志事件产生的时间; %r 请求报文的第一行(访问方法,URL获取的资源以及版本号); %>s 最后一个请求对应的状态码; %b 响应报文的大小; %{Referer}i 从哪个页面的链接过来的; %{User-Agent}i 客户端浏览器的类型; CustomLog logs/access_log combined 定义访问日志格式的类型; Alias /icons/ "/var/www/icons/" 定义路径别名; 注意:Alias /luntan "/bbs/forum" 如果luntan后面加/符号,后面forum也一定要加/符号,如果没加则都不加; ScriptAlias 定义执行CGI脚本的目录; 配置用户认证 <Directory "/var/www/html"> AllowOverride AuthConfig AuthType Basic 使用基本用户认证; AuthName "Restricted Site..." 认证提示信息; AuthUserFile “/etc/httpd/conf/htpasswd” 认证用户的账号密码文件; Require valid-user valid-user表示允许密码文件中所有用户登录,也可以指定特定用户; AuthGroupFile "/etc/httpd/conf/group" 指定组名和包含的用户(语法"myusers:hadoop tom"); Require group groupname 允许哪些组可以登录; Order allow,deny Allow from all </Directory>

### Section 3: Virtual Hosts 定义虚拟主机前,最好先取消中心主机,注释中心的DocumentRoot即可; 配置基于IP的虚拟主机 <VirtualHost 192.168.1.1:80> ServerName www.example.com 域名; DocumentRoot "/var/www/html" 网页文件存放目录; </VirtualHost> <VirtualHost 192.168.1.2:80> ServerName www.linux.com DocumentRoot "/var/www/linux" </VirtualHost> 配置基于端口的虚拟主机 <VirtualHost 192.168.1.1:80> ServerName www.example.com DocumentRoot "/var/www/html" CustomLog logs/example.com-access_log common 访问日志的记录位置和类型; </VirtualHost> <VirtualHost 192.168.1.1:8080> 需要在Listen指令上添加监听8080端口; ServerName www.linux.com DocumentRoot "/var/www/linux" CustomLog logs/linux.com-access_log common 访问日志的记录位置和类型; </VirtualHost> 配置基于域名的虚拟主机:使用基于域名的虚拟主机,需要启用"NameVirtualHost *:80"指令,可以指定监听的地址,*表示监听所有IP; <VirtualHost *:80> ServerName www.example.com DocumentRoot "/var/www/html" CustomLog logs/example.com-access_log common <Directory "/var/www/html"> Options none AllowOverride none Order deny,allow Deny from 192.168.10.1 </Directory> </VirtualHost> <VirtualHost *:80> ServerName www.linux.com DocumentRoot "/var/www/linux" CustomLog logs/linux.com-access_log common <Directory "/var/www/linux"> Options none AllowOverride AuthConfig AuthType Basic AuthName "Restricted Site..." AuthUserFile “/etc/httpd/conf/htpassw" Require valid-user </Directory> </VirtualHost> 定义默认虚拟主机:需将其放在所有虚拟主机的最上面; <VirtualHost _default_:80> DocumentRoot "/var/www/default" </VirtualHost>配置httpd的status功能 <Location /status> SetHandler server-status 实现所有匹配到的文件由一个处理器来处理,server-status可以显示服务器的状态信息; Order deny,allow Deny from all Allow from .example.com 生产中应该对用户访问status做认证; </Location>

######[b] Section 4配置基于openssl的https服务[/b] 1,安装ssl模块:yum install -y mod_ssl,安装后会生成以下文件 /etc/httpd/conf.d/ssl.conf ssl的配置文件,需要装载到httpd的主配置文件中(重启httpd会自动装载); /usr/lib/httpd/modules/mod_ssl.so ssl的模块; /var/cache/mod_ssl ssl会话的缓存目录 2,为服务器提供证书(测试环境中,可以自建CA,然后使用自签名证书); 3,配置https服务:编辑/etc/httpd/conf.d/ssl.conf <VirtualHost 192.168.1.1:443> DocumentRoot "/var/www/html" ServerName www.example.com ErrorLog logs/ssl_error_log 错误日志的存放位置; TransferLog logs/ssl_access_log 访问日志的存放位置; LogLevel warm 记录日志的级别; SSLengine on 是否启用ssl功能; SSLProtocal all -SSLv2 支持哪些ssl协议,ALL表示所有,-SSLv2表示不支持ssl v2; SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW SSL支持哪些加密机制,ALL表示所有,!表示排除; SSLCertificateFile /etc/pki/tls/certs/localhost.crt 证书文件存放的位置; SSLCertificateKeyFile /etc/pki/tls/private/localhost.key 私钥文件的存放位置; 注意 1,证书中的主机名称必须与客户浏览器访问的名称一致; 2,一个IP地址上只能建立一个SSL主机; 3,将CA的证书(如cacert.pem)下载到客户机,改名为"cacert.crt",然后导入到客户端浏览器的"受信任的根证书颁发机构"中,客户端浏览器打开https就不会报错; 4,生产环境中的服务器,建议向权威的CA机构申请证书;

httpd配置文件语法测试 service httpd configtest 或 httpd -t;两个命令的效果是一样的,前者也是调用的后者; 注意:大部分配置被修改后,使用"service httpd reload"即可生效,而修改监听地址和端口需要重启服务才生效;htpasswd:创建用户密码文件的命令; -c:创建密码文件,只有在第一次的时候使用,如果密码文件已经存在,则将文件内的用户清空; -m:用户的密码以md5格式加密存放; -D:删除一个用户 htpasswd -c -m /etc/httpd/conf/htpasswd hadoop; htpasswd -m /etc/httpd/conf/htpasswd tom;关于<Directory>和<Location>的说明 <Directory "/var/a.org"></Directory> 定义用户访问某个文件系统路径的时候,应该具有何种访问属性; <Location "/images"></Location> 定义用户访问该URL的时候,具有何种的访问属性;关于MPM:多道处理模块,用于定义apache响应多个用户请求时所工作的模型; mpm_winnt:windows专用; prefork:一个请求用一个进程响应; worker:一个进程响应多个用户请求;worker是基于线程,其启动多个进程,进程启动后启动多个线程一个请求用一个线程响应; enent:基于事件驱动模型,一个进程响应多个用户请求; httpd -l :查看httpd编译所支持的模型,如果没有编译又想使用其他模型可以使用httpd.event或httpd.worker;
在/etc/sysconfig/httpd 文件中可以修改httpd启动的默认模型,在2.2中event为测试模型,不建议使用;2.4默认为event模型;虚拟主机的类型 基于IP:每个虚拟主机使用不同的IP地址,但使用的端口相同; 基于端口:每个虚拟主机的IP地址相同,但端口不同; 基于域名:每个虚拟主机的IP和端口相同,但使用的域名不用;
统计appche站点IP访问量的shell脚本根据IP访问量降序排列:
#!/bin/bash
#Script_name: access_count
acc_log=/usr/local/apache2/logs/access_log
/bin/awk '{print $1}' $acc_log  | sort | uniq -c | sort -nr
执行效果:
[root@zabbix ~]# sh access_count
94989 192.168.100.34
38863 192.168.200.92
23658 192.168.1.71
16720 192.168.100.80
打印访问量前三的IP地址:
#!/bin/bash
#Script_name:access_count
acc_log=/usr/local/apache2/logs/access_log
/bin/awk '{print $1}' $acc_log  | sort | uniq -c | sort -nr | head -n 3
apache站点访问错误统计:
#!/bin/bash
#Script_name:error_count
err_log=/usr/local/apache2/logs/error_log
cat  $err_log | grep -e "^\[" |  awk '{print $6}' | sort | uniq -c |sort -nr
执行效果:
[root@zabbix ~]# sh error_count
701 [core:notice]
30 [mpm_event:notice]
12 [core:warn]
1 [:error]
本文出自 “从心开始” 博客,请务必保留此出处http://hao360.blog.51cto.com/5820068/1430668
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: