Linux运维 第三阶段 (六)web相关概念httpd服务及https加密传输配置
一、相关概念:
1、 HTTP/0.9:(Hyper Text Transfer Protocol)超文本传输协议,仅纯文本(超链接),ASCII;核心:HTML(Hyper TextMark Language)超文本标记语言。
2、 HTTP/1.0:引入MIME(Multipurpose Internet Mail Extension)多用途互联网邮件扩展,使互联网走进我们的生活,GET|POST|HEAD|PUT|TRACE|OPTIONS|CONNECTION|DELETE;SMTP(Simple MailTransaction Protocol),纯文本。
注:MIME:将非文本数据在传输前重新编码为文本格式,接收方能够用相反的方式将其重新还原为原来的格式,还能够调用相应的程序来打开此文件。
3、 HTTP/1.1:加强了缓存管理机制;引入了长连接机制(并发连接量大时,后面的客户端将要排队等待有断开的连接然后再与服务器建立连接)。
4、URI(Uniformresource identify)统一资源标识符(全球唯一标识),路径、格式上的统一;
URL(Uniform resourceLocater)统一资源定位符,通常称WEB对象(WEB资源)互联网上的统一表示格式,URI包含URL。
URI格式:protocol://host:port/path/to/file
URL格式:/path/to/file
socket套接字:IP+PORT
5、动态网页:服务器端存储的文档非HTML格式,而是编程语言开发的脚本,脚本接受参数之后在服务器运行一次,运行完成之后会生成HTML格式的文档,把生成的文档发给客户端;动态网页包含动态内容(index.php)和静态内容(index.html,引用N个WEB对象URL),动态内容部分才需执行。
6、HTTP报文:
请求报文语法:<method> <request_URL> <version>
<headers>
空行
<entity-body>
响应报文语法:<version> <status> <reason-phrase>
<headers>
空行
<entity-body>
注:报文的第一行通常称作“起始行”(start line),后面的标签格式的内容称作首部域(header field),每个首部域由名称name和值value组成,中间用逗号分隔,另,响应报文通常还有一个称作body的信息主体,即响应给客户端的内容。
7、状态代码:
1XX:纯信息;
2XX:成功类信息;
3XX:重定向类的信息(301、302、304);
4XX:client-side错误信息(404,请求了不存在的文件,notfound);
5XX:server-side错误信息(进程没启动成功之类的)。
8、WEB服务的主要操作:
I:建立连接:接受或拒绝客户端连接请求;
II:接收请求:通过网络读取HTTP请求报文;
III:处理请求:解析请求报文并作出相应的动作;
IV:访问资源:访问请求资源中相关资源;
V:构建响应:使用正确的首部生成HTTP响应报文;
VI:发送响应:向客户端发送生成的响应报文;
VII:记录日志:将已经完成的HTTP事务记录进日志文件。
9、ASF(apache software foundation)、FSF(free software foundation)、GNU、GPL
10、httpd特性:事先创建进程;按需维护适当的进程;模块设计,核心比较小,各种功能都模块添加,包括PHP;支持运行时配置,支持单独编译模块;支持多种方式的虚拟主机配置;支持HTTPS(mod_ssl);支持用户认证;支持基于主机名的ACL;支持每目录的访问控制;支持URL重写等等。
注:httpd受SELINUX控制。
10、httpd-devel (开发包)
httpd-manual (安装此包后,可离线查看说明文档,http://IP:PORT/manual)
11、/usr/sbin/httpd MPM(multi path module)多道处理模块默认是prefork模型,支持worker模型(通过修改/etc/sysconfig/httpd文件更改使用哪种模型)
prefork:一个请求用一个进程响应,稳定可靠,但并发量大时来回切换导致进程抖动,效率低,此模式会生成一个主导进程master process(属主属组均为root)用来管理维护worker process的生成与销毁等,其余进程为worker process工作进程,用来响应用户请求(属主属组均为apache);
worker:一个请求用一个线程响应,会启动多个进程,每个进程生成多个线程;
event:一个进程响应多个用户请求,内部用多线程响应请求(最强大)。
注:#httpd -l ;httpd.worker -l ; httpd.event -l
12、搭建环境:linux+apache+mysql+php
linux+nginx+mysql+php
windows+IIS+SQLserver+asp
rpm包安装所需软件:httpd,mysql,mysql-server,php,php-devel,php-mysql.
配置文件:/usr/local/apache2/etc/httpd.conf
/usr/local/apache2/etc/extra/*.conf
/etc/httpd/conf/httpd.conf (RPM包安装位置
#grep “Section” httpd.conf(若rpm安装,此配置文件分三段配置)
GlobalEnvironment
‘Main’Server configuration
VirtualHosts
端口:tcp(80)、ssl(443).
默认网页保存位置:/usr/local/apache2/htdocs/
/var/www/html (RPM包
日志保存位置:/usr/local/apache2/logs/
/var/log/httpd/ (RPM包
二、1、常用配置项(格式:directive指令 value值)指令不区分大小写,值根据需要有可能区分:
Section1 Global Environment
ServerTokens OS (可用选项有major|minor|Min|Prod|OS|Full)网页出错时在客户端浏览器最下行显示具体信息,软件版本及操作系统版本)
ServerRoot (服务器根目录、工作目录)
PidFile run/httpd.pid
Timeout 60
KeepAlive On (打开长连接)
MaxKeepAliveRequest 100 (限制共100个长连接,0为无限制)
KeepAliveTimeout 15
<IfModule prefork.c>
StartServers 8 (刚一启动打开的进程数)
MinSpareServers 5 (最少空闲进程)
MaxSpareServers 20 (最大空闲进程)
ServerLimit 256
MaxClients 256 (最多client连进来,调整此项之前事先调ServerLimit,注:调整时先关闭服务调好后再开启)
MaxRequestsPerChild 4000 (一个进程最多响应多少次请求,0不限制)
</IfModule>
Listen (可有多个
LocalModule moudulename module path(加载的相关模块)
Include conf.d/*.conf (子目录下的配置文件也生效)
User
Group
Section2 ‘Main’ Server
ServerAdmin root@localhost(每个站点配个服务器管理员)
ServerName www.example.com:80(服务器名,没有域名解析时使用临时解析,默认不开启;若配置虚拟主机时这项必须配置,在开启服务时会反向解析IP与域名对应关系,检测不到会报错)
DocumentRoot “/var/www/html” (文档根目录,URL与本地文件中的路径不同)
<Directory “/var/www/html”>
Options Indexes FollowSymLinks (生产环境下Indexes必须关掉,除下载站外,Indexes(当访问页面不存在时会显示并索引网页目录下的所有目录及文件),FollowSymLinks(软链接指向的文件生效)
AllowOverride None (若此项值为AuthConfig,则表明启用用户认证)
Order allow,deny (定义基于主机的访问控制机制,可以是IP、网络地址、域名、主机;地址的表示方式有:IP,network/netmask,DOMAINNAME,HOSTNAME(www.linux.org),DOMAINNAME(magedu.com),partialIP(172.16为172.16.0.0/16))
Allow from all
</Directory>
<IfModule mod_userdir.c> (用户家目录下的网页,需切换至username并在家目录下创建public_html目录 ,http://ip:port/~username)
UserDir disabled
#UserDir public_html
</IfModule>
DirectoryIndex index.html index.php (从左至右依次匹配,若无匹配则查看是否索引,若还无返回forbidden)
AccessFileName .htaccess(每目录访问的权限设置,但运行效率极低,生产环境下禁用)
<Files ~ "^\.ht"> (模式匹配,此项与安全相关)
Order allow,deny
Deny from all
Satisfy All
</Files>
TypesConfig /etc/mime.types (MIME,以下几项与传输多媒体文件相关)
DefaultType text/plain
<IfModule mod_mime_magic.c>
# MIMEMagicFile /usr/share/magic.mime
MIMEMagicFile conf/magic
</IfModule>
ErrorLog logs/error_log (错误日志)
LogLevel warn
LogFormat "%h %l %u %t\"%r\" %>s %b \"%{Referer}i\"\"%{User-Agent}i\"" combined(混合模式,%h代表宏,具体有%h是remote host,%l是remotelogin,%r是first line of request,%s是status)
LogFormat "%h %l %u %t\"%r\" %>s %b" common(通用模式)
LogFormat "%{Referer}i -> %U"referer(只记录client访问来源)
LogFormat "%{User-agent}i" agent(只记录浏览器类型)
CustomLog logs/access_log combined (正确访问日志)
Alias /icons/ "/var/www/icons/" (目录别名)
三、范例:
1、用户身份验证:
#vim /etc/httpd/conf/httpd.conf
<Directory “/var/www/html”>
Options None
AllowOverride AuthConfig
AuthType Basic
AuthName “Restricted site.”
AuthUserFile “/etc/httpd/conf/htpasswd” (也可设置允许组访问,AuthGroupFile “path”,Require group groupname)
Require user hadoop (仅允许某用户访问,若让文件中所有用户都访问则为,Require valid-user)
Order allow,deny
Allow from all
</Directory>
#htpasswd -c -m /etc/httpd/conf/htpasswd hadoop (仅第一次添加用户使用-c,-m使用MD5加密算法)
#htpasswd -m /etc/httpd/conf/htpasswd tomcat (第二次之后添加用户不用-c选项)
#httpd -t (测试配置文件语法)
#elinks -dump|-source http://IP:PORT/path/to/file (注:-dump显示内容后退出,-source显示源码)
2、定义主机访问控制机制:
#vim /etc/httpd/conf/httpd.conf
<Directory “/var/www/html”>
……
Order deny,allow (先拒绝后允许,2.4版本不使用allow/deny方式
Deny from 192.168.1.0/24 (地址的表示方式:IP、network/netmask、domainname、hostname、particularIP:172.16(表示172.16.0.0/16))
</Directory>
3、虚拟主机(物理服务器1个,WEB程序也1个,却可服务多个不同站点):
生产中常用的是基于域名的虚拟主机
#vim /etc/httpd/conf.d/virtual.conf
NameVirtualHost 192.168.1.222:80
<VirtualHost 192.168.1.222:80>
ServerName www.a.org
DocumentRoot “/www/a.org”
CustomLog “/var/log/htttpd/a.org/access_log” combined
<Directory “/www/a.org”>
Options None
AllowOverride AuthConfig
AuthType Basic
AuthName “RESTRICTED SITE.”
AuthUserFile “/www/a.org/.htaccess”
Require valid-user
</Directory>
</VirtualHost>
<VirtualHost 192.168.1.222:80>
ServerName www.b.net
DocumentRoot “/www/b.net”
CustomLog “/var/log/httpd/b.net/access_log” combined
</VirtualHost>
#service httpd restart(注销掉主配置文件的中心主机DocumentRoot一行,再重启验证)
筛选出httpd.conf除注释及空白行的干净文件:原991行-->223行
sed '/^#/d' /etc/httpd/conf/httpd.conf |sed -r '/[[:space:]]+#/d' | grep -v "^$" > /tmp/httpd.conf.clear
四、基于openssl的https服务配置:
角色有:CA-side(第三方机构服务器,redhat6.4)、server-side(网站服务器)、client(windows浏览器访问即可)
注:ssl会话仅能用于基于IP的虚拟主机,若虚拟主机基于域名那仅有一个域名能建立ssl会话
CA-side:
#cd /etc/pki/CA
#(umask 077;openssl genrsa -out private/cakey.pem 2048)(CA端私钥)
#vim ../tls/openssl.cnf(更改默认值,确认dir = /etc/pki/CA)
#openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655(生成自签署证书)
#touch index.txt
#touch serial
#echo 01 > serial
注:生成的私钥cakey.pem,自签署证书cacert.pem,index.txt记录所有请求认证的记录,serial版本号记录到第几条,这些文件名已在配置文件openssl.cnf中定义,为方便直接使用。
server-side:
web要支持openssl得要有相应模块
#httpd -M | grep ssl
#yum -y install mod_ssl
#mkdir /etc/httpd/ssl
#cd /etc/httpd/ssl
#(umask 077;openssl genrsa -out httpd.key 1024)(server端私钥)
#openssl req -new -key httpd.key -out httpd.csr(server端生成的证书签署请求certificatesignature request,需传至CA端签署,注意此处写相应信息时主机名写hello.magedu.com最终要访问的域名,其余信息与CA一致)
#scp httpd.csr [email protected]:/tmp
CA-side:
#cd /tmp
#openssl ca -in httpd.csr -out httpd.crt -days 3655(CA签署证书请求,生成的证书为安全,httpd.crt传至server-side后要删除)
#cat /etc/pki/CA/index.txt
#cat /etc/pki/CA/serial
server-side:
#cd /etc/httpd/ssl
#scp [email protected]:/tmp/httpd.crt ./
#rpm -ql mod_ssl
#vim /etc/httpd/conf.d/ssl.conf(是子配置文件,需要注意及更改的信息如下)
Listen 443
<VirtualHost 192.168.1.222:443>
ServerName hello.magedu.com:443
DocumentRoot "/www/magedu.com"
TransferLog logs/ssl_access_log(注意是transferlog记录日志而不是customlog)
SSLEngine on(启用ssl功能,off禁用很关键)
SSLProtocol all -SSLv2(注意减v2,只有SSLV3和TLSV1)
SSLCertificateFile /etc/httpd/ssl/httpd.crt(CA签署的证书)
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key(私钥)
……
</VirtualHost>
#mkdir -pv /www/magedu.com
#vim /www/magedu.com/index.html
hello.magedu.com
#httpd -t(检查配置文件语法)
#vim /etc/hosts
192.168.1.222 hello.magedu.com
#service httpd restart
#netstat -tulnp | grep :443
client-side:
1、将CA-side端cacert.pem公钥传至client-side,并重命名为cacert.crt,双击安装证书
2、给windows添加解析记录C:\Windows\System32\drivers\etc\hosts最末添加IP与域名对应关系:192.168.1.222 hello.magedu.com
3、通过浏览器访问:https://hello.magedu.com
以上是学习《马哥网络视频》做的笔记。
以下是以源码包安装的apache虚拟主机及个人主页的配置:
基于IP的虚拟主机:一台服务器,多个IP,搭建多个网站
基于端口的虚拟主机:一台服务器,一个IP,搭建多个网站,每个网站使用不同的端口访问
基于域名的虚拟主机:一台服务器,一个IP,搭建多个网站,每个网站使用不同域名访问
#vi /usr/local/apache2/etc/httpd.conf
打开 Include etc/ /extra/httpd-vhosts.conf (以下三个实验,均需打开此项
》例:基于IP的虚拟主机
#ifconfig eth0:1 192.168.216.227 netmask 255.255.255.0 (临时生效
#cp ifcfg-eth0 ifcfg-eth0:1 (永久生效需改配置文件
#vi /usr/local/apache2/etc/extra/httpd-vhost.conf
<VirtualHost 192.168.216.226>
DocumentRoot "/usr/local/apache2/htdocs/baidu"
ServerName www.baidu.com
<Directory "/usr/local/apache2/htdocs/baidu">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.216.227>
DocumentRoot "/usr/local/apache2/htdocs/xdl"
ServerName www.xdl.com
<Directory "/usr/local/apache2/htdocs/xdl"
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
#mkdir �Cv /usr/local/apache2/htdocs/{baidu,xdl}
#cd baidu
#echo "www.baidu.com" >> index.html
#cd xdl
#echo "www.xdl.com" >> index.html
#vi /usr/local/apache2/etc/httpd.conf
#DocumentRoot "/usr/local/apache2//htdocs" (关掉默认网页设置
#/usr/local/apache2/bin/apachectl stop--->start
#elinks 192.168.216.226
#elinks 192.168.216.227
》例:基于端口的虚拟主机
#vi /usr/local/apache2/etc/extra/httpd-vhosts.conf (在上例的基础上修改如下内容
Listen 8080
<VirtualHost 192.168.216.226:80>
……
</VirtualHost>
<VirtualHost 192.168.216.226:8080>
……
</VirtualHost>
#elinks 192.168.216.226:80
#elinks 192.168.216.226:8080
》例:基于域名的虚拟主机
布好域名服务器
#vi /usr/local/apache2/etc/extra/httpd-vhosts.conf
<VirtualHost *:80>
…… (同上例中内容
</VirtualHost>
#elinks www.baidu.com(www.xdl.com)
源码包安装个人主页配置:
#vi /usr/lcoal/apache2/etc/httpd.conf
Include etc/extra/httpd-userdir.conf (打开子配置文件
LoadModule userdir module modules/mod_userdir.so (打开模块
#vi /usr/local/apache2/etc/extra/httpd-userdir.conf (此配置文件已设置好,不需改动
#useradd zhangsan
#useradd lisi
#mkdir /home/zhangsan/public_html
#mkdir /home/lisi/public_html
#echo "zhangsan's HomePage" >> /home/zhangsan/public_html/index.html
#echo "lisi's HomePage" >> /home/lisi/public_html/index.html
#chmod o+x /home/zhangsan
#chmod o+x /home/lisi
#elinks 192.168.216.226/~zhangsan
#elinks 192.168.216.226/~lisi
注:本文由互联网收集整理(51CTO、360DOC、chinaunix、百度百科、兄弟连免费视频等)。