http服务器程序

httpd             服务名称

apache         软件包名

特性:

高度模块化:   core + modules

DSO:  Dynamic Shared Object       动态加/卸载

MPM: multi-processing moudule    多路处理模块

MPM工作模式:

1.  prefork  多进程IO模型,每个进程响应一个请求,默认模型

一个主进程:    生成和回收N个子进程,创建套接字,不响应请求

多个子进程:    工作work进程,每个子进程处理一个请求,系统初始化时候,预先生成多个空闲进程,等待请求,最大不超过1024个(系统打开文件描述符的最大极限)

2.  worker  复用的多进程IO模型,多进程多线程

一个主进程:    生成m个子进程,每个子进程负责生成n个线程,每个线程响应一个请求,并发响应请求 m*n

3.event  事件驱动模型(worker模型的变种)

一个主进程:   生成m个子进程,每个子进程生成n个线程,在n个线程中有个单独的线程专门来管理其它的(keep-alive)线程,当有真实的请求时候管理线程会将真实请求传递给服务线程,执行完毕后,又允许释放执行任务的线程继续执行下一个请求任务

4.线(进)程的的角色切换

监听 (从空闲队列中取出一个线程进行监听)       》   工作(处理用户请求)    》      空闲(加入空闲线程队列)

每个线程和进程工作一段时间后会被回收掉,然后生成一个新的线程或者进程来响应用户请求.

HTTPD服务配置

检查配置文件语法是否正确        httpd -t

1.如果在/var/www/html目录下没有index.html的话,就会去找/etc/httpd/conf.d/welcome.conf配置的页面,如果没有welcome.conf的配置文件,那么访问网站的根路径就会显示出文件列表,此种情况适合搭建yum源,但不适合其它网站应用(会把所有的文件数据展示给用户,没有安全保障)

1.根目录下的index.html   > 2.welcome.conf配置下的noindex.html >  3.根目录下的文件列表(默认情况)

2.隐藏服务器响应头中系统版本号  servertokens prod

1.添加httpd服务的配置不建议直接在主配置文件中直接修改,可以在/etc/httpd/conf.d添加一个以.conf结尾的配置文件,写好配置项后直接重启服务即可生效

3.修改端口只能修改主配置文件的端口,在其它配置文件中添加端口配置相当于启动了两个监听端口.

4.修改Listen配置项目         不仅仅是设置监听端口,还可设置监听的IP

5.配置持久连接

6.配置多路处理模块      /etc/httpd/conf.modules.d/00-mpm.conf

1.prefork        开启的进程数就是等于用户的连接数

7.如果需要访问一个文件夹,必须要给此文件夹授权访问,如果没有授权,将无法访问此文件夹的任何文件

8.网站根目录中可以存在子文件夹,软连接等

搭建https服务器

 .搭建CA证书  在CA服务器端执行
.cd /etc/pki/CA
.创建私钥
(umask ;openssl genrsa -out private/cakey.pem )
.自签名证书
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days
.touch index.txt
.echo > serial .在httpd服务端执行CA客户端
.mkdir /etc/httpd/conf.d/ssl
.生成私钥
(umask ;openssl genrsa -out httpd.key )
.生成申请文件
openssl req -new -key httpd.key -out httpd.csr
.scp httpd.csr 复制到 CA服务器上
.在CA服务器上颁发CA证书
openssl ca -in httpd.csr -out certs/ca.yxh.com.crt -days
.把证书拷贝到httpd服务器主机
scp certs/ca.yxh.com.crt 192.168.231.7:/etc/httpd/conf.d/ssl/
scp cacert.pem 192.168.231.7:/etc/httpd/conf.d/ssl/
.yum install mod_ssl
.[root@node7 ssl]# ls
cacert.pem CA服务器自签名证书
ca.yxh.com.crt CA服务器颁发给客户端的CA证书
httpd.csr 客户端的CA申请证书
httpd.key 私钥
.修改 /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/httpd/conf.d/ssl/ca.yxh.com.crt
SSLCertificateKeyFile /etc/httpd/conf.d/ssl/httpd.key
SSLCACertificateFile /etc/httpd/conf.d/ssl/cacert.pem

将http重定向到https

1、打开url重定向支持
   (1)在apache目录下找到httpd.conf文件,并且找到#LoadModule rewrite_module modules/mod_rewrite.so 去掉#号
   (2)找到<Directory "/var/www/html">字段,如下所示:

   <Directory "/var/www/html">
AllowOverride None 改为 AllowOverride ALL
</Directory>

(3)修改后重启apache服务
2、在网站根目录下,即"/var/www/html" 目录下新建文件,文件名为(.htaccess)

RewriteEngine On
     RewriteCond %{HTTPS} off
     RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

https会话过程解析

SSL会话的简化过程

(1) 客户端发送可供选择的加密方式,并向服务器请求证书

(2) 服务器端发送证书以及选定的加密方式给客户端

(3) 客户端取得证书并进行证书验证

如果信任给其发证书的CA

(a) 验证证书来源的合法性;用CA的公钥解密证书上数字签名

(b) 验证证书的内容的合法性:完整性验证

(c) 检查证书的有效期限

(d) 检查证书是否被吊销

(e) 证书中拥有者的名字,与访问的目标主机要一致

(4) 客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器, 完成密钥交换

(5) 服务器用此密钥加密用户请求的资源,响应给客户端

注意:SSL是基于IP地址实现,单IP的主机仅可以使用一个https虚拟主机

访问控制配置

配置文件有冲突的话,后面的配置文件优先级高会覆盖前面的配置文件

如果想访问某个目录或者目录下的文件,必须给这个目录授权,否则默认是不能访问的

documentroot "/data/website"
<Directory "/data/website">
     Require all granted
</Directory>
访问控制
不能有失败,至少有一个成功匹配才成功,即失败优先
<Directory "/data/website">
     <RequireAll>
           Require   all   granted
           Require   not  ip  192.168.231.1
     </RequireAll>
</Directory>

多个语句有一个成功,则成功,即成功优先
<Directory "/data/website">
     <RequireAny>
            Require    all    denied
            require   ip   172.16.1.1 允许特定IP
    </RequireAny>
</Directory>

基于IP的访问控制:

无明确授权的目录,默认拒绝

允许所有主机访问:Require   all   granted

拒绝所有主机访问:Require   all   denied

控制特定的IP访问:

Require   ip    IPADDR:授权指定来源的IP访问

Require   not   ip  IPADDR:拒绝特定的IP访问

控制特定的主机访问:

Require  host   HOSTNAME:授权特定主机访问

Require  not  host   HOSTNAME:拒绝
       HOSTNAME:

FQDN:特定主机

domin.tld:指定域名下的所有主机

配置服务监听注意项

配置监听一般不仅仅是可以配置服务的监听端口,还有监听的网卡IP

0-1023端口 只能给管理员用,普通用户是无法使用这些端口的

127.0.0.1             80              这个时候只有本机可以访问80端口,其它任何主机是不能访问的

192.168.30.7       80              只有30网段的机器机器可以访问这台主机的80端口

0.0.0.0                80              可以通过服务器主机的任何一个IP来访问服务器的80端口

root@centos7 ~]# ss -ntul
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN *: *:*
udp UNCONN *: *:*
udp UNCONN 192.168.122.1: *:*
udp UNCONN *%virbr0: *:*
udp UNCONN *: *:*
udp UNCONN *: *:*
udp UNCONN ::: :::*
tcp LISTEN *: *:*
tcp LISTEN 192.168.122.1: *:*
tcp LISTEN *: *:*
tcp LISTEN 127.0.0.1: *:*
tcp LISTEN 127.0.0.1: *:*
tcp LISTEN ::: :::*
tcp LISTEN ::: :::*
tcp LISTEN ::: :::*
tcp LISTEN ::: :::*

查看服务端口的占用情况

基于身份验证配置

htpasswd -c /etc/httpd/conf.d/.httpuser user1
htpasswd /etc/httpd/conf.d/.httpuser user2
[root@node7 conf.d]# cat .httpuser
user1:$apr1$/vggiUOi$Svh202puSmvzrpn5zuX/
user2:$apr1$II5vUPxh$m4vzva.dzpJ6Sv4xlBIqT0 vi /etc/httpd/conf.d/yxh.conf
<Directory "/data/website">
AuthType Basic
AuthName "welcome to access admin website"
AuthUserFile "/etc/httpd/conf.d/.httpuser"
Require user user1
</Directory>
authconfig和.htaccess两者必须配合使用
<Directory "/data/website">
allowoverride authconfig
</Directory> cd /data/website && vi .htaccess
AuthType Basic
AuthName "welcome to access admin website"
AuthUserFile "/etc/httpd/conf.d/.httpuser"
Require user user1

第二种实现方式

查看apache服务器的状态

<Location "/status">
SetHandler server-status
Require all granted
</Location>

打开浏览器输入地址:   http://192.168.231.7/status

虚拟主机配置

touch /data/website1/index.html
touch /data/website2/index.html
touch /data/website3/index.html <Directory "/data">
Require all granted
</Directory> listen
listen
listen <VirtualHost *:>
DocumentRoot "/data/website1"
ServerName www.a.com
ErrorLog "logs/a.com.err_log"
TransferLog "logs/a.com-access_log"
</VirtualHost>
<VirtualHost *:>
DocumentRoot "/data/website2"
ServerName www.b.com
ErrorLog "logs/b.com.err_log"
TransferLog "logs/b.com-access_log"
</VirtualHost>
<VirtualHost *:>
DocumentRoot "/data/website3"
ServerName www.c.com
ErrorLog "logs/c.com.err_log"
TransferLog "logs/c.com-access_log"
</VirtualHost>

基于端口实现

ip a add 192.168.231.8/ dev ens33
ip a add 192.168.231.9/ dev ens33 <Directory "/data">
Require all granted
</Directory> <VirtualHost 192.168.231.8:>
DocumentRoot "/data/website1"
ServerName www.a.com
ErrorLog "logs/a.com.err_log"
TransferLog "logs/a.com-access_log"
</VirtualHost>
<VirtualHost 192.168.231.9:>
DocumentRoot "/data/website2"
ServerName www.b.com
ErrorLog "logs/b.com.err_log"
TransferLog "logs/b.com-access_log"
</VirtualHost>
<VirtualHost 192.168.231.10:>
DocumentRoot "/data/website3"
ServerName www.c.com
ErrorLog "logs/c.com.err_log"
TransferLog "logs/c.com-access_log"
</VirtualHost>

基于IP实现

修改客户端hosts文件或者搭建dns解析
192.168.231.7 www.a.com
192.168.231.7 www.b.com
192.168.231.7 www.c.com 修改httpd服务端的配置文件
<VirtualHost *:>
DocumentRoot "/data/website1"
ServerName www.a.com
ErrorLog "logs/a.com.err_log"
TransferLog "logs/a.com-access_log"
</VirtualHost> <VirtualHost *:>
DocumentRoot "/data/website2"
ServerName www.b.com
ErrorLog "logs/b.com.err_log"
TransferLog "logs/b.com-access_log"
</VirtualHost> <VirtualHost *:>
DocumentRoot "/data/website3"
ServerName www.c.com
ErrorLog "logs/c.com.err_log"
TransferLog "logs/c.com-access_log"
</VirtualHost>

基于主机头实现

Sendfile机制

不用 sendfile 的传统网络传输过程:

硬盘   >>     kernel buffer    >>    user buffer   >>    kernel socket buffer    >>    协议栈

上面4个步骤有4次上下文切换,有4次拷贝,如果能减少切换次数和拷贝次数将会有效提升性能

使用sendfile

sendfile() 不但能减少切换次数而且还能减少拷贝次数

硬盘      >>         kernel buffer (快速拷贝到kernel socket buffer)     >>       协议栈

系统调用 sendfile() 通过 DMA 把硬盘数据拷贝到 kernel buffer,然后数据被 kernel 直接拷贝到另外一个与 socket 相关的 kernel buffer

反向代理

正向代理               离客户端近

反向代理               离服务端近

fastcgi                  apache是反向代理         把用户的请求转发给fastcgi服务端        浏览器发送请求 .php 》 apapche  》 fastcgi  响应

Apache服务介绍的更多相关文章

  1. LAMP架构应用实战—Apache服务介绍与安装01

    LAMP架构应用实战—Apache服务介绍与安装01   一:Apache是什么 Apache是Apache基金会开发的一个高性能.功能强大.安全可靠.灵活的开放源码的WEB服务软件 二:Apache ...

  2. web服务的简单介绍及apache服务的安装

    一,web服务的作用:  是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档.可以放置网站文件,让全世界浏览:   可以放置数据让全世界下载.目前最主流的三个Web服务器是Ap ...

  3. Linux中要重启apache服务与在windows是有很大的区别,下面我们来介绍一下

    在Linux中要重启apache服务与在windows是有很大的区别,下面我们来介绍一下常用的命令,需要的朋友参考下吧(http://www.hnkjlb.com) linux系统为Ubuntu 一. ...

  4. 在虚拟机上的关于Apache(阿帕奇)(1)开启Apache服务以及介绍基础服务

    我们来开始讲述Apache(阿帕奇)服务 小知识: Apache   使得一台服务器上放很多网站,网站同时访问  可以使网站更安全(木马如果是root权限  如果webshell  apache 可用 ...

  5. 第10章 使用Apache服务部署静态网站

    章节简述: 本章节中通过对比目前热门的网站服务程序来说明Apache服务程序的优势,并新增主机空间选购技巧小节. 了解SELinux服务的3种工作模式,小心谨慎的使用semanage命令和setseb ...

  6. linux杂谈(二十):apache服务配置

    1.apache简单介绍 ​ ​我们常常要浏览网页,提供这种服务是apache.提供apache服务的软件是httpd服务. ​ ​Apache支持許多特性,大部分通过编译的模块实现.這些特性從伺服器 ...

  7. windows启动、停止和重新启动Apache服务

    启动.停止和重新启动Apache服务(1) 在Windows操作系统中,Apache一般以服务的方式运行.在安装Apache时,如果你选择了“for all users”,Apache就会自动安装为一 ...

  8. Apache Kafka - 介绍

    原文地址地址: http://blogxinxiucan.sh1.newtouch.com/2017/07/12/Apache-Kafka-介绍/ Apache Kafka教程 之 Apache Ka ...

  9. CentOS 7.2配置Apache服务httpd小伙伴们可以参考一下

    这篇文章主要为大家详细介绍了CentOS 7.2配置Apache服务 httpd上篇,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 一.Perl + mod_perl 安装mod_perl使Per ...

随机推荐

  1. mysql 导入excel文件数据到数据库

    load data local infile 'C:/Users/Administrator/Documents/gaunai2.csv' into table newtable (c1,c2) fi ...

  2. 11代理模式Proxy

    一.什么是代理模式 Proxy模式又叫做代理模式,是构造型的设计 模式之一,它可以为其他对象提供一种代理(Proxy)以 控制对这个对象的访问. 所谓代理,是指具有与代理元(被代理的对象)具有 相同的 ...

  3. postmain 通过函数动态设置参数

    调用服务器的服务,其中有个参数是签名,签名需要计算,需要写一个本地函数. 下一步 pre-request Script 的代码如下: (function($) { if(!$.encoding) $. ...

  4. lsass 病毒手动清除方法

    病毒症状进程里面有2个lsass.exe进程,一个是system的,一个是当前用户名的(该进程为病毒).双击D:盘打不开,只能通过右击选择打开来打开.用kaspersky扫描可以扫描出来,并且可以杀掉 ...

  5. win2008在组件服务中未找到office组件服务

    在win2003系统,cmd中输入 dcomcnfg ,组件服务里面找到office的组件服务,但win2008 R2 64位操作系统需要输入comexp.msc -32 tks:http://www ...

  6. 关于linux下mysql 5.7.x数据库的yum的安装方法

    环境介绍>>>>>>>>>>>>>>>>>> 操作系统:Centos 7.1 mysql数据 ...

  7. ubuntu-18.04 root登录图形界面失败问题解决方案

    一.设置root密码 二.进入/etc/pam.d目录 主要修改两个文件(圈了红色框框),记得命令行下切换root账户(sudo -i)进行vim修改,刚安装的ubuntu没有vim支持,请根据提示进 ...

  8. myEclipse中项目无法部署到tomcat

    问题现象: 从svn上新下载了项目到win环境上. 部署项目的时候,在servers视图里,Add Deployment,如下图: 发现只有一个项目可以加载,另外的项目看不到:可是明明我并没有部署过啊 ...

  9. atoi函数的用法

    库函数原型: #inclue <stdlib.h> int atoi(const char *nptr); 用法:将字符串里的数字字符转化为整形数.返回整形值. 注意:转化时跳过前面的空格 ...

  10. 如何迁移完整SQL数据库到另外一台服务器

    如何迁移完整SQL数据库到另外一台服务器: https://jingyan.baidu.com/album/9f7e7ec080d1b36f28155422.html?picindex=1