Linux运维 第三阶段 (六)web相关概念httpd服务及https加密传输配置

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

一、相关概念: 

1、  HTTP/0.9:(Hyper Text Transfer Protocol)超文本传输协议,仅纯文本(超链接),ASCII;核心:HTMLHyper TextMark Language)超文本标记语言。

2、  HTTP/1.0:引入MIMEMultipurpose Internet Mail Extension)多用途互联网邮件扩展,使互联网走进我们的生活,GET|POST|HEAD|PUT|TRACE|OPTIONS|CONNECTION|DELETESMTPSimple MailTransaction Protocol),纯文本。

注:MIME:将非文本数据在传输前重新编码为文本格式,接收方能够用相反的方式将其重新还原为原来的格式,还能够调用相应的程序来打开此文件。

3、  HTTP/1.1:加强了缓存管理机制;引入了长连接机制(并发连接量大时,后面的客户端将要排队等待有断开的连接然后再与服务器建立连接)。

4URIUniformresource identify)统一资源标识符(全球唯一标识),路径、格式上的统一;

URLUniform 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,引用NWEB对象URL),动态内容部分才需执行。

6HTTP报文:

         请求报文语法:<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:重定向类的信息(301302304);

             4XXclient-side错误信息(404,请求了不存在的文件,notfound);

             5XXserver-side错误信息(进程没启动成功之类的)。

8WEB服务的主要操作:

         I:建立连接:接受或拒绝客户端连接请求;

         II:接收请求:通过网络读取HTTP请求报文;

         III:处理请求:解析请求报文并作出相应的动作;

         IV:访问资源:访问请求资源中相关资源;

         V:构建响应:使用正确的首部生成HTTP响应报文;

         VI:发送响应:向客户端发送生成的响应报文;

         VII:记录日志:将已经完成的HTTP事务记录进日志文件。

9ASFapache software foundation)、FSFfree software foundation)、GNUGPL

10httpd特性:事先创建进程;按需维护适当的进程;模块设计,核心比较小,各种功能都模块添加,包括PHP;支持运行时配置,支持单独编译模块;支持多种方式的虚拟主机配置;支持HTTPSmod_ssl);支持用户认证;支持基于主机名的ACL;支持每目录的访问控制;支持URL重写等等。

注:httpdSELINUX控制。

10httpd-devel      (开发包)

  httpd-manual  (安装此包后,可离线查看说明文档,http://IP:PORT/manual

11/usr/sbin/httpd     MPMmulti 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.16172.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代表宏,具体有%hremote host,%lremotelogin,%rfirst line of request,%sstatus

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 (地址的表示方式:IPnetwork/netmaskdomainnamehostnameparticularIP: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

 

 

 

四、基于opensslhttps服务配置:

角色有:CA-side(第三方机构服务器,redhat6.4)、server-side(网站服务器)、clientwindows浏览器访问即可)

注: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.pemindex.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.csrserver端生成的证书签署请求certificatesignature request,需传至CA端签署,注意此处写相应信息时主机名写hello.magedu.com最终要访问的域名,其余信息与CA一致)

#scp httpd.csr  root@192.168.1.222:/tmp

 

CA-side:

#cd /tmp

#openssl ca  -in  httpd.csr -out  httpd.crt  -days 3655CA签署证书请求,生成的证书为安全,httpd.crt传至server-side后要删除)

#cat /etc/pki/CA/index.txt

#cat /etc/pki/CA/serial

 

server-side:

#cd /etc/httpd/ssl

#scp root@192.168.1.222:/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,只有SSLV3TLSV1

SSLCertificateFile  /etc/httpd/ssl/httpd.crtCA签署的证书)

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-sidecacert.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

 

 

例:

生产中将vsftpd的根目录作为httpd的根目录(vsftpd&httpdyum方式安装):

101.73vsftpd):

虚拟用户/密码:ane56/ane56!

数据目录:/ane/ftproot/

 

隐藏httpd版本:

sed -i 's/ServerTokens OS/ServerTokensProductOnly/' /etc/httpd/conf/httpd.conf  

sed -i 's/ServerSignatureOn/ServerSignature Off/' /etc/httpd/conf/httpd.conf

 

#vim /etc/httpd/conf/httpd.conf

ServerSignature Off

ServerTokens PorductOnly    #(仅在ServerSignatureOn时此项才生效,有ProductOnlyMajorMinorMinimalOSFull

DocumentRoot "/ane/ftproot"

<Directory "/ane/ftproot">

   Options Indexes

   AllowOverride All

   IndexOptions FancyIndexing NameWidth=25 Charset=UTF-8 FoldersFirstVersionSort

   IndexOrderDefault Ascending Name

   Order allow,deny

   Allow from all

</Directory>

 

#mv /etc/httpd/conf.d/welcome.conf/etc/httpd/conf.d/welcome.conf.bak

 

[root@PDA4-ane ~]# id virtual

uid=501(virtual) gid=501(virtual) groups=501(virtual)

[root@PDA4-ane ~]# usermod -a -G 501 apache

[root@PDA4-ane ~]# tail -2 /etc/group

virtual:x:501:apache

apache:x:48:

 

#service httpd restart

 

Options Indexes   #Indexes使目录内的文件或子目录以列表方式显示

IndexOptions FancyIndexing    #This turns on fancy indexing ofdirectories.

IndexOptions ScanHTMLTitles    #如果目录中含有HTML文件,则Apache会自动读取HTML文件的<title>......</title>部分,用 HTML文件的标题作为Description(描述)显示在列表目录中的Description部分。。(注意:加载该指令会加大CPU的负荷!)

IndexOptions NameWidth=25   #指定目录列表可以显示最长为25字节的文件/目录名,如果使用*来做值,会自适应到最长文件名

IndexOptions DescriptionWidth=256   #指定目录列表可以显示最长为256字节的文件/目录描述内容

IndexOptions HTMLTable    #允许HTML格式

IndexOptions VersionSort   #如果目录中含有同一文件的不同版本,则Apache会对该文件按照版本号自动排序

IndexOptions FoldersFirst   #最先列出文件夹会使显示效果

IndexOptions IgnoreCase    #忽略大小写

IndexOptions Charset=GBK    #默认显示字符集

IndexOrderDefault Ascending Name    #默认以文件或目录名升序排列

#AddDescription "Lua ... "lua-5.1.3.tar.gz   #给文件lua-5.1.3.tar.gz添加注释

 




以上是学习《马哥课程》做的笔记。

 

 

 


源码包安装的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 –v /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

 



本文转自 chaijowin 51CTO博客,原文链接:http://blog.51cto.com/jowin/1659486,如需转载请自行联系原作者

相关文章
|
20天前
|
运维 监控 关系型数据库
运维实战:Windows服务挂掉了怎么办,通过Bat脚本实现自动重启
本文介绍了如何使用Bat脚本自动监控并重启Windows服务器上的挂掉服务,例如MySQL,以避免在假期等情况下需要紧急处理问题。首先,创建一个Bat脚本,设定每小时检查一次服务状态,如果服务停止则自动重启。脚本内容包括检查服务是否运行并根据状态执行相应操作。同时,脚本中包含了确保以管理员权限运行的代码。 脚本需设置为ANSI编码以防止乱码。推荐将Bat脚本封装为Windows服务以保证稳定运行,提供了使用NSSM工具、Windows服务程序和开源的Java工具winsw将批处理脚本转化为服务的方法。这些方法可以确保服务在后台可靠运行,即使在服务意外停止时也能自动恢复。
|
5天前
|
安全 数据安全/隐私保护
HTTPS加密的过程
HTTPS加密的过程
|
5天前
|
机器学习/深度学习 数据采集 人工智能
智能运维:AI在现代IT服务管理中的应用
【6月更文挑战第17天】随着人工智能技术的不断进步,智能运维已成为提升IT服务效率和质量的关键手段。本文将探讨如何通过集成机器学习、大数据分析等技术来优化传统运维流程,实现故障预测、自动化处理及持续的性能优化,旨在为IT专业人士提供实施智能运维的洞见与策略。
|
3天前
|
监控 安全 网络安全
探讨网站加密访问的安全性问题:HTTPS的防护与挑战
**探讨HTTPS在网站加密中的角色,提供数据加密和身份验证,防范中间人攻击。心脏滴血漏洞示例显示持续维护的必要性。面临证书管理、性能影响和高级攻击挑战,应对措施包括更新、HSTS策略及用户教育。HTTPS是安全基础,但需不断优化以应对新威胁。**
25 2
|
8天前
|
机器学习/深度学习 存储 人工智能
智能化运维:未来的IT服务管理
【6月更文挑战第14天】本文将探讨智能化运维的概念、优势以及在IT服务管理中的应用。随着人工智能和机器学习技术的发展,智能化运维已经成为了IT服务管理的新趋势。通过引入智能化运维,企业可以提高效率、降低成本并提升服务质量。
|
3天前
|
缓存 网络协议 应用服务中间件
深入理解 web 协议(一)- http 包体传输
深入理解 web 协议(一)- http 包体传输
|
26天前
|
安全 算法 数据安全/隐私保护
HTTPS 加密工作过程
HTTPS 加密工作过程
|
4天前
|
监控 小程序 前端开发
基础入门-抓包技术&HTTPS协议&WEB&封包监听&网卡模式&APP&小程序
基础入门-抓包技术&HTTPS协议&WEB&封包监听&网卡模式&APP&小程序
|
1月前
|
安全 Linux 网络安全
|
1月前
|
安全 算法 网络安全
HTTPS 的加密流程
HTTPS (Hyper Text Transfer Protocol Secure) 是基于 HTTP 协议之上的安全协议,用于在客户端和服务器之间通过互联网传输数据的加密和身份验证。它使用 SSL/TLS (Secure Sockets Layer/Transport Layer Security) 协议来保护数据的安全性,可以防止数据被窃听、篡改或伪造。
44 3