http的服务的配置文件各参数意思
1、持久连接
KeepAlive {On|Off} 是否启动持久连接,
MaxKeepAliveRequests 100 使用持久连接最大的请求个数
KeepAliveTimeout 15 使用持久连接超时时间,过长或过短都不利于系统资源的节省
启用持久连接的优点,可以减少进程的创建和删除,节省系统资源;但是不一定需要请求持久连接,
对于非常繁忙的网站可能不能节省资源
2、MPM参数:
<IfModule prefork.c>
StartServers 8 服务启动时启动的空闲进程数
MinSpareServers 5 任何时候保持的最小空闲进程数
MaxSpareServers 20 最大空闲进程数,不能小于服务器启动进程数
ServerLimit 256 在服务的生命周期内能并发接受的客户数
MaxClients 256 同时响应客户的最大值
MaxRequestsPerChild 4000 每个子进程最多允许接受多少各请求
</IfModule> 表示主程序参数的容器
<IfModule worker.c>
StartServers 4
MaxClients 300 最大的并发用户请求
MinSpareThreads 25 最小空闲线程
MaxSpareThreads 75 最好空闲线程
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
3、指定监听的地址和端口
Listen [IP:]PORT 监听的IP地址和端口,IP地址可以省略表示监听所有Ip地址
此指令可以重复出现多次,修改监听端口需要重启服务
4、DSO机制装载的模块
显示:
# httpd -D DUMP_MODULES 显示装载的模块
LoadModule Module_Name /path/to/Module_File
装载模块 模块名称 装载地址
支持动态装卸载,修改配置文件的模块的装载不需重启服务
=============以上为全局配置==========================
ServerAdmin 邮箱地址
当启动服务遇到下面的报错信息时:
第一种办法:启动配置文件中的ServerName [域名] ;此时无论正解或反解是否一直都不会报错,而是直接使用我们给的域名
第二种办法:在文件/etc/resolv.conf中定义主机的IP地址和域名
5、指定站点根目录
DocumentRoot "/path/to/somewhere"可以自己修改指定路径,文件如果不存在会报错
6、站点路径访问控制
基于本地文件系统路径:
<Directory "/path/to/somewhere">
</Directory>
基于URL访问路径做访问控制
<Location "/path/to/URL"> 可以使用正则表达式,但是会影响性能
</Location>
7、于Directory中可用的访问控制
(1) Options 用来定义访问选项:在选项前加-表示不启用,或者直接删除-++++++++++++++++++------
Indexes(索引): 当访问的路径下无默认的主页面,将所有资源以列表形式呈现给用户;危险,慎用;
FollowSymlinks: 跟踪符号链接
(2) AllowOverride {None|All}对资源的访问控制
httpd2.2支持在每个页面目录下创建.htaccess用于实现对此目录中资源访问时的访问控制功能。
8、基于IP做访问控制
Order allow,deny deny:拒绝访问的对像 allow:自己定义访问的对象
Deny from 172.16.100.17 允许的那么对象访问,可以是网段
Allow from 172.16.0.0/16
allow|deny All | IP或网段 | 网络地址
from后面能接受的地址格式:
IP, Network Address
网络地址格式较为灵活:
172.16
172.16.0.0
172.16.0.0/16
172.16.0.0/255.255.0.0
9、定义默认的主页面
DirectoryIndex index.html 。。。
默认加载的主页面,可以有多个,但是有优先级,从前面的开始检索
10、配置日志功能
ErrorLog "/path/to/error_log" 错误日志的路径
LogLevel {debug|info|notice|warn|error|crit|alert|emerg} 日志记录的级别,只记录设定级别以上的(左低又高)
LogFormat
CustomLog "/path/to/access_log" LogFormat_Name 记录用户访问时产生的访问信息
LogFormat_Name 日志信息格式名称
%h: 客户端地址
%l: 远程登录名,通常为-
%u: 认证时输入用户名,没有认证时为-
%t: 服务器收到 用户请求时的时间
%r:请求报名的起始行
%>s: 响应状态码
%b: 响应报文的长度,单位是字节
%{HEADER_NAME}i: 记录指定首部对应的值
**想要保留引号使用反斜杠转义
11、路径别名
站点根目录:/www/html
http://www.magedu.com/p_w_picpaths/logo/new.gif
此文件位置:/www/html/p_w_picpaths/logo/new.gif
实现URL路径的映射,从而所访问的资源不再依赖于站点根目录;
Alias /URL/ "/path/to/somewhere/" 设定路径别名
eg:Alias /ab/ "/www/hssk/ab/" 表示当用户访问ab时直接映射到后面的路径,不会因为根目录是否存在ab目录而改变
===========================================================
定义文件的访问权限的格式
<Directory "本地文件系统路径"> 可以使用~,表示对后面的路径做模式匹配
options Indexes 当指定路径下的默认主页面不存在时,将指定目录的所有资源通过列表的方式列出
AllowOverride
Order Allow,Deny 定义基于IP的访问控制(次序很重要)
</Directory> **注意前门的斜杠不要忘了,不然语法检测时会报错**
12、设定默认字符集
字符集<-- AddDefaultCharset
13、CGi脚本--->动态请求:但是与静态请求的服务器是分开的
动态请i求工作原理:服务器的httpd进程接受到请求后,联系后台的动态去请求处理程序,再由它生成的子进程完成请求的 内容,完成后将进程放回空闲列表(和处理静态请求相似),这种处理动态请求的方式叫做 FastCGI。
FastCGI协议:
CGI脚本路径别名
ScriptAlias /URL/ /path/to/somewhere/ 指定脚本存放路径的别名
使用bash写CGI脚本
所有文本都使用命令输出:echo、printf、cat
执行程序:命令引用
14、基于用户访问控制
用户认证:基本认证(Basic);摘要认证(digest)
虚拟用户:仅用于访问某服务或获取某资源的凭证
文本文件:.htpasswd(一般影藏放置)
SQL数据库
dbm:数据库引擎,提供API 与数据库引擎打交到,不直接访问用户数据文件
ldap:轻量级数据访问协议
authentication provider 客户帐号密码存储的位置
authorization provider 授权
案例:基于文件访问
(1)编辑配置文件/etc/httpd/conf/httpd.conf
<Directory "/var/www/html/admin"> 指定控制访问文件路径
Options none 定义访问权限,不允许访问
AllowOverride AuthConfig 做认证相关的配置
AuthType Basic 使用认证的方式
AuthName "Admin Area." 做认证的原因(随便写入)
#AuthBasicProvider file 指定认证时使用的存储机制
AuthUserFile /etc/httpd/conf/.htpasswd 存储用户帐号和密码信息的位置,需要自己创建
Require valid-user 指定允许登入的用户,这里表示所有用户
</Directory>
Requles user UserName ,指定单个用户
(2)提供认证文件
htpasswd
-c:如果文件不存在则创建;只在需要创建文件时使用
-m:以md5编码存储用户密码信息
-D:删除用户
格式:#htpasswd [options].. /path/to/somewhere USERname 这里不是本地用户是web用户
(3)组认证
<Directory "/var/www/html/admin">
Options none
AllowOverride AuthConfig
AuthType Basic
AuthName "Admin Area."
#AuthBasicProvider file
AuthUserFile /etc/httpd/conf/.htpasswd
AuthGroupFile /etc/httpd/conf/.htgroup 格式: 组名:用户名。。。。。
Requles group Group_NAME
</Directory>
15、虚拟主机:
虚拟主机:不同的虚拟主机使用不同的访问路径
1)基于端口
2)基于IP
3)基于主机名的虚拟主机
(1)使用虚拟主机的前提,取消主服务器
注释主服务器的站点跟路径指定:DocumentRoot
(2)定义虚拟主机
NameVirtualHost IP:PORT:基于名称的虚拟主机 ,并指定监听的IP和端口 (只在2.2上有,在2.4上不需定义)
<VirtualHost IP:PORT> 定义虚拟主机的IP和端口
ServerName 服务名(应该有)
DocumentRoot 根目录 (应该有)
ServerAlias
ErrorLog 错误日志路径
CustomLog 访问日志路径
</VirtualHost>
前面两项需要有,后面三项可以不定义
配置文件语法检查:#httpd -t
(3)测试使用elinks-->文本浏览器
-dump:获取到页面数据后直接退出
格式:#elinks [option] 域名
修改windows的host文件 :格式 IP 域名
16、https协议
http与http对比(转载马哥教育)
ssl(安全的套接字层),tls(传输层安全)
http协议是基于文本编码
使用telnet验证
验正:使用telnet发请求
# telnet 172.16.100.7 80
Trying 172.16.100.7...
Connected to 172.16.100.7.
Escape character is '^]'.
GET /index.html HTTP/1.0
Host: www.b.org
HTTP/1.1 200 OK
Date: Fri, 08 Aug 2014 03:03:51 GMT
Server: Apache/2.2.15 (CentOS)
Last-Modified: Fri, 08 Aug 2014 02:14:52 GMT
ETag: "e0009-12-50014c53e753f"
Accept-Ranges: bytes
Content-Length: 18
Connection: close
Content-Type: text/html; charset=UTF-8
<h1> Host B </h1>
Connection closed by foreign host. 请求结束退出
持久连接的超时是一个请求结束距离下一个请求的的最长时间间隔
httpd:ssl
ssl模块,单独成块,全称-->mod_ssl
ssl会话基于IP地址创建,一个IP仅能创建一个ssl会话
ssl握手要完成的工作:
交换协议版本号
选择双方都支持的加密方式
客户端对服务器端实现身份验正
密钥交换
https协议: 基于SSL二进制编码, 443/tcp
openssl s_client
客户端验正服务器端证书:
有效性检测:证书是否仍然在有效期内
CA的可信度检测:用本地CA的公钥解密证书,验证该证书的可信度检测
证书的完整性检测:用
持有者的身份检测
配置httpd工作于https:
(1) 安装mod_ssl模块
# yum install mod_ssl
(2) 为服务端生成私钥,并为其提供证书;
# mkdir /etc/httpd/ssl && cd /etc/httpd/ssl
# (umask 077; openssl genrsa -out httpd.key 1024)
# openssl req -new -key httpd.key -out httpd.csr
签署后的证书为:/etc/httpd/ssl/httpd.crt
证书生成后需要修改ssl的配置文件,指定公钥和私钥的位置
在客户段安装CA服务器的根证书
********CA的详细使用请看:http://8381039.blog.51cto.com/8371039/1534946
(3) 配置使用https的虚拟主机;
SSLCertificateFile 服务器证书所在的位置
SSLCertificateKeyFile 服务器私钥所在的位置
<VrtualHost IP:443>
DocumentRoot
ServerName
</VirtualHost>
(4) 重新装载配置
(5) 测试
# openssl s_client -connect IP:PORT -CAfile /path/to/ca_certificate
17、status页面
httpd内嵌有handler,其中有一个handler用于输出当前httpd服务相关状态信息
handler: server-status
启用handler要使用SetHandler指令
handler: 当文件被调用时,apache内部表示形式;一般每种文件类型都有其隐式处理器
=============================================================================
http服务的安装和启动
# yum installl httpd
使用#rpm -ql httpd 查看程序的生成的文件
解决上面的问题
编辑配置文件/etc/httpd/conf/http.conf
启动里面的ServerName这一项
修改如下ServerName 192.168.2.24880 IP地址+端口
==============================================================================
()
创建虚拟目录
1.建立虚拟目录
#mkdir -p /date/web/{stu01,stu02}
2. 修改配置文件添加虚拟目录
#echo "Include vmhost/vmhost.conf" >> /etc/httpd/conf/http.conf
3.创建的新设置的配置文件 /etc/httpd/vmhost/vmhost.conf
4.编辑我们设置的虚拟目录的配置文件/etc/httpd/vmhost/vmhost.conf
Alias /stu01 /"/date/web/stu01/" 这里的stu01是对后面路径的映射即使在创建了test01文件也不会访问而是访问执行的路径
<Directory "/date/web/stu01"> 定义文件的位置可以自己指定
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
Alias /stu02/ "/date/web/stu02/"
<Directory "/date/web/stu02">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
5.现在我们需要在指定的目录创建两个文件并编写内容
/date/web/stu01,/date/web/stu02,在两个目录中创建网页文件
6.在浏览器输入我们给定的ip地址就可以了
==========================================================
对进入网站的用户认证和授权
一、对用户授权和认证
1.编辑我们自己创建的配置文件
#vim /etc/httpd/vmhost/vmhost.conf
如果我们想让访问stu01时用户需要进行授权认证才能访问
Alias /stu01 /"/date/web/stu01/"
<Directory "/date/web/stu01">
Options Indexes MultiViews FollowSymLinks
AllowOverride All
AuthType basic
AuthName "welcome zhou"
AuthUserFile /etc/httpd/.httppwd
Require user zhou
</Directory>
Alias /stu02/ "/date/web/stu02/"
<Directory "/date/web/stu02">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
2.创建存储用户帐号和密码的文件,并且为用户创建密码
#htpasswd -c -m /etc/httpd/.htpasswd zhou
使用浏览器访问stu01看属否需要密码验证
格式http://IP/stu01
二、对组进行授权和认证
1.编辑文件 /etc/httpd/vmhost/vmhost.conf添加如下内容
Alias /stu01 /"/date/web/stu01/"
<Directory "/date/web/stu01">
Options Indexes MultiViews FollowSymLinks
AllowOverride All
AuthType basic
AuthName "welcome GroupName" 提示组名
AuthUserFile /etc/httpd/htgroup 存储组信息的文件
Require group GroupName 设置组名
</Directory>
Alias /stu02/ "/date/web/stu02/"
<Directory "/date/web/stu02">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
2.自己编辑存储主信息的文件编辑格式
#GroupNameUserName1 UserName2 。。。。
注意为组添加成员后需要为组内的成员创建密码不然你知道的
htpasswd -m /etc/httpd/.htpasswd UserName
重读配置文件#service httpd reload
使用组内成员的身分访问stu01页面
**我们可以多创建几个用户看非组内成员是否可以访问
=========================================================
创建虚拟主机
一、不同IP地址同一域名和端口
1.修改apache配置文件/etc/httpd/conf/httpd.conf
添加Include vvhost/vvhost.conf
2.创建文件#mkdir /etc/httpd/vvhost/vvhost.conf
编辑我们创建的关于虚拟主机的配置文件
<VirtualHost 192.168.1.120:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot /date/web/stu01
ServerName dummy-host.example.com
ErrorLog /date/log/stu01.error_log
CustomLog /data/log/stu01.access_log combined
</VirtualHost>
<VirtualHost 192.168.1.121:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot /date/web/stu02
ServerName dummy-host.example.com
ErrorLog /date/log/stu02.error_log
CustomLog /date/log/stu02.access_log combined
</VirtualHost>
**其实哦我们也可以不要Errorlog与Customlog这两项
3.创建在编辑虚拟主机配置文件是指定的各种文件
#touch /data/log/stu01.error_logstu02.error_log
#touch /data/log/{stu02.access_log combined,stu01.access_log combined}
4.上面我们配置了两个IP所有我们需要为虚拟主机再添加一个IP地址
方法一#ifconfig eth0:0 192.168.2.248 (临时添加会立即生效,重启后失效)
方法二#cd /etc/sysconfig/network-scripts
#cp ifcfg-eth0 ifcfg-eth0:0
#vim /ifcfg-eth0:0
方法三#setup 进入图形界面添加
**后面两种方法都需要重启服务#service network restart
5.使用浏览器登入访问
注意的是使用19.168.2.248这各IP地址访问是需要我们前面授权了的组和用户
二、同IP地址不同端口号
1. 在配置文件/etc/httpd/vvhost/vvhost.conf中添加监听端口
Listen 80
Listen 8080
2.修改我们上面定义的虚拟主机的配置文件
<VirtualHost 192.168.1.120:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot /date/web/stu01
:ServerName dummy-host.example.com
ErrorLog /date/log/stu01.error_log
CustomLog /data/log/stu01.access_log combined
</VirtualHost>
<VirtualHost 192.168.1.120:8080>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot /date/web/stu02
ServerName dummy-host.example.com
ErrorLog /date/log/stu02.error_log
CustomLog /date/log/stu02.access_log combined
</VirtualHost>
使用#service httpd reload重读配置文件
三、同IP同端口不同域名
这里我们需要用到DNS服务器创建域名可以参考前面关于DNS的文章
连接地址http://8381039.blog.51cto.com/8371039/1536628
1.我们直接在我们前面撞见的虚拟主机配置文件中修改
<VirtualHost 192.168.1.120:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot /data/web/stu01
ServerName www.zhou.com
ErrorLog /date/log/stu01.error_log
CustomLog /date/log/stu01.access_log combined
</VirtualHost>
<VirtualHost 192.168.1.120:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot /date/web/stu02
ServerName www.xiang.com
ErrorLog /date/log/stu02.error_log
CustomLog /data/log/stu02.access_log combined
</VirtualHost>
方法一在我们创建的DNS服务中添加上面的IP地址和域名
方法二直接编辑window中的host文件系统盘下的\Windows\System32\drivers\etc
192.168.2.248 www.zhou.com
192.168.2.248 www.xiang.com
重启服务测试
============================================================
建立基于https协议的httpd服务
1.安装mod_ssl模块
#yum install mod_ssl
2.为服务端生成私钥并为其提供证书
关于证书的原理http://8381039.blog.51cto.com/8371039/1534946
a创建一个CA服务器,并为服务器生成证书
#(umask 077; openssl gensra -out /etc/pki/CA/private/cakey.pem 2048)
#cd /etc/pki/CA
#openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 1000
#cd /etc/httpd && mkdir ssl
#(umask 077; openssl gensra -out ssl/httpd.key 1024 )
#openssl req -new -key ssl/httpd.key -out ssl/httpd.csr
#openssl ca -in /etc/httpd/ssl/httpd.csr -out /etc/httpd/ssl/httpd.crt -days 1000
3.在配置文件中添加一个关于https的配置文件路径
#echo "Include sslhost/sslhost.conf" >> /etc/httpd/conf/httpd.conf
4.创建配置文件并设置
#mkdir /etc/httpd/sslhost/sslhost.conf
在文件中添加如下内容
SSLCertificateFile /etc/httpd/ssl/httpd.crt 服务器证书所在的位置
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key 服务端私钥所在的位置
<VirtualHost 192.168.2.248:443>
DocumentRoot /date/web/stu01
ServerName www.zhou.com
</VirtualHost>
5.我们需要将CA服务器加入到收信任的跟证书办法机构
下载/etc/pki/CA/cacert.pem到本地
求在证书的后缀名为.crt安装证书即可
6.测试https服务是否成功安装
=========================================================================
简单的编译安装
编译环境一、apr
#tar xf apr-*
#./configure --profix=/usr/local/apr
#make && make install
编译环境二、apr-util
#tar xf apr-util*
#./configure --profix=/usr/local/apr-util --with-apr=/usr/local/apr
#make && make install
由于apr-util作为apr的工具使用的,所有我们要将apr的安装路径告诉apr-util
编译安装httpd2.4
编译安装前使#./configure --help 查看具体使用的参数
可能会需要这个程序:(#yum install prec-devel -y)
# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --enable-mpms-shared=all --with-mpm=event --enable-modules=most
# make && make install
为httpd配置环境变量
#vim /etc/profile.d/httpd24.sh
export PATH=/usr/local/apache/bin:$PATH
读取文件
#source /etc/profile.d/httpd24.sh
导出文件的帮助文件(就是在文件/etc/man.config中添加帮助文件的路径就可以了)
echo "MANPATH /usr/local/apache/man" >> /etc/man.config
修改配置文件
#cd /etc/httpd24
编辑httpd配置文件
添加 Alias /manual/ /usr/local/apache/manual
**如果提示有无效命令,进入文件注释掉就可以了(文件路径错误信息或有提示)
启动服务
#apachectl start
查看监听端口:#ss -tnl
在测试的时候可能会存在记录,最好在测试的时候清楚记录
由于本人属于新人,所有有错误的地方请各位大牛指出,谢谢观看!