Apache服务介绍
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服务介绍的更多相关文章
- LAMP架构应用实战—Apache服务介绍与安装01
LAMP架构应用实战—Apache服务介绍与安装01 一:Apache是什么 Apache是Apache基金会开发的一个高性能.功能强大.安全可靠.灵活的开放源码的WEB服务软件 二:Apache ...
- web服务的简单介绍及apache服务的安装
一,web服务的作用: 是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档.可以放置网站文件,让全世界浏览: 可以放置数据让全世界下载.目前最主流的三个Web服务器是Ap ...
- Linux中要重启apache服务与在windows是有很大的区别,下面我们来介绍一下
在Linux中要重启apache服务与在windows是有很大的区别,下面我们来介绍一下常用的命令,需要的朋友参考下吧(http://www.hnkjlb.com) linux系统为Ubuntu 一. ...
- 在虚拟机上的关于Apache(阿帕奇)(1)开启Apache服务以及介绍基础服务
我们来开始讲述Apache(阿帕奇)服务 小知识: Apache 使得一台服务器上放很多网站,网站同时访问 可以使网站更安全(木马如果是root权限 如果webshell apache 可用 ...
- 第10章 使用Apache服务部署静态网站
章节简述: 本章节中通过对比目前热门的网站服务程序来说明Apache服务程序的优势,并新增主机空间选购技巧小节. 了解SELinux服务的3种工作模式,小心谨慎的使用semanage命令和setseb ...
- linux杂谈(二十):apache服务配置
1.apache简单介绍 我们常常要浏览网页,提供这种服务是apache.提供apache服务的软件是httpd服务. Apache支持許多特性,大部分通过编译的模块实现.這些特性從伺服器 ...
- windows启动、停止和重新启动Apache服务
启动.停止和重新启动Apache服务(1) 在Windows操作系统中,Apache一般以服务的方式运行.在安装Apache时,如果你选择了“for all users”,Apache就会自动安装为一 ...
- Apache Kafka - 介绍
原文地址地址: http://blogxinxiucan.sh1.newtouch.com/2017/07/12/Apache-Kafka-介绍/ Apache Kafka教程 之 Apache Ka ...
- CentOS 7.2配置Apache服务httpd小伙伴们可以参考一下
这篇文章主要为大家详细介绍了CentOS 7.2配置Apache服务 httpd上篇,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 一.Perl + mod_perl 安装mod_perl使Per ...
随机推荐
- mysql 导入excel文件数据到数据库
load data local infile 'C:/Users/Administrator/Documents/gaunai2.csv' into table newtable (c1,c2) fi ...
- 11代理模式Proxy
一.什么是代理模式 Proxy模式又叫做代理模式,是构造型的设计 模式之一,它可以为其他对象提供一种代理(Proxy)以 控制对这个对象的访问. 所谓代理,是指具有与代理元(被代理的对象)具有 相同的 ...
- postmain 通过函数动态设置参数
调用服务器的服务,其中有个参数是签名,签名需要计算,需要写一个本地函数. 下一步 pre-request Script 的代码如下: (function($) { if(!$.encoding) $. ...
- lsass 病毒手动清除方法
病毒症状进程里面有2个lsass.exe进程,一个是system的,一个是当前用户名的(该进程为病毒).双击D:盘打不开,只能通过右击选择打开来打开.用kaspersky扫描可以扫描出来,并且可以杀掉 ...
- win2008在组件服务中未找到office组件服务
在win2003系统,cmd中输入 dcomcnfg ,组件服务里面找到office的组件服务,但win2008 R2 64位操作系统需要输入comexp.msc -32 tks:http://www ...
- 关于linux下mysql 5.7.x数据库的yum的安装方法
环境介绍>>>>>>>>>>>>>>>>>> 操作系统:Centos 7.1 mysql数据 ...
- ubuntu-18.04 root登录图形界面失败问题解决方案
一.设置root密码 二.进入/etc/pam.d目录 主要修改两个文件(圈了红色框框),记得命令行下切换root账户(sudo -i)进行vim修改,刚安装的ubuntu没有vim支持,请根据提示进 ...
- myEclipse中项目无法部署到tomcat
问题现象: 从svn上新下载了项目到win环境上. 部署项目的时候,在servers视图里,Add Deployment,如下图: 发现只有一个项目可以加载,另外的项目看不到:可是明明我并没有部署过啊 ...
- atoi函数的用法
库函数原型: #inclue <stdlib.h> int atoi(const char *nptr); 用法:将字符串里的数字字符转化为整形数.返回整形值. 注意:转化时跳过前面的空格 ...
- 如何迁移完整SQL数据库到另外一台服务器
如何迁移完整SQL数据库到另外一台服务器: https://jingyan.baidu.com/album/9f7e7ec080d1b36f28155422.html?picindex=1