apache指令说明:
http://httpd.apache.org/docs/2.2/mod/directives.html
Listen 172.18.100.67:8081 监听某个指定地址和端口
启动前检查一下语法:
httpd -t
如果要监听多个端口,要多行写
Listen 80
Listen 8080
页面上关于主机的一些信息:
ServerTokens OS
ExtendedStatus On
Apache服务器可以通过特殊的HTTP请求,来报告自身的运行状态,
打开这个ExtendedStatus 参数可以让服务器报告更全面的运行状态信息
指明配置存放的位置:
ServerRoot “/etc/httpd”
超时时间与后端应用建立连接的时候
Timeout 60
DocumentRoot : 资源映射 (网页根目录)
我们在访问某个站点的时候,站点从哪儿去加载资源
http://www.magedu.com/a.jpg ——–> /var/www/html/a.jpg
DocumentRoot “/data/www/” #建议修改时注释复制后修改
注意: setenforce 0 一定要记得最先关掉
非保持连接(短连接) #连接请求后立即断开
对于大量并发的场景中,短连接的三次握手四次挥手占据了大量带宽
保持连接(长连接) #连接请求后不会立马断开,避免再次连接三次握手
避免过多的连接保持,可以从时间和数量两个维度对长连接加以限制
KeepAlive Off #短连接
KeepAlive on #生成环境都要开启,下面的信息才会生效
查看httpd 程序的模块列表
查看静态编译的模块:#httpd -l
查看静态编译及动态编译的模块:#httpd -M
更换使用的Httpd 程序以支持其他MPM 机制,修改 /etc/sysconfig/httpd
注意:对Linux 而言,线程是跟进程一样的量级,
多线程模型所能带来的性能的提升是有效的。Worker 和prefork 的性能并没有
太大的改变。 所以基本没必要更改。
条件式配置,prefork 和worker 分别对应不同的配置区段
Prefork 模式
<IfModule prefork.c>
StartServers 8 #服务器进程启动时候启动多少空闲进程
MinSpareServers 5 #最少空闲进程数,如果少于5 ,主控进程
再启动几个达到5
MaxSpareServers 20 #最大空闲进程数,如果大于20 主控进程对
子进程进行回收
ServerLimit 256 #所允许启动的最大在线进程数量
MaxClients 256 #最大允许启动进程数量响应用户请求(最
大并发响应数)
MaxRequestsPerChild 4000 # 每个进程最多可以处理多少个请求,
超过4000 销毁
</IfModule>
worker 模式
<IfModule worker.c>
StartServers 4 #服务器进程启动时候启动多少空闲进程
MaxClients 300 #最大并发响应数300
MinSpareThreads 25 #最小空闲线程数25
MaxSpareThreads 75 #最大空闲线程数75
ThreadsPerChild 25 #每个进程启动25个线程
MaxRequestsPerChild 0 #每个进程可以处理无限个请求
</IfModule>
PV page view 页面访问量 只能大概得出每天的QPS
UV user page 用户访问量
PV UV 运营人员比较关注的数据
QPS: 每秒的请求数 (统计峰值QPS)
QPM: 每分钟的请求数
一天的PV 一百万,实际的QPS只有12,需要除以86400
峰值的QPS 峰值的QPM 才是我们需要关注的
经验值:
QPS 硬件资源不成为瓶颈的前提下:
C++ 的应用迸发值一般在1500左右
JAVA (tomcat)的应用在 1000–1200
PHP 800–900
MPM(多路处理模块机制):
多路处理模块机制MPM(Multipath processing Modules)
Prefork :多进程模型,每个进程响应一个请求,一个主进程,多个子进程
Worker :多进程多线程模型,每个线程响应一个请求,MN
Event :事件驱动模型,一个进程响应多个请求
apache 2.2 中MPM不支持动态装卸载,直接放在模块里面
httpd -l #使用此命令可以看出改模式在模块里面,
core.c
prefork.c
http_core.c
mod_so.c
httpd -M | grep prefork
注意: 如果想自己编译一个Apache 2.2 那么你编译成什么模式,它就是什么模式
如果想改模式 只能重新编译
使用yum安装的时候centos官方想了一个办法同时提供了三个二进制可执行文件:
[root@CentOS68 www]# ll /usr/sbin/httpd
-rwxr-xr-x. 1 root root 356320 May 12 2016 /usr/sbin/httpd
-rwxr-xr-x. 1 root root 369480 May 12 2016 /usr/sbin/httpd.event
-rwxr-xr-x. 1 root root 368136 May 12 2016 /usr/sbin/httpd.worker
如果你想切换模式,可以直接修改/etc/sysconfig/httpd
LoadModule authn_default_module modules/mod_authn_default.so
DSO指令 模块名 模块的存放的相对路径(/etc/httpd)
ServerName www.magedu.com:80
定义网站(中心主机)域名
1 需要借助DNS 将域名解析(A记录)指定到服务器对应的IP
2 或者直接使用hosts文件
vim /etc/hosts
172.18.100.67 www.mageu.com
对于windows来说是在
C:\Windows\System32\drivers\etc\hosts
可基于两种机制指明对哪些资源进行何种访问控制
对目录或者是文件进行访问控制 不建议使用正则表达式
<Directory “/var/html/www”>
……
</Directory> // 对目录下所有资源实现访问控制
File “ ”>
….
</File> //
Options Indexes FollowSymLinks
如果访问一个站点 首页不存在且有Indexes选项 则:
要么直接返回资源不存在
要么将当前的目录里面的内容全部给列出来,供自己选择 indexs
如果你的网站是在公网上 访问者将看到网站的所有内容,很危险
如果用作内容共享,供访问者访问目录下的资源,可以将此选项打开。
FollowSymLinks 是否允许访问软连接所指向的真实文件,有的话表示允许
Includes // 允许启用服务端包含
SymLinksifOwnerMatch // 源文件和链接的目标文件的属主属组相
同的时候才允许跟踪访问
ExecCGI // 允许执行CGI 脚本
None // 全部都不
ALL // 全部都
AccessFileName .htaccess
针对每个网站子目录定义一个配置文件, #不建议使用,会耗费资源
基于源地址定义访问规则:
Order allow,deny # 定义允许或者禁止
Allow from 172.16 # 仅允许172.16的网段访问
Deny from 172.18.0.1 # 不允许此网络访问
DirectoryIndex index.html index.html.var index.php
定义默认的访问主页
路径别名
www.magedu.com/bbs/a.jpg ——-网页根目录(/var/www/html) bbs/a.jpg
如果定义一个路径别名的时候
www.magedu.com/bbs/a.jpg /data/www/a.jpg
定义一个别名:
exam: Alias /download/ “/data/www/” #定义download 指向/data/www/
mkdir download
cd download/
echo “/var/www/html/download” >> a.html
vim /etc/httpd/conf/httpd.conf
更改: Alias /download/ “/data/www/”
cd /data/www/
ls
echo “/data/www/” >> a.html #方便查看这样写
service httpd restart
AddDefaultCharset UTF-8
生产环境一定要保证字符集为UTF-8
error_log 放的是Apache本身出错的信息 # 是本身的错误,而不是用户出错信息
acces_log 记录访问信息 每条访问会生产一条日志信息
ErrorLog logs/error_log 定义错误日志的存放路径已经名称
日志级别:
debug, 所有信息,只要产生就全部记录下来 日志量最大的,便于生产调试
info, 所有的信息数据
notice, 引起注意
warn, 警告 只记录警告信息 #一般选择中间值,
error, 发生错误
crit, 级别很严重
alert, 红色警戒
emerg. 引起恐慌 日志量最小
一天某个日志量200G-300G
删日志的时候 占用大量的CPU资源
echo “” >
> log
cp /dev/null log
禁止使用rm,使用上面三种
CustomLog logs/access_log common
定义访问日志 日志格式
自定义日志格式 运维规范化中日志规范
日志的作用:
1 error
2 统计QPS QPM
统计访问前10的IP:
cat /var/log/httpd/access_log |awk ‘{print $1}’ |sort | uniq -c | sort -nr | head
ELK 对日志做聚合分析
常见的用户认证方式
basic : 明文认证
表单认证 : digest
Basic 认证配置步骤
定义安全域
<Directory “”>
Options None
AllowOverride None
AuthType Basic #基本basic认证
AuthName “String” #提示信息
AuthUserFile “/PATH/TO/HTTPD_USER_PASSWD_FILE” #密码文件路径
# AuthGroupFile “/PATH/TO/HTTPD_GROUP_FILE” # 基于组来认证
Require user username1 username2…
# Require group grpname1 grpname2 …
</Directory >
账号和密码存储(文本文件)
新建密码文件
htpasswd -c -m /etc/httpd/conf/.htpasswd tom
注意 -c 第一次创建密码文件的时候使用,后面创建不需要,否则会覆盖
-m MD5 认证
Httpd虚拟主机的使用:
通常情况下 ,一个服务器上只能跑一个网站,或者说一个进程只能跑
一个网站。虚拟主机实现了一台机器上或者一个Web 服务上为多个网站提供服务。
站点标示:Socket
IP 相同,端口不同,易于实现,不实用
IP 不同,端口均为默认端口,不实用,需要多个IP ,成本很高
IP 相同,端口相同,FQDN 不同,在请求报文首部实现
虚拟主机的实现方式
基于IP 为每个虚拟主机至少准备一个IP 地址
基于port 为每个虚拟主机至少一个独立的port
基于FQDN 每个虚拟主机至少一个FQDN
注意:虚拟主机和中心主机不能同时使用,直接注释掉中心主机
基于端口
Listen 8080 #基于端口,需要监听,在这方便些
<VirtualHost 172.18.100.67:80> #如果基于IP, 需要多个网卡,端口不变
ServerAdmin ma@mageud.com
DocumentRoot /data/www1
ServerName www.a.com
ErrorLog logs/a-error_log
CustomLog logs/a-access_log common
</VirtualHost>
<VirtualHost 172.18.100.67:8080>
ServerAdmin ma@mageud.com
DocumentRoot /data/www2
ServerName www.b.com
ErrorLog logs/b-error_log
CustomLog logs/b-access_log common
</VirtualHost>
新建子配置文件: #基于域名FQDN的虚拟主机
NameVirtualHost 172.18.100.67:80 #一定需要此选项
<VirtualHost 172.18.100.67:80>
ServerAdmin ma@mageud.com
DocumentRoot /data/www1
ServerName www.a.com
ErrorLog logs/a-error_log
CustomLog logs/a-access_log common
</VirtualHost>
<VirtualHost 172.18.100.67:80>
ServerAdmin ma@mageud.com
DocumentRoot /data/www2
ServerName www.b.com
ErrorLog logs/b-error_log
CustomLog logs/b-access_log common
</VirtualHost>
验证:
/etc/hosts添加
172.18.100.67 www.a.com
172.18.100.67 www.b.com
[root@CentOS68 conf.d]# curl www.a.com
www1
[root@CentOS68 conf.d]# curl www.b.com
www2
curl
-i 返回网站信息的同时返回头信息(GET)
-I 只返回请求的头信息 (HEAD)
-o 将请求结果写到某个文件里面
-s 静默输出
-k 不使用证书
-m 5 最大传输时间5秒
Httpd 状态页面开启
/etc/httpd/conf/httpd.conf 开启status 模块
启动状态访问页面
<Location /server-status>
SetHandler server-status
Order deny,allow
Allow from all 修改访问权限 #默认是deny
Allow from .example.com
</Location>
然后访问域名:如:192.168.235.135/server-status
curl -I URL(不支持HEAD) #很多网站不支持此方式,默认不安全
405 method not allowed
curl -i -s http://www.baidu.com | grep “HTTP” | cut -d” ” -f2
200 #抓状态码200
通常用来判断一个网站是否可以正常访问
elinks www.a.com | grep “www”
#纯文本界面的www,如果出现乱码,需要调字符集UTF-8
#用来判断一个网站是否正常
#状态监控和健康检查
使用mod_deflate 模块压缩页面优化传输,生产模式默认没有定义,需要再主配置文件尾部
手动添加,只需要三步就KO了
1.设置一个输出过滤器
2.根据内容类型执行过滤
3.指定压缩级别
4.有时需要排除压缩文件
HTTP——-全站HTTPS
magedu.com 这个域的证书和key
如果只需要用户通过某端口访问:
1 跳转 用户通过80访问,然后网站重定向到443端口
www.magedu.com 自动跳转 重定向
https://www.magedu.com
Apache写rewrite
2 HSTS协议(了解一下) 直接在浏览器里跳转
访问www.magedu.com 的时候浏览器直接帮你改成https://www.magedu.com
学习Nginx的时候 在Nginx写rewrtie跳转
压力测试:全链路压测
Jmeter, Loadrunner等图形界面工具
网易tcpcopy #建议使用此工具
Httpd2.4在6上编译安装:
1.安装apr-1.4和apr-util-1.4以上版本, 可移植的系统库,来编译安装
2.编译安装以上版本,安装apr-1.4只需要指定安装目录即可
3.编译安装apr-util-1.4以上版本,需要增加 –with-apr=(apr的安装目录)
4.然后就可以痛快的安装httpd2.4了,可能需要开启指定的功能
1 2.4 新建虚拟主机 以及中心主机需要对网页目录进行显示授权
Require all granted #每个虚拟主机需要添加显示授权
2 2.4上新建基于域名的虚拟主机的时候不需要指定
NameVirtualHost 172.18.100.67:80 #可以不需要指定这些
3 持久连接支持毫秒级别
KeepAlive On #默认没有,需要手动在结尾添加
KeepAliveTimeout 30ms
MaxKeepAliveRequests 20
cookie 客户端标识用户的身份
session 服务器端标识用户的身份
session共享
1 保存共享存储 NFS 共享文件系统
2 保存到数据库中 MySQL中
3 保存到cookie中
4 保存到内存数据库中(memcached redis) 目前流行的
原创文章,作者:shewei,如若转载,请注明出处:http://www.178linux.com/73794