linux服务基础(二)之httpd2.2基础配置
一、安装httpd服务
CentOS6 默认安装httpd2.2版本
CentOS7 默认安装httpd2.4版本
# yum install httpd
二、安装后相关文件说明
配置文件:
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf
服务脚本:
/etc/rc.d/init.d/httpd
脚本的配置文件:/etc/sysconfig/httpd
主程序文件:
/usr/sbin/httpd
/usr/sbin/httpd.event
/usr/sbin/httpd.worker
日志文件目录:
/var/log/httpd
access_log: 访问日志
error_log:错误日志
站点文档目录:
/var/www/html
模块文件路径:
/usr/lib64/httpd/modules
三、常用配置
打开主配置文件:
vim /etc/httpd/conf/httpd.conf
1. 修改监听的IP和Port
Listen [IP:]PORT
省略ip表示监听所有ip,listen可重复出现多次
实例:
# Listen 80
# Listen 192.168.1.103:8080
2. 持久连接
Persistent Connection: 每个连接获取资源完成后不会断开连接,而是继续等待其他的请求完成
如何断开?
数量限制: 默认100
时间限制: 可配置
缺陷: 对并发访问量较大的服务器,持久连接功能会使有些连接得不到响应
折中解决办法: 使用较短的持久连接时间
Note: httpd-2.4版本支持毫秒级持久时间
开启或关闭持久连接:
KeepAlive On|Off //打开或关闭持久连接
MaxKeepAliveRequests # //最大持久连接数
KeepAliveTimeout # //持久连接超时时长
实例:
# telnet 102.168.1.103 80
# GET / HTTP/1.1
# Host: 192.168.1.103
3. MPM
Multipath Process Module: 多道处理模块
有三种模型:
prefork: 多进程模型,每个进程响应一个请求
一个主进程:负责生成n个子进程,子进程也称为工作进程,每个子进程处理一个用户请求,即便没有用户请求,也会预先生成多个空闲进程,随时等待请求到达;最大不超过1024个
worker: 多线程模型(多进程生成,一个进程生成多个线程),每个线程响应一个请求
event: 事件驱动模型,一个线程响应多个请求
查看静态编译的模块
# httpd -l
查看静态编译及动态装载的模块
# httpd -M
更换使用的httpd程序
# vim /etc/sysconfig/httpd
# HTTPD=/usr/sbin/httpd.worker
重启服务生效
prefork的配置:
<IfModule prefork.c>
StartServers 8 # 服务启动时启动多少个进程
MinSpareServers 5 # 最少空闲进程数
MaxSpareServers 20 # 最大空闲进程数
ServerLimit 256 # 为maxclients所准备的在其服务器生命周期内所允许的最大值,进程数量最大值
MaxClients 256 # 服务器端最多允许启动多少个进程,也即是服务器端最多允许多少个客户端同时请求资源
MaxRequestsPerChild 4000 # 一个进程最多响应多少次的请求
</IfModule>
worker的配置:
<IfModule worker.c>
StartServers 4 # 服务器启动时启动多少个进程
MaxClients 300 # 服务器端启动的最大线程数
MinSpareThreads 25 # 最少空闲线程数
MaxSpareThreads 75 # 最大空闲线程数
ThreadsPerChild 25 # 每个进程所能够启动的线程数
MaxRequestsPerChild 0 # 每个线程所能够响应的最大请求数量,0表示不受限制
</IfModule>
4. DSO 动态共享对象,支持模块动态装卸载
LoadModule <mod_name> <mod_path>
/etc/httpd/modules --> /usr/lib64/httpd/modules
5. 定义'Main' server的文档页面路径
DocumentRoot指向的路径为URL路径的起始位置
DocumentRoot "/var/www/html"
实例: 主配置文件中修改:
# DocumentRoot "/www/htdocs"
# Directory "/www/htdocs">
6. 站点访问控制
可基于两种类型的路径指明对那些资源进行访问控制
文件系统路径:
<Directory ""></Directory> 对目录中所有文件控制
<File ""></File> 对单个文件控制
<FileMatch ""></FileMatch> 对模式匹配的文件进行控制,最好不用
URL路径:
<Location ""></Location>
访问控制机制:
基于来源地址
基于账号
7. Directory中基于来源地址实现访问控制
(1)Options
所有可用特性:Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
Indexes: 索引
实例:
默认是由indexes配置,如果在documentroot目录下没有index.html或者index.html.var
访问时会列出文件列表
不启用Indexes: -Indexes
FollowSymlinks: 允许跟踪符号链接文件
实例:
ln -sv /etc/issue /www/htdocs/issue.html
浏览器访问: 192.168.1.103/issue.html可以访问
如果要去掉FollowSymlinks: 前面加个-号
options里面什么选项都不要可以设置为none
(2)基于来源地址的访问控制机制
Order: 检查次序
Order allow,deny: 相当于建立白名单
Order deny,allow: 相当于建立黑名单
Allow from
Deny from
来源地址:
IP
NetAddr
192.168.1
192.168.1.0
192.168.1.0/24
192.168.1.0/255.255.255.0
实例:
Order allow,deny
Deny from 192.168.1.110
Allow from 192.168.1 测试: elinks -dump http://192.168.1.102 //当前主机访问自己是可以的
8. 定义默认主页面
DirectoryIndex index.html index.html.var
9. 日志设定
错误日志:
ErrorLog logs/error_log
日志级别: LogLevel warn
debug, info, notice,warn,error,crit,alert,emerg 默认是warn
访问日志:
CustomLog logs/access_log combined
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
%h: 客户端IP地址
%l: Remote logname (from identd,if supplied), -表示为空 远程登录用户名
%u: Remote user, (from auth; may be bogus if return (%s) is 401); 用户认证时的用户名
%t: Time the request was received (standard english format), 服务器收到请求时的时间
%r: First line of request,请求报文的首行信息(method url version);
%>s: 响应状态码
%b: 响应报文的大小,单位是字节,不包括响应报文首部
%{Referer}i: 请求报文当中”referer“首部的值;当前资源的访问入口,即从哪个页面中的超链接跳转而来
%{User-Agent}i:请求报文当中”User-Agent“首部的值;即发出请求用到的应用程序
日志格式查看:http://httpd.apache.org/docs/trunk/mod/mod_log_config.html#formats
10、路径别名
Alias /URL/ "/PATH/TO/SOMEDIR/"
实例:
当前DocumentRoot /www/htdocs
# mkdir /www/htdocs/bbs -pv
# vim /www/htdocs/web1.html
# mkdir /www/htdocs/forum
# vim /www/htdocs/forum/web2.html
# vim /etc/httpd/conf/httpd.conf
Alias /bbs/ "/forum/"
11、设定默认字符集
# AddDefaultCharset UTF-8
12、基于用户的访问控制
认证质询: 响应码401,拒绝客户端请求,并要求客户端提供账号和密码
认证: 客户端输入账号和密码后再次发送请求;认证通过,则服务器发送响应的资源
认证类型:
basic: 明文
digest: 消息摘要
安全域: 需要用户认证后才能方为的路径
应该通过名称对其进行标识,并用于告知用户认证的原因
basic认证:
1. 定义安全域
<Directory "/www/htdocs/admin">
Options none
AllowOverride none
Authtype Basic
AuthName "Administrator private"
AuthUserFile "/etc/httpd/conf.d/.htpasswd"
Require valid-user
# Require user jerry //只允许jerry用户登录
</Directory>
2. 提供账号和密码存储
使用htpasswd命令进行管理
htpasswd [options] passwordfile username
-c: 自动创建passwordfile,因此,仅在添加第一个用户时使用
-m: md5加密用户密码
-s: sha1加密用户密码
-D:删除指定用户
# htpasswd -c -m /etc/httpd/conf.d/.htpasswd tom
# htpasswd -m /etc/httpd/conf.d/.htpasswd jerry
3. 实现基于组进行认证
# htpasswd -m /etc/httpd/conf.d/.htpasswd alen //添加第三个用户
# vim /etc/httpd/conf.d/.htgroup //创建组文件
webadmin: jerry alen
<Directory "/www/htdocs/admin">
Options none
AllowOverride none
Authtype Basic
AuthName "Administrator private"
AuthUserFile "/etc/httpd/conf.d/.htpasswd"
AuthGroupFile "/etc/httpd/conf.d/.htgroup" //需要提供组文件
Require group webadmin //需要组来进行验证
</Directory>
13、虚拟主机
有三种实现方案:
基于ip: 为每个虚拟主机准备至少一个ip地址
基于port: 为每个虚拟主机准备至少一个专用port
基于hostname: 为每个虚拟主机准备至少一个专用hostname
Note: 一般虚拟主机莫与中心主机混用,所以要使用虚拟主机,先禁用中心主机
每个虚拟主机都有专用配置
<VirtualHost "IP:PORT">
ServerName
DocumentRoot ""
</VirtualHost> ServerAlias 虚拟主机的别名
ErrorLog
CustomLog
<Directory "">
</Directory>
实例1:基于ip实现虚拟主机
1. 先禁用中心主机
# <DocumentRoot>
2. 定义虚拟主机配置
<VirtualHost "192.168.1.102:80">
ServerName web1.alen.com
DocumentRoot "/vhosts/web1/htdocs"
</VirtualHost>
<VirtualHost "192.168.1.107:80">
ServerName web2.alen.com
DocumentRoot "/vhosts/web2/htdocs"
</VirtualHost>
3. 创建目录与文件
# mkdir /vhosts/{web1,web2,web3}/htdocs -pv
# vim /vhosts/web1/htdocs/index.html
# vim /vhosts/web2/htdocs/index.html
4. 测试
添加ip地址: ip addr add 192.168.1.108/24 dev eth0
192.168.1.102
192.168.1.108
基于port实现虚拟主机
1. 监听的端口打开
Listen 80
Listen 8080
2. 虚拟主机配置增加一行:
<VirtualHost "192.168.1.104:8080">
ServerName web3.alen.com
DocumentRoot "/vhosts/web3/htdocs"
</VirtualHost>
3. 给web3添加页面
4. 测试页面
192.168.1.104:80
192.168.1.104:8080
基于主机名实现虚拟主机
1. 虚拟主机配置
<VirtualHost 192.168.1.102:80>
ServerName web1.alen.com
DocumentRoot "/vhosts/web1/htdocs"
</VirtualHost>
<VirtualHost 192.168.1.102:80>
ServerName web2.alen.com
DocumentRoot "/vhosts/web2/htdocs"
</VirtualHost>
<VirtualHost 192.168.1.102:80>
ServerName web3.alen.com
DocumentRoot "/vhosts/web3/htdocs"
</VirtualHost>
2. 开启基于主机名的虚拟主机
NameVirtualHost 192.168.1.102:80
3. 测试
curl web1.alen.com
curl web2.alen.com
curl web3.alen.com
14、 内置的status页面
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 192.168.1
</Location>
#ExtendedStatus On //打开查看更详细的status信息
15、curl命令
curl是基于URL语法在命令行方式下工作的文件传输工具,它支持FTP,FTPS,HTTP,HTTPS,GOPHER,TELNET,DICT,FILE及LDAP等协议。curl支持HTTPS认证,
并且支持HTTP的POST、PUT等方法,FTP上传,kerberos认证,HTTP上传,代理服务器,cookies,用户名/密码认证,
下载文件断点续传,上载文件断点续传,httpd代理服务器管道(proxy tunneling),甚至它还支持ipv6 socks5代理服务器,
通过http代理服务器上传文件到FTP服务器等等,功能十分强大。
curl [options] [URL...]
curl的常用选项:
-A/--user-agent <string> 设置用户代理发送给服务器 实例: curl -A 'IE11' web1.magedu.com: 把自己伪装成ie浏览器进行访问
-basic 使用HTTP基本认证
--tcp-nodelay 使用TCP_NODELAY选项
-e/--referer <URL> 来源网址 实例: curl -e "www.baidu.com" web1.magedu.com: 设置来源网址为
--cacert <file> CA证书 (SSL)
--compressed 要求返回时压缩的格式
-H/--header <line> 自定义首部信息传递给服务器
-I/--head 只显示响应报文首部信息 实例: curl -I web1.magedu.com: 只显示head首部信息
--limit-rate <rate> 设置传输速率
-u/--user <user[:password]> 设置服务器的用户和密码
-0/--http1.0 使用HTTP 1.0 另一个工具: elinks [options] URL
-dump: 不进入交互模式,而直接将URL的内容输出至标准输出
16、使用mod_deflate模块压缩页面优化传输速率
适用场景:
1. 节约带宽,额外消耗cpu,同时,可能有些较老浏览器不支持
2. 压缩适用于压缩的资源,例如文本文件
实例: 打开deflate模块,然后加入下面代码 SetOutputFilter DEFLATE # mod_deflate configuration # Restrict compression to these MIME types
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/css # Level of compression (Highest 9 - Lowest 1)
DeflateCompressionLevel 9 # Netscape 4.x has some problems
BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip # MSIE masquerades as Netscape, but it is fine
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
17、https
SSL会话的简化过程
1. 客户端发送可供选择的加密方式,并向服务器请求证书
2. 服务器端发送证书以及选定的加密方式给客户端
3.客户端取得证书并进行证书验证
如果信任服务器给其发的CA证书:
a. 验证证书来源的合法性;用CA的公钥解密证书上数字签名
b. 验证证书的内容的合法性;完整性验证
c. 检查证书的有效期限
d. 检查证书是否被吊销
e. 证书中拥有者的名字,与访问的目标主机要一致 4. 客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,完成密钥交换
5. 服务器用此对称密钥加密用户请求的资源,响应给客户端 注意: SSL会话是基于IP地址创建;所以单IP的主机上,仅可以使用一个https虚拟主机
配置httpd支持https:
1. 为服务器申请数字证书
测试: 通过私建CA发证书
a.创建私有CA
b.在服务器创建证书签署请求
c.CA签证
2. 配置httpd支持使用ssl,及使用的证书
# yum -y install mod_ssl
配置文件: /etc/httpd/conf.d/ssl.conf
DocumetRoot
ServerName
SSLCertificateFile
SSLCertificateKeyFile
3. 测试基于https访问相应的主机
# openssl s_client [-connect host:port] [-cert filename] [-CApath directory][-CAfile filename]
实例:
1. 先创建私有CA
server: 192.168.1.121
client: 192.168.1.103 server:
# cd /etc/pki/CA
# touch index.txt
# echo 01 > serial
# (umask 077;openssl genrsa -out private/cakey.pem 2048) :ca生成私钥
# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 7300 :自签证书 client:
# (umask 077;openssl genrsa -out httpd.key 1024) :client生成私钥
# openssl req -new -key httpd.key -out httpd.csr : 证书申请
# scp httpd.csr root@192.168.1.121:/tmp 然后 服务器端签证书
# openssl ca -in /tmp/httpd.csr -out certs/web1.magedu.com.crt -days 365 : ca签证
# scp certs/web1.magedu.com.crt 192.168.1.103:/etc/httpd/ssl :传给客户端 2. http设置
httpd -M | grep ssl : 检测ssl模块有没有装载
yum install mod_ssl cd /etc/httpd/conf.d/ssl.conf
<VirtualHost *:443> 默认ip去掉改为*
SSLCertificateFile /etc/httpd/ssl/httpd.crt :httpd 证书存放位置
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key : httpd私钥 DocumentRoot "/var/www/html"
ServerName web1.alen.com 3.测试:
# openssl s_client [-connect host:port] [-cert filename] [-CApath directory] [-CAfile filename] 192.168.1.121测试103: openssl s_client -connect 192.168.1.103:443 -CAfile /etc/pki/CA/cacert.pem 浏览器测试: https://192.168.1.103:443
# 需要导入CA证书
18. httpd自带的工具程序
htpasswd: basic 认证基于文件实现时,用到的账号密码文件生成工具
apachectl: httpd自带的服务控制脚本,支持start,stop
apxs: 由httpd-devel 包提供,扩展httpd使用第三方模块的工具
rotatelogs:日志滚动工具:
access.log -->
access.log, access.1.log
access.log, access.1.log, access.2.log
suexec:
访问某些有特殊权限配置的资源时,临时切换至指定用户运行
ab: apache benchmark
19、http压力测试工具
ab、 wrbbench、http_load、
jmeter、loadrunner
tcpcopy
ab [OPTIONS] URL
-n: 总的请求
-c: 模拟的并发数
-k: 以持久连接模式测试
ulimit -n #: 调整当前用户所同时打开的文件数
linux服务基础(二)之httpd2.2基础配置的更多相关文章
- Linux学习之二十一-shell编程基础
Shell编程基础 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言.Shell 是指一种应用程序,这个应用程序提供了一个 ...
- linux学习笔记二:三种网络配置
本文引用自:https://www.linuxidc.com/Linux/2017-05/144370.htm [linux公社] VMware为我们提供了三种网络工作模式,它们分别是:Bridged ...
- Bootstrap <基础二十九>面板(Panels)
Bootstrap 面板(Panels).面板组件用于把 DOM 组件插入到一个盒子中.创建一个基本的面板,只需要向 <div> 元素添加 class .panel 和 class .pa ...
- Bootstrap <基础二十八>列表组
列表组.列表组件用于以列表形式呈现复杂的和自定义的内容.创建一个基本的列表组的步骤如下: 向元素 <ul> 添加 class .list-group. 向 <li> 添加 cl ...
- Bootstrap<基础二十七> 多媒体对象(Media Object)
Bootstrap 中的多媒体对象(Media Object).这些抽象的对象样式用于创建各种类型的组件(比如:博客评论),我们可以在组件中使用图文混排,图像可以左对齐或者右对齐.媒体对象可以用更少的 ...
- Bootstrap <基础二十六>进度条
Bootstrap 进度条.在本教程中,你将看到如何使用 Bootstrap 创建加载.重定向或动作状态的进度条. Bootstrap 进度条使用 CSS3 过渡和动画来获得该效果.Internet ...
- Bootstrap <基础二十五>警告(Alerts)
警告(Alerts)以及 Bootstrap 所提供的用于警告的 class.警告(Alerts)向用户提供了一种定义消息样式的方式.它们为典型的用户操作提供了上下文信息反馈. 您可以为警告框添加一个 ...
- Bootstrap<基础二十四> 缩略图
Bootstrap 缩略图.大多数站点都需要在网格中布局图像.视频.文本等.Bootstrap 通过缩略图为此提供了一种简便的方式.使用 Bootstrap 创建缩略图的步骤如下: 在图像周围添加带有 ...
- Bootstrap <基础二十三>页面标题(Page Header)
页面标题(Page Header)是个不错的功能,它会在网页标题四周添加适当的间距.当一个网页中有多个标题且每个标题之间需要添加一定的间距时,页面标题这个功能就显得特别有用.如需使用页面标题(Page ...
随机推荐
- wpf 获取Image的图片并保存到本地
XMAL代码如下: <Image Name="ImageToSave" Source="Images/pic_bg.png" Grid.RowSpan=& ...
- Elasticsearch学习笔记(十四)relevance score相关性评分的计算(1)
一.多shard场景下relevance score不准确问题 1.问题描述: 多个shard下,如果每个shard包含指定搜索条件的document数量不均匀的情况下, ...
- mysql自动更新时间
ALTER TABLE sys_user MODIFY COLUMN update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDAT ...
- ES6的Proxy和Reflect
Proxy 有一个原始的数据对象,通过代理出来一个新的对象,用户操作的是这个新的对象 { let obj ={ time:'2018-01-01', name:'lx' , _r:123 } let ...
- 意外的php之学习笔记
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/gc_gongchao/article/details/37312039 什么是php? ph ...
- 学号20175313 《实现Linux下od -tx -tc XXX的功能》第九周
目录 MyOD 一.题目要求 二.题目理解 三.需求分析 四.设计思路 五.代码链接 六.代码实现过程中遇到的问题 七.运行结果截图 八.参考资料 MyOD 一.题目要求 编写MyOD.java 用j ...
- Redis Sentinel实现的机制与原理详解
序言 Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案.实际上这意味着你可以使用Sentinel模式创建一个可以不用人为干预而应对各种故障的Redis部署. 它的主要功能有以 ...
- 自己写的一些公共js方法
/* 说明文件:这里用的都是es6的语法 导入导出,拿vue举个栗子,你只需要在用到的地方,按需要导入就行了,然后在mounted中直接可以拿来用 比如下面的手机****方法,在需要用到的地方impo ...
- PHP fwrite 函数:将字符串写入文件(追加与换行)
PHP fwrite() fwrite() 函数用于向文件写入字符串,成功返回写入的字符数,否则返回 FALSE . 语法: int fwrite( resource handle, string s ...
- ELK实时日志分析平台环境部署
为什么要用到ELK一般我们需要进行日志分析场景是:直接在日志文件中 grep.awk 就可以获得自己想要的信息.但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档.文本搜索太慢怎么办 ...