19 Star 187 Fork 90

baoke / Linux学完就忘系列

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
49.Apache.md 25.97 KB
一键复制 编辑 原始数据 按行查看 历史
baoke 提交于 2019-09-14 10:01 . apache

httpd

ASF:apache software foundation
httpd:apache
a patchy server=apache

httpd的特性

高度模块化:core+modules
DSO:dynamic shared object

MPM:Multipath Processing Modules(多路处理模块):

prefork:多进程模型,每个进程响应一个请求;

一个主进程:负责生成子进程及回收子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进程处理;
n个子进程:每个子进程处理一个请求;
工作模型:会预先生成几个空闲进程,随时等待用于响应用户请求;最大空闲和最小空闲;

worker:多进程多线程模型,每线程处理一个用户请求;

一个主进程:负责生成子进程及回收子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进程处理;
多个子进程:每个子进程负责生成多个线程;
每个线程:负责响应用户请求;
并发响应数量:m*n
m:子进程数量
n:每个子进程所能创建的最大线程数量;

event:事件驱动模型,多进程模型,每个进程响应多个请求;

一个主进程:负责生成子进程及回收子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进程处理;
子进程:基于事件驱动机制直接响应多个请求;
httpd-2.2:仍为测试使用模型;
httpd-2.4:event可生产环境中使用;

#查看httpd信息
yum info httpd
#查看httpd相关的包
yum list all http*
#安装httpd
yum install -y httpd
#查看httpd主包和工具包的文件
rpm -ql httpd
rpm -ql httpd-tools
#启动httpd
systemctl start httpd.service
#查看是否是httpd占用80端口
ss -tnlp

httpd的功能特性:

CGI:Common Gateway Interface
虚拟主机:IP,PORT,FQDN
反向代理
负载均衡
路径别名
丰富的用户认证机制:
basic
digest
支持第三方模块
.........

CentOS7: httpd-2.4

程序环境:
配置文件:
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/.conf
模块相关的配置文件:/etc/httpd/conf.modules.d/
.conf
systemd unit file:
/usr/lib/systemd/system/httpd.service
主程序文件:
/usr/sbin/httpd
httpd-2.4支持MPM的动态切换;
日志文件:
/var/log/httpd:
access_log:访问日志
error_log:错误日志
站点文档:
/var/www/html
模块文件路径:
/usr/lib64/httpd/modules

服务控制:
systemctl enable|disable httpd.service
systemctl {start|stop|restart|status} httpd.service

httpd-2.4的常用配置

主配置文件:/etc/httpd/conf/httpd.conf
Section 1:Global Environment 全局环境配置,对所有的虚拟主机都通用的设定
Section 2:'Main' server configuration 主服务器配置
Section 3:Virtual Hosts 虚拟主机配置

配置格式:
directive value
directive:不区分字符大小写;
value:为路径时,是否区分字符大小写,取决于文件系统;

常用配置:
1、修改监听的IP和PORT
Listen [IP-address:]protnumber [protocol]
(1) 省略IP表示为0.0.0.0
(2) Listen指令可重复出现多次;
Listen 80
Listen 8080
(3) 修改监听socket,重启服务进程方可生效;
(4) 限制其必须通过ssl通信时,protocol需要定义为https;

#安装telnet
yum install -y telnet
#telnet测试
telnet 192.168.147.152 80

2、持久连接(保持连接,长连接)
Persisten Connection:tcp连续建立后,每个资源获取完成后不全断开连接,而是继续等待其它资源请求的进行;
如何断开?
数量限制
时间限制

副作用:对并发访问量较大的服务器,长连接机制会使得后续某些请求无法得到正常响应;
折衷:使用较短的持久连接时长,以及较少的请求数量;

KeepAlive On|Off
KeepAliveTimeout 15
MaxKeepAliveRequests 100

注意:httpd-2.4的KeepAliveTimeout可以是毫秒级的;例如:KeepAliveTimeout 300ms;单位默认为秒,加ms为毫秒;

#备份配置文件
cd /etc/httpd/conf
cp httpd.conf{,.bak}

#创建keepalive.conf文件vim ../conf.d/keepalive.conf加入如下:

KeepAlive off
#检查配置文件语法错误
httpd -t
#重启服务
systemctl restart httpd.service

使用telnet测试:

编辑vim ../conf.d/keepalive.conf修改如下:

KeepAlive On
KeepAliveTimeout 30
MaxKeepAliveRequests 100
#检查配置文件语法错误
httpd -t
#重启服务
systemctl restart httpd.service

使用telnet测试:

注意:做telnet测试要找一个客户端主机,这里使用139这个CentOS作为客户端,如果在152上使用需要telnet localhost 80;

3、MPM
httpd-2.2不支持同时编译多个MPM模块,所以只能编译选定要使用的那个;CentOS 6的rpm包围此专门提供了三个应用程序文件,httpd(prefork),httpd.worker,httpd.event,分别用于实现对不同的MPM机制的支持;确认现在使用的是哪个MPM机制的方法:

ps aux | grep httpd

默认使用的为/usr/sbin/httpd,其为prefork的MPM模块;

查看httpd程序的模块列表:
查看静态编译的模块:httpd -l
查看静态编译及动态编译的模块:httpd -M

更换使用httpd程序,以支持其它MPM机制;
/etc/sysconfig/httpd
HTTPD=/usr/sbin/httpd.{worker,event}

注意:需要重启服务进程方可生效

httpd2.2(CentOS 6):

#可以看到httpd2.2提供的MPM机制文件有3个/usr/sbin/httpd、/usr/sbin/httpd.event、/usr/sbin/httpd.worker
#由于httpd2.2不支持动态装载,所以把三个都提供给我们了
rpm -ql httpd | grep /usr/sbin/httpd
#可以看到默认是httpd,也就是MPM为prefork
ps aux | grep httpd

如果在CentOS 6上想换别的MPM机制,编辑文件vim /etc/sysconfig/httpd加入如下,将MPM机制改为event:

HTTPD=/usr/sbin/httpd.event
重启服务进程:
service httpd restart
#可以看到进程的执行程序变成了:/usr/sbin/httpd.event
ps aux | grep httpd

MPM配置
/etc/httpd/conf/httpd.conf:
prefork的配置:

<IfModule prefork.c>
StartServers       8   #httpd进程启动以后不管有没有人访问,我们所要创建的几个空闲的子进程
MinSpareServers    5   #最小空闲子进程
MaxSpareServers   20   #最大空闲子进程
ServerLimit      256   #最大允许处于活跃状态的服务器子进程数量,一般设置为与MaxClients的值相同
MaxClients       256   #最大允许启动的服务器子进程的数量
MaxRequestsPerChild  4000  #一个子进程最多可以处理多少个请求,这里设置4000,意味着达到4000会被kill掉
</IfModule>

worker的配置:

<IfModule worker.c>
StartServers         4    #httpd进程启动以后不管有没有人访问,我们所要创建的几个空闲的子进程
MaxClients         300    #最大允许创建的线程数
MinSpareThreads     25    #最少空闲线程数
MaxSpareThreads     75    #最大空闲线程数
ThreadsPerChild     25    #每个子进程启动时生成的线程数
MaxRequestsPerChild  0    #一个子进程最多可以处理多少个请求,线程模型所以不限制了,这里的0标识无限制
</IfModule>

httpd2.4修改MPM机制,vim /etc/httpd/conf.modules.d/00-mpm.conf,使用哪种MPM机制就打开哪种机制的注释,并重启httpd服务即可:

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

#LoadModule mpm_worker_module modules/mod_mpm_worker.so

#LoadModule mpm_event_module modules/mod_mpm_event.so

修改后使用:httpd -M | grep mpm来查看当前的MPM机制

PV,UV,IP
PV:Page View
UV:User View
IP:访问IP量

4、DSO
配置指定实现模块加载
LoadModule <mod_name> <mod_path>

所有使用httpd -M显示为shared的模块,都是可以使用LoadModule来装载的

模块文件路径可使用相对路径:
相对于ServerRoot(默认/etc/httpd)

5、定义'Main' server的文档页面路径
ServerName 用来标识当前主机用于服务于谁的
DocumentRoot ""

文档路径映射:
DocumentRoot指向的路径为URL路径的起始位置
其相当于站点URL的根路径;

URL PATH与FileSystem PATH不是等同的,而是存在一种映射关系;
URL / --> FileSystem /var/www/html/
/images/logo.jpg --> /var/www/html/images/logo.jpg

6、站点访问控制常见机制
可基于两种机制指明对哪些资源进行何种访问控制
文件系统路径:
格式:

<Directory "">
...
</Directory>

<File "">
...
</File>

<FileMatch "PATTERN">
...
</FileMatch>

URL路径:

<Location "">
...
</Location>

<LocationMatch "PATTERN">
...
</LocationMatch>

<Directory>中"基于源地址"实现访问控制:
Options:定于特定目录下的资源如何被访问
后跟1个或多个以空白字符分隔的"选项"列表;
Indexes:指明的URL路径下不存在与定义的主页面资源相符的资源文件时,返回索引列表给用户;
FollowSymLinks:允许跟踪符号链接文件所指向的源文件(网站源代码或资源文件如果是链接自其它非网站指定目录的文件,是否允许被访问,指定该选项则代表允许);
None:什么选项都不用,最安全的做法;
All:启用除了MultiViews的所有选项;

mkdir /data/web/www/images
#-iname选项表示不区分大小写
find /usr/share -iname "*.jpg"
#将查找到的文件复制到/data/web/www/images目录下
find /usr/share -iname "*.jpg" -exec cp {} /data/web/www/images/ \;
ls /data/web/www/images/

然后客户端访问http://192.168.147.152/images由于配置文件中打开了Indexes选项,所有会显示整个目录,如果去除这个配置,则会显示403,但不影响访问它下面的图片文件,只是访问这个目录不被允许;

httpd-2.2的配置:
order和allow、deny
order:定义生效次序;写在后面的表示默认法则;

Allow from,Deny from
来源地址:
IP
NetAddr:
172.16
172.16.0.0
172.16.0.0/16
172.16.0.0/255.255.0.0

<Directory "/data/web/www">
Order allow,deny #这个次序代表不被允许的都拒绝访问
Deny from 192.168.147.139 #拒绝这个ip访问
Allow from 192.168   #允许这个网段访问
</Directory>

httpd-2.4:
基于IP控制:
Require ip IP地址或网络地址
Require not ip IP地址或网络地址
基于主机名控制:
Require host 主机名或域名
Require not host 主机名或域名

<Directory "/data/web/www/">
    Options Indexes FollowSymLinks
    AllowOverride None
    <Requireall>
        Require not ip 192.168.147.130 #拒绝该ip访问
        Require ip 192.168 #允许该网段访问
    </Requireall>
</Directory>

httpd-2.4
Require

示例:配置DocumentRoot路径和访问权限:

#创建目录,在目录下创建index.html文件  
mkdir -pv /data/web/www

修改vim /etc/httpd/conf/httpd.conf配置文件的DocumentRoot为:

DocumentRoot "/data/web/www"

重启服务:

systemctl restart httpd.service  

访问http://192.168.147.152/index.html页面之后提示:You don't have permission to access /index.html on this server.
需要在/etc/httpd/conf/httpd.conf文件中配置访问控制:

<Directory "/data/web/www">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted #代表允许所有人访问
</Directory>

重启服务:

systemctl restart httpd.service  

再次访问http://192.168.147.152/index.html 就可以了;注意:如果还是没有权限请检查防火墙和SELinux是否关闭;

控制页面资源允许所有来源的主机可访问:
httpd-2.2

<Directory "">
...
Order allow,deny  
Allow from all
<Directory>

httpd-2.4

<Directory "">
...
Require all granted
<Directory>

控制页面资源拒绝所有来源的主机可访问:
httpd-2.2

<Directory "">
...
Order allow,deny  
Deny from all
<Directory>

httpd-2.4

<Directory "">
...
Require all denied
<Directory>

7、定义站点主页面:
DirectoryIndex index.htm index.html.var

8、定义路径别名
格式:
Alias /URL/ "/PATH/TO/SOMEDIR/"

<IfModule alias_module>
    Alias /images/ "/usr/share/pixmaps/faces/" #定义别名
</IfModule>

<Directory "/usr/share/pixmaps/faces/">
    AllowOverride None
    Options Indexes FollowSymLinks
    Require all granted
</Directory>

9、设置默认字符集
AddDefaultCharset UTF-8
中文字符集:GBK、GB2312、GB18030

10、日志设定
日志类型:访问日志和错误日志

错误日志:
ErrorLog logs/error_log
LogLevel warn
Possible values Include:debug,info,notice,warn,error,crit,alert,emerg.

访问日志:
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
CustomLog logs/access_log combined
%h:客户端IP地址;
%l:Remote User,通常为一个减号("-");
%u:Remote user(from auth;may be bogus if return status (%s) is 401);非为登录访问时,其为一个减号;
%t:服务器收到请求时的时间;
%r:First line of request,即表示请求报文的首行;记录了此次请求的"方法","URL"以及协议版本;
%>s:响应状态码;
%b:响应报文的大小,单位是字节;不包括响应报文的http首部;
%{Referer}i:请求报文中首部"referer"的值;即从哪个页面中的超链接跳转至当前页面的;
%{User-Agent}i:请求报文中首部"User-Agent"的值;即发出请求的应用程序;

11、基于用户的访问控制

认证质询:
WWW-Authenticate:响应码为401,拒绝客户端请求,并说明要求客户端提供账号和密码;

认证:
Authorization:客户端用户填入账号和密码后再次发送请求报文;认证通过时,则服务器发送响应的资源;

认证方式有两种:
basic:明文
digest:消息摘要认证

安全域:需要用户认证后方能访问的路径;应该通过名称对其进行标识,以便于告知用户认证的原因;

用户的账号和密码存放于何处?
虚拟账号:仅用于访问某服务时用到的认证标识

存储:
文本文件;
SQL数据库;
ldap目录存储;

basic认证配置示例:
(1) 定义安全域

<Directory "">  
Options None 
AllowOverride None  
AuthType Basic  
AuthName "String"
AuthUserFile "/PATH/To/HTTPD_USER_PASSWD_FILE"  
Require user username1 username2 ...
</Dirctory>

允许账号文件中的所有用户登录访问:

Require valid-user

(2) 提供账号和密码存储(文本文件)
使用专用命令完成此类文件的创建及用户管理
htpasswd [options] /PATH/TO/HTTPD_PASSWD_FILE username
-c:自动创建此处指定的文件,因此,仅应该在此文件不存在时使用;
-m:md5格式加密
-s:sha格式加密
-D:删除指定用户
-b:批模式添加用户
htpasswd -b /PATH/TO/HTTPD_PASSWD_FILE username password

示例:
httpd自带命令htpasswd命令用于提供账户密码存储的文件

#使用htpasswd生成用户名密码到指定文件
htpasswd -c /tmp/test.users tom
#查看
cat /tmp/test.users
#再创建一个用户,就不能使用-c这个选创建一个新文件,如果存在则覆盖
htpasswd /tmp/test.users jerry
#查看
cat /tmp/test.users
#-b代表可以在用户名后面直接指定密码,-m代表使用md5加密,此为默认选项,不指定加密方式也用md5
htpasswd -b -m /tmp/test.users obama 123456
#查看
cat /tmp/test.users
#复制到httpd的conf.d目录下
mv /tmp/test.users /etc/httpd/conf.d/.htpasswd
#创建需要做权限控制的目录
mkdir /data/web/www/admin
#在目录内创建文件,并在index.html页面里写上admin area
vim /data/web/www/admin/index.html

创建配置文件vim /etc/httpd/conf.d/admin.conf:

<Directory "/data/web/www/admin">
        Options None
        AllowOverride None
        AuthType basic #basci认证方式
        AuthName "Admin Area,please enter username and password." #认证提示信息
        AuthUserFile "/etc/httpd/conf.d/.htpasswd"  #认证的用户信息配置文件
        Require user jerry obama  #允许访问的用户
</Directory>
#检查语法错误和重启服务
httpd -t
systemctl restart httpd.service

另外:基于组账号进行认证;
(1) 定义安全域

Options None 
AllowOverride None  
AuthType Basic  
AuthName "String"
AuthUserFile "/PATH/To/HTTPD_USER_PASSWD_FILE"  
AuthGroupFile "/PATH/TO/HTTPD_GROUP_FILE"
Require group grpname1 grpname2 ...

(2) 创建用户账号和组账号文件;
组文件:每一行定义一个组
GRP_NAME:username1 username2 ...

创建组配置文件:vim /etc/httpd/con.d/.htgroup:

animals: tom jerry  #创建一个animals组,下面有tom何jerry

修改之前的配置文件:

<Directory "/data/web/www/admin">
        Options None
        AllowOverride None
        AuthType basic
        AuthName "Admin Area,please enter username and password."
        AuthUserFile "/etc/httpd/conf.d/.htpasswd"
        AuthGroupFile "/etc/httpd/conf.d/.htgroup"
        Require group animals
</Directory>
#检查语法错误和重启服务
httpd -t
systemctl restart httpd

12、虚拟主机
站点标识:socket
IP相同,但端口不同;
IP不同,但端口均为默认端口;
FQDN不同;
请求报文中首部
Host:www.baidu.com

有三种实现方案:
基于ip:
为每个虚拟主机准备至少一个ip地址;
基于port:
为每个虚拟主机使用至少一个独立的port;
基于FQDN:
为每个虚拟主机使用至少一个FQDN;

注意(专用于httpd-2.2):一般虚拟主机不要与中心主机混用;因此,要使用虚拟主机,得先禁用'main'主机:
禁用方法:注释中心主机的DocumentRoot指令即可;

虚拟主机的配置方法:

<VirtualHost IP:PORT>
ServerName FQDN  
DocumentRoot ""
</VirtualHost>

其他可用指令:
ServerAlias:虚拟主机的别名;可多次使用;
ErrorLog:
CustomLog:
<Directory "">
...

Alias
...

示例:

#创建虚拟主机目录,并在两个目录中分别创建index.html文件
mkdir /data/web/{ilinux,iunix} 
#查看ip
ip addr list
#为该网卡添加新的ip
ip addr add 192.168.147.153/24 dev ens33
#用ip addr list简写查看
ip a l

编写第一个虚拟主机的配置文件vim /etc/httpd/conf.d/ilinux.conf:

<VirtualHost 192.168.147.152:80>
        ServerName www.ilinux.io
        DocumentRoot "/data/web/ilinux"
        <Directory "/data/web/ilinux">
                Options None
                AllowOverride None
                Require all granted
        </Directory>
        CustomLog "logs/ilinux_access_log" combined
</VirtualHost>

编写第二个虚拟主机的配置文件vim /etc/httpd/conf.d/iunix.conf:

<VirtualHost 192.168.147.153:80>
        ServerName www.iunix.io
        DocumentRoot "/data/web/iunix"
        <Directory "/data/web/iunix">
                Options None
                AllowOverride None
                Require all granted
        </Directory>
        CustomLog "logs/iunix_access_log" combined
</VirtualHost>
#检查语法
httpd -t 
#重启服务
systemctl restart httpd

之后就可以分别访问http://192.168.147.152,http://192.168.147.153查看不同效果了.
如果希望按照端口不同的配置方式:

#先删除153这个ip
ip addr delete 192.168.147.153/24 dev ens33
#查看
ip a l

修改配置文件vim /etc/httpd/conf.d/iunix.conf:

Listen 81 #记得侦听81端口
<VirtualHost 192.168.147.152:81>
        ServerName www.iunix.io
        DocumentRoot "/data/web/iunix"
        <Directory "/data/web/iunix">
                Options None
                AllowOverride None
                Require all granted
        </Directory>
        CustomLog "logs/iunix_access_log" combined
</VirtualHost>
#检查语法
httpd -t 
#重启服务
systemctl restart httpd-d

之后就可以分别访问http://192.168.147.152,http://192.168.147.152:81查看不同效果了.
如果希望基于不同主机名访问的分别修改两个配置方式:

<VirtualHost *:80>
        ServerName www.ilinux.io
        DocumentRoot "/data/web/ilinux"
        <Directory "/data/web/ilinux">
                Options None
                AllowOverride None
                Require all granted
        </Directory>
        CustomLog "logs/ilinux_access_log" combined
</VirtualHost>
<VirtualHost *:80>  #*:80 代表这台服务器上的所有ip
        ServerName www.iunix.io
        DocumentRoot "/data/web/iunix"
        <Directory "/data/web/iunix">
                Options None
                AllowOverride None
                Require all granted
        </Directory>
        CustomLog "logs/iunix_access_log" combined
</VirtualHost>
#检查语法
httpd -t 
#重启服务
systemctl restart httpd-d
#查看之前的定义日志在此目录中
ls /var/log/httpd/

然后修改客户端hosts文件,就可以通过www.ilinux.io,www.iunix.io来访问了
特别注意:关闭防火墙和selinux

#查看防火墙规则
iptables -L -n
#清空防火墙规则,这种清理值对当前有效
iptables -F
#CentOS7停止防火墙,这种清理值对当前有效
systemctl stop firewalld.service
#禁用防火墙,开机不自启动
systemctl disable firewalld.service

setenforce 0vim /etc/selinux/config文件将SELINUX=disabled,曾今在这个selinux上卡了很久,检查防火墙都ok的,文件一直403没权限访问.

注意:如果是httpd-2.2,则使用基于FQDN的虚拟主机时,需要实现使用如下指令:
NameVirtualHost IP:PORT
也就是说在这个ip和端口开放基于FQDN访问虚拟主机.httpd-2.4不用;

13.status页面(内建的状态页面)
LoadModule status_module modules/mod_status.so

httpd-2.2:

<Location /server-status>
SetHandler server-status  
Order allow,deny
Allow from 192.168
</Location>

httpd-2.4:

<Location /server-status>
    SetHandler server-status  
    <RequireAll>
        Require ip 192.168
    </RequireAll>
</Location>
#查看模块是否被装载
httpd -M | grep status
#编辑配置文件
vim /etc/httpd/conf.d/iunix.conf

配置文件如下

<VirtualHost *:80>
        ServerName www.iunix.io
        DocumentRoot "/data/web/iunix"
        <Directory "/data/web/iunix">
                Options None
                AllowOverride None
                Require all granted
        </Directory>
        CustomLog "logs/iunix_access_log" combined
        <Location /server-status>  #指定服务器状态页面
                SetHandler server-status
                <RequireAll>
                        Require ip 192.168  #允许访问的网段
                </RequireAll>
        </Location>
</VirtualHost>

14.user/group
指定以哪个用户的身份运行httpd服务器进程;
在配置文件中/etc/httpd/conf/httpd.conf查看:

User apache  
Group apache  

15.使用deflate_module模块压缩页面优化传输速度
适用场景:
(1) 节约带宽,额外消耗CPU;同时,可能有些较老浏览器不支持;
(2) 压缩适于压缩的资源,例如文本文件;

创建压缩配置文件vim /etc/httpd/conf.d/compression.conf:

#设置过滤器名为DEFLATE,过滤器名可以随意定义
SetOutputFilter DEFLATE  
#根据文件的MIME类型做过滤
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/css

#指明压缩比(Highest9 - Lowest1)
DeflateCompressionLevel 9

#判断user-agent来做相应的压缩机制
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

16.https,http over ssl

#查看mod_ssl信息
yum info mod_ssl
#查看是否安装
httpd -M | grep ssl
#安装
yum install -y mod_ssl
#查看生成的文件
rpm -ql mod_ssl

139作为CA服务器

#创建私钥
cd /etc/pki/CA
(umask 077;openssl genrsa -out private/cakey.pem 2048)
#生成自签证书
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365

152作为SSL主机服务器

cd /etc/httpd
mkdir ssl
cd ssl
#创建私钥
(umask 077;openssl genrsa -out httpd_key.pem 1024)
#生成证书用于CA机构签发
openssl req -new -key httpd_key.pem -out httpd_csr.pem
#将自己生成的证书文件复制到CA服务器的/tmp目录下
scp httpd_csr.pem root@192.168.147.139:/tmp

回到139,CA服务器

cd /etc/pki/CA
touch index.txt serial
echo 01 > serial
#签发证书
openssl ca -in /tmp/httpd_csr.pem -out certs/httpd_crt.pem
#将签发好的证书复制到SSL主机服务器
scp certs/httpd_crt.pem root@192.168.147.152:/etc/httpd/ssl

回到152,配置ssl证书

#查看虚拟主机设定
httpd -t -D DUMP_VHOSTS

编辑ssl配置文件,vim /etc/httpd/conf.d/ssl.conf:

#这台服务器只有152这一个ip,所以不做修改
<VirtualHost _default_:443>  
#设置主机名和访问根目录
DocumentRoot "/data/web/ilinux"
ServerName www.ilinux.io:443

#设置ssl证书
SSLCertificateFile /etc/httpd/ssl/httpd_crt.pem
#设置加密文件 
SSLCertificateKeyFile /etc/httpd/ssl/httpd_key.pem

在虚拟机139这台CA服务器上打开火狐,首选项-->高级-->证书-->查看证书-->证书机构-->导入-->选择/etc/pki/CA/cakey.pem后就可以正常访问了
同样在139上也可以使用以下命令测试(由于之前火狐浏览器在这台机器上添加了证书为受信任的机构):
测试:

openssl s_client -connect www.ilinux.io:443 -CAfile /etc/pki/CA/cacert.pem

17.httpd自带的工具程序
htpasswd:basic认证基于文件实现时,用到的账号密码文件生成工具;
apachectl:httpd自带的服务控制脚本,支持start和stop;
apxs:由httpd-devel包提供,扩展httpd使用第三方模块的工具;
rotatelogs:日志滚动工具;
suexec:访问某些有特殊权限配置的资源时,临时切换至指定用户身份运行;
ab:apache bench;

18.httpd的压力测试工具
ab,webbench,http_load,seige

jmeter,loadrunner

Shell
1
https://gitee.com/abcd1234567_1/linux.git
git@gitee.com:abcd1234567_1/linux.git
abcd1234567_1
linux
Linux学完就忘系列
master

搜索帮助