httpd服务详解及基于openssl的使用

httpd常见特性

1.事先创建空闲进程。

2.按需维持适当的进程。

3.使用模块化设计,核心比较小,各种功能都以模块方式添加。

4.支持运行时配置,支持单独编译模块。

5.支持多种方式的虚拟主机配置。

6.支持https协议,通过mod_ssl模块实现。

7.支持用户认证

8.支持基于IP或主机名的ACL 

9.支持基于每目录的访问控制。

10.支持URL重写。


MPM(Mulit Path Modules)多道处理模块。

mpm_winnt windows上专用的线程处理机制。


perfork 

预先生成多个进程,一个进程响应单个请求。

稳定性高,性能差。

单个进程崩溃不会影响到其他进程,但是会消耗大量的系统资源,特别是并发处理时要进行大量的进程切换。


worker 

启动多个进程,每个进程下生成多个线程响应多个请求。单个线程响应单个请求。

效率高,多个线程共享一个资源。但是会产生资源竞争问题。目前在linux上性能不如perfork高。


event 

基于事件驱动,一个进程同时处理多个请求。一个进程响应多个请求。


httpd更改所使用的模型,修改/etc/sysconfig/httpd。


虚拟主机:

物理服务器只有1个。

web程序只有1个。

却可以服务多个不同的站点。


常见类型:

默认主机,若使用此必须定义在第一个。

_default_:PORT

_default_:* 监听任意端口

_default_:80 监听80端口


基于IP的虚拟主机

IP1:PORT

IP2:PORT


基于端口的虚拟主机

IP:PORT1

IP:PORT2


基于域名的虚拟主机

IP:PORT

*:PORT 全部主机都监听同一个端口

ServerName不同






httpd:

安装:

httpd受SElinux控制的,所以需要先设置为permssive。


1.rpm包

#yum -y install httpd



2.源码编译


相关文件目录:

/usr/sbin/httpd 执行进程服务

主导进程(master process)

属主为root,属组为root。第一个进程,负责维护空闲进程。


工作进程(worker process)

属主为apache,属组为apache。


/etc/rc.d/init.d/httpd 服务脚本

启动后占用TCP的80端口,https占用TCP的443端口。


/etc/sysconfig/httpd 

为httpd服务脚本的配置文件。


/etc/httpd 

以rpm包安装后的工作根目录,相当于程序的安装目录。


/etc/httpd/conf 配置文件目录


/etc/httpd/conf/httpd.conf 主配置文件


/etc/httpd/conf.d/*.conf 

主配置文件的组成部分。在主配置文件中使用include包含此目录下的文件

welcome.conf 欢迎界面的配置文件。


/etc/httpd/modules 

模块路径,此路径为链接,指向/lib/httpd/。


/etc/httpd/logs 

日志目录,此路径为链接,指向/var/log/httpd/。

访问日志:access_log

客户端发起的请求及服务端响应的结果。

错误日志:err_log

错误的访问、服务器错误信息等。


/var/www/html 静态页面所在路径


/var/www/cgi-bin 

动态内容所在路径,CGI:Common Gateway Interface 通用网关接口。


/var/www/error/*

错误页面文件位置,可以自定义。


/etc/sysconfig/httpd

#HTTPD=/usr/sbin/httpd.worker 默认是使用perfork模式。若修改则取消注释并修改。



/etc/httpd/conf/httpd.conf

指令结构:

指令(directive) 值(value)

指令不区分字符大小写,值则根据需要进行是否区分大小写。


全局配置(Global Enviroment)

Servertokens OS|... 指定显示httpd显示详细信息的程度。


Serverroot "/etc/httpd" 指定httpd的根路径。


PidFile run/httpd.pid 指定pid文件的路径,此路径为相对路径。


Timetou 120 指定TCP三次握手建立连接,第一次握手成功成功等待第二次确认的超时时间。


KeepAlive on 是否启动长连接。


MaxKeepAliveRequests 100 指定长连接响应的个数,0表示无限制。


KeepAliveTimeout 15 长连接的断开时间为15秒。


<IfModule perfork.c>

StartServers 8 启动服务后生成空闲进程个数。


MinSpareServers 5 最少空闲进程,保证服务运行中最少空闲进程的个数。如不够则生成新空闲进程。


MaxSpareServers 20 最大空闲进程,如果空闲进程大于设定,则关闭多余进程。


ServerLimit 256 指定MaxClient的上限值。


MaxClient 256 最大客户端数,允许同时连接服务器的客户端个数。


MaxRequestsPerChild 4000 单个进程最大响应次数。超过此则结束进程重新生成。

</IfModule>


<IfModule worker.c>

StartServers 2 启动的进程数。


MaxClient 150 最大客户端数。


MinSpareThreads 25 最小空闲总线程数。


MaxSpareThreads 75 最大空闲总线程数。


TheardsPerChild 25 每个进程生成的最大线程数。


MaxRequestsPerChild 0 每个进程的最大响应数。这里因为使用线程,所以无法限定。

</IfModule>


Listen 80 指定监听端口,可监听多端口。


LoadModule MODNAME MODDIR 需要加载加载模块,指定模块名称和路径。


Include conf.d/*.conf 将该目录下的.conf文件的配置信息包含进来。


User apache 指定普通进程的属主。


Group apache 指定普通进程的属组。


中心服务器配置('Main' server configuration)

ServerAdmin MAILADDR 定义管理员的邮箱地址。


#ServerName SSERVERNAME:PORT 若注释掉,则则启动服务时会尝试反解析主机名,如果解析不到则报错。


DocumentRoot "/var/www/html" 指定网页文件存放位置。

<directory "/var/www/html">

Options OPTION

None 不支,km持任何选项。

Indexes 允许以目录索引的方式显示文件。一般用作提供文件下载的场景下使用。

FollowSymLinks 允许跟随符号链接,允许访问符号链接对应的源文件。会带来安全性问题,一般建议不使用。

Includes 允许执行服务器端包含,允许执行SSI格式网页文件,会带来安全问题,一般建议不使用。

SymLinksifOwnerMatch 对FollowSymLinks更进一步限定,允许执行符号链接,但是链接的的属主要同执行httpd进程的用户相同。一般建议不使用

ExecCGI 允许执行CGI脚本。

MultiViews 允许多视图。根据客户端来源的语言和文字判定显示对应的网页。

ALL 启用所有选项。


AllowOverride OPTION 允许覆盖ACL

All

None

AuthConfig 使用自定义的账号验证文件进行验证。 

Limit

FileInfo


Order allow,deny 指定ACL的模式为白名单(allow,deny)或者是黑名单(deny,allow)。


Allow form all 定义ACL列表,基于IP、主机名、网络地址

#Deny from


AuthType Basic 指定认证类型

AuthName "DESCRIPTION" 显示描述信息

AuthUserFile DIR 指定认证用户账号文件存放路径,例如/user/local/apache/passwd/paaaswords

AuthGroupFile DIR 指定认证用户组组文件路径,文件格式为GROUPNAME:USER1 USER2 ...


Require all granted 允许全部访问

Require all denied 全部禁止访问

Require user USERNAME 允许单个用户。

Require group GROUPNAME 允许某个组中的用户。

Require valid-user 认证用户账号中出现的账号都允许登陆

</directory>


DiretcoryIndex index.html index.html.var 定义默认显示的访问页面,优先级从左自右匹配。


AccessFileName .htaccess 定义基于每目录的访问控制。


<file ~ "^\.ht"> 匹配以.ht开头的文件 

Order allow,deny

Deny from all

</file>


TypeConfig /etc/mime.types 指定定义mime类型的文件


DefaultType text/plain 指定默认类型


HostnameLookups off 是否在日志中记录主机名的反解析信息


Errorlog logs/error_log 指定错误日志文件


LogLevel LEVEL 指定日志级别

LogFormat FORMAT TYPENAME 指定日志格式和名称

%h 远程主机地址

%l 远程主机登录名称

%u 登陆网站认证的用户名

%t 日志事件产生的时间

%r 请求报文的第一行

%s 最后一次请求的状态码

%b 相应报文的大小

%{Foobar}i 对应Foobar指定行的内容

 

CustomLog logs/access_log combind 定义访问日志文件以及要应用的日志格式。


Alias /ALIASNAME "DIR" 为某个路径设定别名。


虚拟主机(Virtual Hosts)

ServerName SERVERNAME

ServerAlias HOSTNAME  指定虚拟主机的主机别名

ScriptAlias SCRIPTNAME 指定脚本的别名


<Location "URLDIR"> 定义访问URL地址的权限方法等。

SetHandler server-status 实现匹配到的文件由对应的处理器进行处理动作。

Order Deny,allow

Deny form all

Allow from .foo.com

</Location>


<VirtualHost HOST> 这里HOST根据类型不同有不同写法,具体看上边对虚拟主机的相关。


</VirtualHost>

#DocumentRoot 若要启动虚拟主机则要在主服务器配置中禁用次项。


或者在/etc/httpd/conf.d/下新建单独的配置文件。


例如,创建虚拟主机,使用3种模式,同时分离日志,启动访问策略,禁止192.168.1.4访问。iaa.com访问的时候需要提供账号密码。:

#cd /etc/httpd/conf.d

#vim vh.conf

<VirtualHost 192.168.1.3:80>

ServerName www.test.com

DocumentRoot "/www/test.com"

CustomLog /var/log/httpd/test.com/access_log combind

</VirtualHost>


<VirtualHost _default_:80>

ServerName _default_

DocumentRoot "/www/default80"

</VirtualHost>


<VirtualHost 192.168.1.4:80>

ServerName abc.iaa.com

DocumentRoot "/www/iaa.com"

CustomLog /var/log/httpd/iaa.com/access_log combind

<Directory "/www/iaa.com">

Options none

AllowOverride authconfig

AuthType Basic 

AuthName "loggin" 

AuthUserFile "/etc/httpd/.htpasswd" 

Require valid-user

</Directory>

</VirtualHost>


<VirtualHost 192.168.1.4:8080>

ServerName www.ibb.net

DocumentRoot "/www/ibb.net"

CustomLog /var/log/httpd/ibb.net/access_log combind

</VirtualHost>


NameVitualHost 192.168.1.4:80

<VirtualHost 192.168.1.4:80>

ServerName www.idd.gov

DocumentRoot "/www/idd.gov"

CustomLog /var/log/httpd/idd.gov/access_log combind

<Directory "/www/idd.gov">

Opitons none

AllowOverride none

Order deny,allow

Deny from 192.168.1.14

</Diretctor>

</VirtualHost>


#cd /etc/httpd/conf/

#mkdir -pv /www{test.com,iaa.com,bii.net,idd.gov,default80}

#vim /www/test.com/index.html

#vim /www/iaa.com/index.html

#vim /wwww/ibb.net/index.html

#vim /wwww/idd.gov/index.html

#vim /wwww/default80/index.html


#ip addr add 192.168.1.4/24 device eth0

#vim httpd.conf

Listen 8080

#vim /etc/hosts


#cd /var/log/httpd/

#mkdir test.com iaa.com ibb.net idd.gov


#htpasswd -c -m /etc/httpd/.htpasswd tom

#htpasswd -m /etc/httpd/.htpasswd jerry


#systemclt restart httpd


注意:基于主机的访问,若直接输入ip地址,则会先显示www.iaa.com。即先返回配置文件中第一个符合的主机。



#httpd [OPTION]

[OPTION]

-l 列出当前支持模块。

-t 检测配置文件语法正确性。

-M 显示所有额外装载的模块。


#httpd.work 显示使用worker模型下支持的模块。


#httpd.envet 显示使用event模型下支持的模块。


#elinks [OPTION] URL 纯文本界面下的浏览器

[OPTION]

-dump 显示网页后立即退出,不在进入交互模式。

-source 显示网页源代码


#htpasswd [OPTION] FILE USERNAME [PASSWORD] 创建AuthConfig用户认证文件。

[OPTION]

-c 创建文件,只有第一次创建时使用,若文件已存在则会被清空

-n 用户的密码以md5方式存放的

-D 删除用户

 




压力测试工具:

ab

LoadRunner




SElinux:

配置文件:

/etc/selinux/config

/etc/sysconfig/selinux


#getenforce 查看SElinux状态

#setenforce NUM 临时设置SELinux状态

NUM

0 permissive 

1 enforcing


FireWall

#systemctl stop firewalld 停止防火墙

#systemclt disable firewalld 禁用防火墙服务



基于openssl的httpd服务配置

mod_ssl ssl的模块包,使用yum安装httpd必须要安装此包。


证书服务器上:

生成私钥:

#cd /etc/pki/CA

#(umask 077;openssl genrsa -out private/cakey.pem 2048)


编辑证书默认信息:

#vim ../tls/openssl.cnf


生成自签证书:

#openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365

修改配置文件:

#vim ../tls/openssl.cnf

dir=/etc/pki/CA


#mkdir certs crl newcerts 根据配置文件的内容创建相关的文件夹和文件

#touch index.txt

#echo 00 > serial



签署证书:

#openssl ca -in /tmp/httpd.csr -out /tmp/httpd.crt -dyas 3650





httpd服务器上:

放置证书:

#cd /etc/httpd/

#mkdir ssl

#cd ssl

#(umask 077;openssl genrsa 1024 > httpd.key )

#openssl req -new -key httpd.key -out httpd.csr 生成证书请求。

Common Name: 要使用证书的虚拟主机的名称。


将生成的证书请求文件复制到证书服务器:

#scp httpd.scr [email protected]:/tmp


将颁发的证书复制到本机:

#scp 192.168.100.4:/tmp/httpd.crt ./

#ll

httpd.crt

httpd.csr

httpd.key


配置ssl模块配置文件:

#cd /etc/httpd/conf.d/

#vim ssl.conf

SSLEngine on 启用ssl功能

SSLCertificateFile /etc/httpd/ssl/httpd.crt 指定ssl证书文件

SSLCertificateKeyFile /etc/httpd/ssl/http.key 指定私钥文件。

验证效果:

使用https://SERVER 访问即可查看证书信息


你可能感兴趣的:(apache,httpd,OpenSSL)