一、什么是web
web是一种超文本信息系统,其主要实现方式是超文本链接,它使得文本不再像一本书那样是固定的、线性的,而是可以从一个位置跳转到另一个位置。
二、web服务器的一般配置文件CenTos6.5
配置文件:
/etc/httpd/conf/httpd.conf
服务脚本:
/etc/rc.d/init.d/httpd
脚本配置文件:
/etc/sysconfig/httpd
模块目录:
/etc/httpd/modules :连接文件
/usr/lib64/httpd/modules
主程序:
/usr/sbin/httpd :prefork
/usr/sbin/httpd.event :event
/usr/sbin/httpd.eorker :worker
日志文件目录:
/var/log/httpd
access_log : 访问日志
error_log : 错误日志
站点文档目录:
/var/www/html/
三、http状态码
1XX: 信息性状态码
2XX: 成功状态码
200: OK
201: CREATED
3XX: 重定向类的状态码
301: Moved Permanently ,永久重定向
302: Found,临时重定向,会在响应报文中收到一条伪响应
304: Not Modified
4XX:客户端类错误
403: Forbidden
404: Not Found
405: Method Not Allowed
5XX: 服务器类错误
500: Imternal Server Error ,服务器内部错误
502: Bad Gateway,代理服务器从上游服务器收到一条伪响应
503: Service Unavailable,服务暂时不可用
四、httpd的特性
高度模块化:core + modules
DSO:Dynamic Shared Object
MPM: Multipath Processing Module
统称事实上有多个实现:
prefork :每个进程响应一个用户请求,预先生成多个空闲进程
select():1024
worker:启动多个进程,每个进程生成多个线程,每个线程响应一个客户请求
event:启动多个线程,每个线程响应 N 个请求
event-driven:事件驱动
五、httpd的配置文件说明
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
此指令可重复指定多次
4、DSO机制装载的模块
显示:
httpd -D DUMP_MODULES
LoadModule Module_Name /path/to/Module_File
5、指定站点根目录
DocumentRoot "/path/to/somewhere"
6、站点路径访问控制
基于本地文件系统路径:
<Directory /path/to/somewherr>
</Directory>
基于URL访问路径做访问控制
<Location /path/to/URL>
</Location>
7、于Directory中可用的访问控制
1.Options
Indexes:当访问的路径下默认的主页面,将所有资源以列表的
方式呈献给用户,危险!!慎用!!!
FollowSymlinks :跳跃符号链接
2. AllowOverride
支持在每个页面目录下创建
htaccess用于实现对此目录中资源访问时的访问控制功能
8、基于IP做访问控制
Order allow,deny
Deny from 192.168.1.122
Allow from 192.168.1.1/24
即只有192.168.1.122不能访问,其他能访问
9、 定义默认的主页面
DirectoryIndex
10、配置日志功能
ErrorLog "/path/to/error_log"
LogLevel {debug|info|notice|warn|error|crit|alert|emerg}
LogFormat
CustomLog "/path/to/access_log" LogFormat_Name
%h: 客户端地址
%l: 远程登录名,通常为-
%u: 认证时输入用户名,没有认证时为-
%t: 服务器收到 用户请求时的时间
%r:请求报名的起始行
%>s: 响应状态码
%b: 响应报文的长度,单位是字节
%{HEADER_NAME}i: 记录指定首部对应的值
11、路径别名
站点根目录:/var/www/html
实现URL路径的映射,从而所访问的资源不再依赖于站点根目录
Alias /URL/path/to/somewhere/
12、设定默认字符集
ASCII
字符集:GB2312,GB18030,GBK
AddDefaultCharset
13、CGI脚本
/var/www/cgi-bin/
14、基于用户访问控制
用户认证
基本认证:Basic
摘要认证:digest
虚拟用户:仅用于访问某服务器或获取某资源的凭证;
authentication provider:帐号和密码的存储机制;
authorization provider:授权
案例:基于文件做访问控制
(1) 基于用户进行认证
<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>
Require valid-user: 文件中所有用户均可访问
Require user USERNAME, ...
(2) 提供认证文件
htpasswd
-c: 如果此文件事先不存在,则创建;注意,只能在
创建第一个用户时使用
-m:以md5的格式编码存储用户的密码信息
-D:删除指定用户
(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
Require group GROUP_NAME
</Directory>
组文件:
组名:user1 user2 user3
15、虚拟主机
基于端口
基于IP
基于主机名
注意:使用虚拟主机时 注释主服务器的站点跟路径指定:DocumentRoot
虚拟主机基本配置
NameVirtualHost IP:PORT
<VirtualHost IP:PORT>
ServerName
DocumentRoot
ServerAlias
ErrorLog
CustomLog
</VirtualHost>
配置文件语法检查
httpd -t
service httpd configtest
使用本机测试可以使用 elinks
-dump :获取到页面数据后直接退出进程
elinks -dump 【ip】
16、https协议
ssl(安全的套接字层),tls(传输层安全)
http协议:文本编辑
验证:使用telent发请求
telent 192.168.1.118
httpd: ssl
ssl模块
单独成包
ssl会话基于IP地址创建,所以,每一个IP仅创建一个SSL会话;
ssl握手要完成的工作:
交换协议版本号
选择双方都支持的加密方式
客户端对服务器端实现身份验正
密钥交换
https协议: 基于SSL二进制编码, 443/tcp
openssl s_client
客户端验正服务器端证书:
有效性检测:证书是否仍然在有效期内
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
(3) 配置使用https的虚拟主机;
SSLCertificateFile
SSLCertificateKeyFile
<VirtualHost 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内部表示形式;一般每
种文件类型都有其隐式处理器
18、 curl命令
curl是基于URL语法在命令行方式下工作的文件传输工具,它支持FTP,
FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE及LDAP等协议。curl支
持HTTPS认证,并且支持HTTP的POST、PUT等方法, FTP上传, kerberos认证,
HTTP上传,代理服务器, cookies, 用户名/密码认证, 下载文件断点续传,
上载文件断点续传,,http代理服务器管道( proxy tunneling), 甚至它还
支持IPv6, socks5代理服务器,,通过http代理服务器上传文件到FTP服务器
等等,功能十分强大。
curl的常用选项:
-A/--user-agent <string> 设置用户代理发送给服务器
-basic 使用HTTP基本认证
--tcp-nodelay 使用TCP_NODELAY选项
-e/--referer <URL> 来源网址
--cacert <file> CA证书 (SSL)
--compressed 要求返回是压缩的格式
-H/--header <line>自定义头信息传递给服务器
-I/--head 只显示响应报文首部信息
--limit-rate <rate> 设置传输速度
-u/--user <user[:password]>设置服务器的用户和密码
-0/--http1.0 使用HTTP 1.0
19、使用mod_defalate模块压缩也没优化传输速度
SetOutputFilter
# mod_deflate configuration
# Restrict compression to these MIME types
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/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
20、httpd程序包自带的工具介绍
httpd:apache服务器程序
-t:测试配置文件
-l:列表静态模块
-D DUMP_MODULES:列出DSO模块
-D DUMP_VHOSTS:列出所有虚拟主机
htpasswd:
为基于文件的basic认证创建和更新用户认证文件
apachectl:
脚本,httpd服务控制工具
ab: apache benchmark
httpd的基准性能测试工具;
apxs:
httpd得以扩展使用第三方模块的工具;
htcacheclean:
磁盘缓存清理工具;
htdigest:
为digest认证创建和更新用户认证文件
httxt2dbm:
为rewrite map创建dbm格式的文件
rotatelogs:
不关闭httpd而切换其使用日志文件的工具
access_log, access_log.1, access_log.2,
suexec:
User apache
Group apache
当httpd进程需要以另外的用户的身份去访问某些资源时,
可以以suexec作临时切换;
21、ab工具的初步使用
同类工具:http_load, webbench, seige
Usage: ab [options] [http[s]://]hostname[:port]/path
-c #: 模拟的并发数;
-n #: 总的请求数
-n的值一定要大于等于-c的值;
22、资源限定
软限定:可临时超出一定时长的上限
硬限定:绝对不可超出的上限
管理员可使用ulimit命令临时性地修改各种资源的软限制;
ulimit -n #:能同时打开的文件数
-u #: 能同时启动的进程数
配置文件:
/etc/security/limits.conf
/etc/security/limits.d/*.conf
六、web服务器编译安装
1、检查依赖关系并安装相关软件包
必安装"Development tools" "Development tools"
pcre-devel-7.8-6.el6.x86_64
pcre-7.8-6.el6.x86_64
pcre-static-7.8-6.el6.x86_64
apr-1.5.1.tar.bz2
apr-util-1.5.3.tar.bz
下载地址:http://archive.apache.org/dist/apr/
http://mirrors.cnnic.cn/apache//httpd/
2、编译安装
[root@90sec apr-1.5.1]# tar xf apr-1.5.1.tar.bz2 -C /usr/src/
[root@90sec apr-1.5.1]# cd /usr/src/apr-1.5.1/
[root@90sec apr-1.5.1]# ./configure --prefix=/usr/local/apr
[root@90sec apr-1.5.1]# make && make install
[root@90sec apr-util-1.5.3]# tar xf apr-util-1.5.3.tar.bz2 -C /usr/src/
[root@90sec apr-util-1.5.3]# cd /usr/src/apr-util-1.5.3/
[root@90sec apr-util-1.5.3]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@90sec apr-util-1.5.3]# make && make install
[root@90sec httpd-2.4.10]# tar xf httpd-2.4.10.tar.bz2 -C /usr/src/
[root@90sec httpd-2.4.10]# cd usr/src/httpd-2.4.10/
[root@90sec httpd-2.4.10]# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --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
[root@90sec httpd-2.4.10]# make && make install
编译参数说明:
--prefix=/usr/local/apache:指定安装路径
--sysconfdir=/etc/httpd24:指定配置文件存放位置
--enable-so:允许运行时加载DSO模块
--enable-ssl: 提供对安全套接字层(SSL)和传输层安全(TLS)协议实现高强度加密传输
--enable-cgi:提供对CGI脚本执行的支持
--enable-rewrite:支持重写
--with-zlib:是支持zlib库
--with-pcre:启用正则表达式
--with-apr=/usr/local/apr:如果你想使用一个已经存在的APR ,就必须在这里
指定apr-config脚本的路径。
--with-apr-util=/usr/local/apr-util/:如果你想使用一个已经存在的APU ,就必须在
这里指定apu-config脚本的路径。
--enable-modules=most:启用大多数常用模块。
--enable-mpms-shared=all:启用MPM支持的所有模式。
--with-mpm=event:设置默认MPM为event。
编写二进制启动程序
[root@90sec httpd-2.4.10]# vim /etc/profile.d/htttp.sh
export
PATH=
/usr/local/apache/bin
:$PATH
[root@90sec httpd-2.4.10]# source /etc/profile.d/htttp.sh
[root@90sec httpd-2.4.10]# apachectl 启动web服务
查看
测试
七、设置基于用户认证和授权
1、创建访问目录并编辑配置文件
[root@90sec /]# mkdir /usr/local/apache/htdocs/test
[root@90sec /]# vim /etc/httpd/httpd.conf
2、创建认证口令并添加用户
3、重启服务
4、客户端测试
八、基于https的配置
1、安装mod_ssl模块
[root@90sec ~]# yum -y install mod_ssl
[root@90sec ~]# rpm -ql mod_ssl
2、创建CA,并生成自签证书
3、为web服务生成私钥,并为其提供证书
4、修改配置文件
[root@90sec httpd]# vim /etc/httpd/conf.d/ssl.conf
修改本地host文件
客户端测试
把证书导入客户端
九、基于域名的虚拟主机
1、需要用到的文件提前创建好并修改配置文件
配置前执行
[root@90sec http]# setenforce 0
[root@90sec http]# iptables -F
[root@90sec http]# service iptables stop
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
[root@90sec ~]# vim /etc/httpd/conf/httpd.conf
#DocumentRoot "/var/www/html" 注释掉
2、重启服务,客户端测试
本文出自 “断了的军刀” 博客,请务必保留此出处http://90sec.blog.51cto.com/7404127/1538207