标签:http
TCP/IP协议
用来实现主机间通讯
TCP/IP协议不同的端口PORT
用来实现主机上不同的进程(及应用)的交互,
如:http ftpstmp https ssh 分别对应的端口是 80 21 25 443 22端口
ss-tnl
查看本机都开了一些什么服务,或者说什么应用,不同的服务对应各自的端口
ps aux
查看进程
web页面由多个资源组成
http:超文本传输协议;传输的就是html超文本文件
html:超文本标识语言;html写出来的就是超文本
每一个资源都要进程一次完整的http事务,即请求<-->响应
URL:每一个资源的唯一标识,用于描述服务器上某特定资源的位置
DocumentRoot
将放web资源的目录映射为根,
web服务器上想开启http服务,需要安装httpd软件包,httpd是http协议的的主程序。它主要功能是建立处理请求的子进程或线程的池,httpd不应该被直接调用,而应该由 apachectl 调用
httpd支持 MPM DSO 是什么概念
DSO是功能模块化动态装载和卸载
MPM多路处理模块;的种类,主要定义我们的httpd是基于何种并发模型,来响应大容量的用户请求的
prefork
主进程,子进程
worker
主进程,子进程,线程
event
C6上httpd-2.2: event为测试模型;
MPM 不支持DSO机制;
C7上httpd-2.4: MPM 支持DSO机制;
C6和C7 怎么切换MPM模式
C6
/etc/sysconfig/httpd
HTTPD=/usr/sbin/httpd|httpd.worker|httpd.event(全部注释的状态,默认是httpd即prefork模式的)
C7
/etc/httpd/conf.modules.d/00-mpm.conf
修改这一行:LoadModulempm_MPMNAME_module modules/..
查看httpd程序的模块列表:
查看静态编译的模块:
httpd-l(httpd.worker -l)
查看编译的所有模块:
httpd-M(httpd.worker -M)
(static)表示静态的编译进程序内的
(shared)表示动态可以自由手动加载卸载的
80,500ms, 256(假设每个网页有80个资源,每个资源响应500ms,httpd设定服务端并发响应数量是256个)512*86400/80=55WPV(每秒512个资源,乘以一天的秒数,除以80个资源,就是每天的pv)
PageView(页面浏览量)
UV:User View (用户流量)
安装httpd,
C6和C7都可以用yuminstall httpd 来安装
/etc/httpd/
/var/www/html
生成的文件在/etc/httpd/{conf,conf.d,log,modules,}
conf中的httpd.conf是主配置文件,conf.d中是一些子配置文件,以及welcome欢迎页
log和modules都是软连接,分别对应/var/log/httpd/..和 /usr/lib64/httpd/..
资源文件路径在/var/www/html(index.html首页)
说明:
C6中/etc/sysconfig/httpd(在这里配置切换httpd的默认主程序文件httpd,httpd.worker,httpd.event)
C7不需要切换,支持动态模块加载
C6开机启动服务 chkconfig httpd on|off
C7开机启动服务 systemctl enable httpd.service
httpd/conf/httpd.conf主配置文件的配置
1、增加监听端口,默认Listen80
可定义多次;
Listen80
Listen8080
Listen172.16.76.100 8080(必须是本机可用的有效地址)
省略IP,表示0.0.0.0;(表示本机上的所有有效IP地址)
2、是否开启持久连接,断开条件(数量,时间)
KeepAliveOn|Off(开启或关闭)
MaxKeepAliveRequests100(100次后断开)
KeepAliveTimeout15(15秒后断开,在centos7上可以到毫秒 3、DSO (动态模块装载)
LoadModule指令
LoadModule Mod_Name modules/Module_File.so
关闭的话注释掉就可以了
相对路径,是相对于ServerRoot指令所定义的路径而言;
4、站点资源访问控制(httpd2.2和2.4区别很大,现在讲的是httpd2.2的)
就这样配就OK
<Directory"/var/www/html">
OptionsIndexes FollowSymLinks(可以改为Options None)
AllowOverride None(全部关闭是对的)
Orderallow,deny(Order后面allow和deny谁在前,谁就先生效,这里定义生效顺序的)Allowfrom all
</Directory>
httpd2.2是黑名单机制,如 <Directory"/PATH/TO/SOME_DIR">..... </Directory> 封装的目录是不可以访问的
基于文件系统进行
基于url路径进行
基于文件系统进行
<Directory"/PATH/TO/SOME_DIR">
</Directory>
基于url路径进行
<Location"/PATH/TO/SOME_URL">
</Location>
<LocationMatch"URL_PATTERN">
</LocationMatch>
目录中的常用指令:
(1)Options:用于定义资源的展示方式;后跟以空白字符分隔的“选项”列表;
IndexesIncludes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews None All
Indexes:允许索引;(比较危险,没有主页index时,显示全部)(建议关闭)
FollowSymLinks:允许跟踪符号链接;(如果是软连接,可以访问内容)(建议关闭)
SymLinksifOwnerMatch
ExecCGI:允许执行CGI脚本;(建议关闭)
如果都想关闭,则用配置成 :Options None
(2)AllowOverride
在某一个目录下放一个隐藏文件.htaccesss,此目录就不能被访问了。然而这样会大大的降低服务器性能强烈建议使用:AllowOverrideNone,不启用即可
(3)order和allow/deny from
基于IP地址的访问控制;(因为ip地址可以伪装,所以这种方案是基本无效的,做了解即可)
order用于定义allow和deny的生效次序;
allowfrom IP/NETWORK/FQDN
denyfrom IP/NETWORK/FQDN
来源地址格式:
IP
NetAddr:
172.16
172.16.0.0
172.16.0.0/16
172.16.0.0/255.255.0.0
FQDN
DAMAIN
来源请求遵循最佳匹配法则机制;(最精确匹配的优先生效)
orderallow, deny
5、定义站点主页面:
默认是这样的:DirectoryIndexindex.html index.html.var
默认index.html 多个值的话,自左向右去搜索
6、日志设定
ErrorLoglogs/error_log (错误日志路径)
LogLevelwarn (记录级别)
LogFormat"%h %l %u %t \"%r\" %>s %b \"%{Referer}i\"\"%{User-Agent}i\"" combined
LogFormat"%h %l %u %t \"%r\" %>s %b" common
LogFormat"%{Referer}i -> %U" referer
LogFormat"%{User-agent}i" agent
CustomLoglogs/access_log combined指明路径及日志格式)
格式:
%h Remote host(远程主机)
%l Remote logname (from identd, if supplied).(远程用户登录时的用户名,基本多数情况是空)
%u Remote user (from auth; may be bogus ifreturn status (%s) is 401)(用户名,基本多数情况是空)
%t Time the request was received (standardenglish format)(请求被收到的时间)
%r First line of request(请求报文的首行)
%s Status. For requests that got internallyredirected, this is the status of the *original* request --- %>s for thelast.(收到请求后具体的状态码是什么)
%b Size of response in bytes, excluding HTTPheaders.(响应报文的大小)
%{Foobar}i The contents of Foobar: header line(s)in the request sent to the server.
%{Host}i显示host的值
%{Referer}i本页面是从那个页面的超连接进来的,显示上级页面的值
%{User-Agent}i用户代理,浏览器名称
7、基于用户的访问控制机制(用户登录才可以访问的)
(1)创建账号文件,创建虚拟账号密码(命令htpasswd)
#which htpasswd
/usr/bin/htpasswd
#rpm -qf /usr/bin/htpasswd
httpd-tools-2.2.15-45.el6.centos.x86_64
htpasswd-c -m /etc/httpd/conf/.htpasswd tom 第一个账号有-c的原因是要创建.htpasswd文件,
htpasswd-m /etc/httpd/conf/.htpasswd qiji 第二个账号在.htpasswd中生成
htpasswd[options] /PATH/TO/HT_PASSWD_FILE USERNAME
-c:创建文件;
-m:md5加密密码;
-s:SHA加密密码;
-D:删除指定用户
(2)定义安全域用<Directory "PATH">……</Directory>封装配置
<Directory"/PATH/TO/SOME_DIR">(如“/data/web/admin”)
Options None (选项)
AllowOverrideNone (指令)
AuthTypeBasic (认证类型)
AuthName"SOME_STRING_HERE"(如 For Administrator)
AutuUserFile"/PATH/TO/HT_PASSWD_FILE"(账号密码存放路径)
Requireuser user1 user2 ...(授权给某些用户,或者valid-user所有有效用户)
</Directory>
也可于基于组账号进行认证:
(1)创建用户账号密码文件完成后,还得将用户定义为组(创建组账号文件)
组文件:每行定义一个组
htpasswd-m /etc/httpd/conf/.htpasswd user1 第一个账号在.htpasswd中生成
htpasswd-m /etc/httpd/conf/.htpasswd user2 第二个账号在.htpasswd中生成
vim/etc/httpd/conf/.htgroup 创建组文件
mygrps1:user1 user2 添加用户进组
mygrps2:user3 user4 每一行定义一个组
(2)定义安全域用<Directory "PATH">……</Directory>封装配置
<Directory"/PATH/TO/SOME_DIR">(如/data/web/admin)
Options None (选项)
AllowOverrideNone (指令)
AuthTypeBasic (认证类型)
AuthName"SOME_STRING_HERE"(如 For Administrator)
(这一行必须有) AutuUserFile"/etc/httpd/conf/.htpasswd"(账号密码存放路径)
AutuGroupFile “/etc/httpd/conf/.htgroup”
#Require user user1 user2 ...(授权给某些用户,或者valid-user所有有效用户)
Require group mygrps1 mygrps2...
</Directory>
8、虚拟主机配置
测试403的原因
1、关闭防火墙
C6
serviceiptables stop
chkconfigiptables off
C7
systemctlstop firewalld.service
systemctlenable firewalld.service
2、关闭selinux
vim/etc/selinux/config
改成SELINUX=disabled
C6上 network重启总失败
关闭NetworkManager服务
yum总安装失败
执行 yum cleanall
基于IP的虚拟主机示例:
/etc/httpd/conf/httpd.conf里配置
或新建两个,建议新建
vim/etc/httpd/conf.d/vhost1.conf
vim/etc/httpd/conf.d/vhost1.conf
前提:本机需要配置了用到的所有IP地址;
<VirtualHost172.16.100.71:80>
ServerNamewww1.magedu.com
DocumentRoot/data/vhosts/www1
CustomLoglogs/www1-access_log combined
</VirtualHost>
<VirtualHost172.16.100.72:80>
ServerNamewww2.magedu.com
DocumentRoot/data/vhosts/www2
CustomLoglogs/www1-access_log combined
</VirtualHost>
基于端口的虚拟主机示例:
前提:httpd监听了用到的所有端口;
<VirtualHost172.16.100.71:80>
serverNamewww1.magedu.com
DocumentRoot/data/vhosts/www1
CustomLoglogs/www1-access_log combined
</VirtualHost>
<VirtualHost172.16.100.71:8080>
ServerNamewww2.magedu.com
DocumentRoot/data/vhosts/www2
CustomLoglogs/www1-access_log combined
</VirtualHost>
基于FQDN的虚拟主机示例:
NameVirtualHost172.16.100.71:80
<VirtualHost172.16.100.71:80>
ServerNamewww1.magedu.com
DocumentRoot/data/vhosts/www1
CustomLoglogs/www1-access_log combined
</VirtualHost>
<VirtualHost172.16.100.71:80>
ServerNamewww2.magedu.com
DocumentRoot/data/vhosts/www2
CustomLoglogs/www1-access_log combined
</VirtualHost>
9、status页面
LoadModule status_module modules/mod_status.so
<Location/server-status>
SetHandlerserver-status
Orderallow,deny
Allowfrom 172.16
</Location>
ExtendedStatus{On|Off}
浏览器测试:
http://192.168.1.60/server-status
10、user/group
指定以哪个用户的身份运行httpd服务进程;
主进程是由root运行的,因为80端口必须root身份
子进程用其他用户运行,为了安全
如果出现403,注意要查看html文件的权限是否可读
Userapache
Groupapache
11、https (httpover ssl)
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
DocumentRoot
ServerName
SSLCertificateFile
SSLCertificateKeyFile
(3)测试基于https访问相应的主机;
#openssl s_client [-connect host:port] [-cert filename][-CApath directory] [-CAfile filename]
cookie和curl
服务器在第一次客户端连上来后,会给他一个cookie,以后客户端就自带cookie,如果没有cookie,登录后,访问页面又会出现要求登录
url相当与浏览器中测试一样
http报文格式
首部和body,GET,200,403,404,referer,user-agent理解
获得、引用页地址、浏览器
httpd服务器上线之前做压力测试,检测最大并发数,生成环境,别测,带宽会占满
ab-c 100 -n 4000 http://www.mageedu.com/index.html(默认主页也不能省略)
配置环境:
/etc/httpd/conf/httpd.conf
模块配置文件:/etc/httpd/conf.modules.d/*.conf
分段配置文件:/etc/httpd/conf.d/*.conf
特有配置:
(1)切换MPM;
编辑配置文件/etc/httpd/conf.modules.d/00-mpm.conf
修改这一行:LoadModulempm_MPMNAME_module modules/..
(2)基于IP地址的访问控制
统一使用Require指令进行,不再支持使用allow,deny等;
允许所有主机访问:Requireall granted
拒绝所有主机访问:Requireall denied
<RequireAll>
Requireip 172.16.100.67
Requireall denied
</RequireAll>
控制特定的客户端IP地址访问:
Requireip IPADDR:授权
Requirenot ip IPADDR:拒绝
控制特定的主机名访问:
Requirehost HOSTNAME
Requirenot host HOSTNAME
HOSTNAME:
FQDN:单个主机名
domain.tld:域名内的所有主机
(3)虚拟主机
基于FQDN的虚拟主机不再需要专门的指令NameVirtualHost;
PHP在C6和C7的安装
在httpd是prefork的前提下
C6C7 都是执行 yum install php 即可
php作为httpd的模块,只需执行servicehttpd reload 重启加载php即可生效
配置文件:
/etc/php.ini,/etc/php.d/*.ini
测试页(首页)的更改
将原来的index.html----->index.php
PHP连接mysql的安装
yuminstall php-mysql
LAMP一步到位安装
CentOS6:
#yum install httpd php php-mysql mysql-server
#service mysqld start
#service httpd start
CentOS7:
#yum install httpd php php-mysql mariadb-server
#systemctl start mariadb.service httpd.service
php有许多组件之包,但是php-fpm不是他的之包,想安装php-fpm必须先把php卸载
systemctl stop httpd.service
rpm -e php
yum install php-fpm
安装php-fpm:后,配置httpd:
ProxyRequestsOff
ProxyPassMatch
DirectoryIndexindex.php
标签:http
原文地址:http://11650350.blog.51cto.com/11640350/1827667