共计 10715 个字符,预计需要花费 27 分钟才能阅读完成。
目录:
一、httpd 服务基本介绍
二、httpd-2.2 常用小选项配置
三、httpd-2.2 VirtualHost 配置
四、httpd-2.2 的基于 https 的安全访问
————————————–
一、httpd 服务基本介绍:
httpd 是 Apache 超文本传输协议(HTTP)服务器的主程序。被设计为一个独立的运行的后台进程,它会建立一个出来请求的子进程或线程的池。通常 httpd 不被直接调用,而是由 apachectl 调用。http 是一个应用程的协议,它可以分为 http 和 https,它们分别使用 tcp 协议端口的 80 和 443 端口。
请求响应方式:
客户端需要访问某资源时会向服务器发送 http 请求报文,服务器根据客户端请求信息做出 http 响应报文,所以一次 http 事务就是 http 请求然后 http 会给予请求响应。
web 资源:
资源的标识:URL:用于标识 web 资源所在的位置。
格式:协议:// 主机地址或者主机名[:端口][/ 目录资源]
静态资源:不需要服务器做任何操作处理,例如.JGP .PNG 格式的文件等
动态资源:服务器需要执行一些程序做出处理后返回给客户端请求所需要的信息,例如.php .js
一次完整的 htpt 请求处理过程:
(1)建立或处理连接:接收请求或者是拒绝请求
(2)接收请求:接收客户端主机请求报文中对某个资源的一次请求过程
(3)处理请求:对请求报文进行解析,获取客户端请求的资源及请求方法相关信息
(4)访问资源:获取请求报文中请求的资源
(5)构建响应报文
(6)发送响应报文
(7)记录日志
并发访问响应模型:
单进程 I / O 模型:启动一个进程处理用户请求,一次只能处理一个请求对公请求被串行响应
多进程 I / O 模型:并行启动多个进程,每个进程响应一个请求
复用进程 I / O 模型:一个进程响应多个请求
多线程模式:一个进程生成多个线程,一个线程处理一个请求
事件驱动模式:一个进程直接响应多个请求
复用多进程 I / O 模型:启动多个进程,每个进程生成多个线程,响应请求的数量就是线程乘以进程
httpd 工作模式:
prefork:多进程模式:一个主进程多个子进程,一个进程只响应一个请求。一个主进程负责生成子进程及回收子 进程,接收请求,派发请求给子进程处理,生成的多个子进程中每个子进程负责处理一个请求。
worker:多进程多线程模式:一个线程响应一个用户请求。一个主进程负责生成子进程及回收及进程,创建套接字,派发请求给子进程处理。多个子进程负责生成多个线程。每个线程负责响应用户请求。
event:事件驱动模式:多进程模式:一个进程响应多个用户请求。一个主进程负责生成子进程及回收及进程,创建套接字,派发请求给子进程处理。子进程负责基于事件驱动机制直接来响应用户的请求。
二、httpd 常用选项配置
1、监听端口
Listen 80 ## 监听本机的 80 端口
Listen 8080 ## 监听本机的 8080 端口
Listen 192.168.1.100:80 ## 监听特定 IP 的 80 端口
Listen 192.168.1.101:8080 ## 监听指定 IP 的特定端口
2、保持连接
KeepAlive Off|ON ## 是否允许持续性连接,即建立一次 tcp 连接完成多个文件传输
MaxKeepAliveRequests 100 ## 最大保存连接请求数量
KeepAliveTimeout 15 ## 保存持续性连接超时时间
3、MPM 多路处理模块
[root@linuxidc ~]# ps aux | grep httpd ## 查看 httpd 使用的 MPM 模块
root 5012 0.0 0.3 185928 3972 ? Ss 23:44 0:00 /usr/sbin/httpd
apache 5022 0.0 0.2 186060 2492 ? S 23:44 0:00 /usr/sbin/httpd
apache 5023 0.0 0.2 186060 2508 ? S 23:44 0:00 /usr/sbin/httpd
apache 5024 0.0 0.2 186060 2492 ? S 23:44 0:00 /usr/sbin/httpd
apache 5025 0.0 0.2 186060 2492 ? S 23:44 0:00 /usr/sbin/httpd
apache 5026 0.0 0.2 186060 2492 ? S 23:44 0:00 /usr/sbin/httpd
apache 5027 0.0 0.2 186060 2492 ? S 23:44 0:00 /usr/sbin/httpd
apache 5028 0.0 0.2 186060 2492 ? S 23:44 0:00 /usr/sbin/httpd
apache 5029 0.0 0.2 186060 2492 ? S 23:44 0:00 /usr/sbin/httpd
root 5064 0.0 0.0 103304 892 pts/2 S+ 23:55 0:00 grep httpd
[root@linuxidc ~]# httpd -l ##### 我们从中可以看出使用的是默认 preforkmok
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c
如果需要更改我们默认使用的模块方法:
[root@linuxidc ~]# vim /etc/sysconfig/httpd
HTTPD=/usr/sbin/httpd.worker
————————– ———————————-
<IfModule prefork.c>###prefork 模块配置
StartServers 8 #启动 httpd 时预先创建几个子进程数量
MinSpareServers 5 #最小空闲进程数量
MaxSpareServers 20 #最大空闲进程数量
ServerLimit 256 #服务器同一时间内能够响应进程的数量
MaxClients 256 #最多可以允许客户端并发请求连接数量
MaxRequestsPerChild 4000 #每个子进程能够响应的最大请求数量
</IfModule>
<IfModule worker.c>##worker 模块配置
StartServers 4 #启动 httpd 是预先创建几个字进程数量
MaxClients 300 #最多允许客户端并发请求连接数量
MinSpareThreads 25 #最小空闲进程数量
MaxSpareThreads 75 #最大空闲进程数量
ThreadsPerChild 25 #进程启动时候生成的线程数量
MaxRequestsPerChild 0 #每个子进程能够响应的最大请求数量
</IfModule>
4、DSO(动态加载或卸载模块)
# Example:
# LoadModule foo_module modules/mod_foo.so
#
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
5、基于 ip 来源访问控制
<Directory “/var/www/html”>
Options Indexes FollowSymLinks #定义资源展示方式
AllowOverride None
Order allow,deny
Allow from all
deny from 192.168.1.100 ### 禁止 192.168.1.100 访问网站
</Directory>
6、定义站点主页面
DirectoryIndex index.html index.html.var(有多个文件自左而又查找)
7、定义路径别名
[root@linuxidc ~]# mkdir -p /etc/url/index.html ### 建立别名链接文件
[root@linuxidc ~]# vim /etc/httpd/conf/httpd.conf
Alias /bbs/ “/etc/url/” ## 编辑主配置文件设置路径别名连接
测试:
[root@linuxidc ~]# curl 192.168.1.100/bbs/index.html
url alias
8、基于用户访问认证控制
第一种:基于用户账号进行认证
1)主配置文件中添加认证区域内容:
[root@linuxidc ~]# vim /etc/httpd/conf/httpd.conf
<Directory “/var/www/html”>
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
deny from 192.168.1.100
添加内容 ##
AuthType Basic ### 定义认证的类型:明文(basic)或密文(digest)
AuthName “admin use zone” ### 提示信息
AuthUserFile “/etc/httpd/conf/.htpasswd” ### 认证用户文件存放路径
Require valid-user #### 允许用户文件中的所有用户登录
</Directory>
2)提供用户账号和密码文件:
[root@linuxidc ~]# htpasswd -c -m /etc/httpd/conf/.htpasswd tom
[root@linuxidc ~]# htpasswd -m /etc/httpd/conf/.htpasswd jerry
3)检查配置文件重新加载
[root@linuxidc ~]# httpd -t
Syntax OK
[root@linuxidc ~]# service httpd reload
Reloading httpd:
第二种:基于组账号进行认证
1)
[root@linuxidc ~]# vim /etc/httpd/conf/httpd.conf
<Directory “/var/www/html”>
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
deny from 192.168.1.100
添加内容 ##
AuthType Basic ### 定义认证的类型:明文(basic)或密文(digest)
AuthName “admin use zone” ### 提示信息
AuthUserFile “/etc/httpd/conf/.htpasswd” ## 定义用户账号文件
AuthGroupFile “/etc/httpd/conf/.hgpasswd” ### 定义组账号文件
Require group groupuser ### 定义组账号文件中允许访问的用户
</Directory>
2)建立用户
[root@linuxidc ~]# htpasswd -c -m /etc/httpd/conf/.htpasswd user1
[root@linuxidc ~]# htpasswd -m /etc/httpd/conf/.htpasswd user2
3)建立组账号文件
[root@linuxidc ~]# vim /etc/httpd/conf/.hgpasswd
groupuser:user1 user2
4)检查配置文件重新加载
[root@linuxidc ~]# httpd -t
Syntax OK
[root@linuxidc ~]# service httpd reload
Reloading httpd:
9、status 页面
1)确保模块加载:LoadModule status_module modules/mod_status.so
2)开启 228 行 ExtendedStatus On
3)编辑 status 区域
<Location /var/www/html/server-status>
SetHandler server-status
Order allow,deny
Allow from 192.168
</Location>
4)检查配置文件正确否,加载服务
5)访问
Apache Server Status for 192.168.1.100
Server Version: Apache/2.2.15 (Unix) DAV/2
Server Built: Jul 24 2015 11:52:28
Current Time: Thursday, 12-May-2016 01:24:37 CST
Restart Time: Thursday, 12-May-2016 01:22:20 CST
Parent Server Generation: 7
Server uptime: 2 minutes 16 seconds
Total accesses: 4 – Total Traffic: 0 kB
CPU Usage: u0 s0 cu0 cs0
.0294 requests/sec – 0 B/second – 0 B/request
1 requests currently being processed, 7 idle workers
____W___………………………………………………..
……………………………………………………….
……………………………………………………….
……………………………………………………….
Scoreboard Key:
10、运行 httpd 服务的属主和属组
User apache
Group apache
11、使用 mod_deflate 模块压缩页面优化传输速度
SetOutputFilter DEFLATE
# mod_deflate configuration
# Restrict compression to these MIME types
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
# Level of compression (Highest 9 – Lowest 1)
DeflateCompressionLevel 9
# Netscape 4.x has some problems.
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
三、httpd-2.2 VirtualHost 配置
1、基于 IP 的 virtualhost:(事先准备好两个 IP)
1)编辑配置文件设置如下:
<VirtualHost 192.168.1.100:80>
DocumentRoot “/web/vhosts/www1”
ServerName www1.a1.com
ErrorLog “/var/log/httpd/www1.err”
CustomLog “/var/log/httpd/www1.access” common
</VirtualHost>
<VirtualHost 192.168.1.101:80>
DocumentRoot “/web/vhosts/www2”
ServerName www2.a2.com
ErrorLog “/var/log/httpd/www2.err”
CustomLog “/var/log/httpd/www2.access” common
</VirtualHost>
2)修改下
DocumentRoot “/web/vhosts/”
3)建立网页文件
[root@linuxidc ~]# mkidr -p /web/vhosts/www1/index.html
[root@linuxidc ~]# mkidr -p /web/vhosts/www2/index.html
4)检查配置文件是否正确,然后重启或加载,ok 后测试结果
[root@linuxidc ~]# httpd -t
Syntax OK
[root@linuxidc ~]# service httpd reload
5)查看我们的日志文件
[root@linuxidc ~]# cat /var/log/httpd/www1.access
192.168.1.103 – – [12/May/2016:02:14:04 +0800] “GET / HTTP/1.1” 200 25
[root@linuxidc ~]#
[root@linuxidc ~]#
[root@linuxidc ~]# cat /var/log/httpd/www
www1.access www1.err www2.access www2.err
[root@linuxidc ~]# cat /var/log/httpd/www1.err
2、基于端口的 virtualhost
1)编辑配置文件设置如下:
<VirtualHost 192.168.1.100:80>
DocumentRoot “/web/vhosts/www1”
ServerName www1.a1.com
ErrorLog “/var/log/httpd/www1.err”
CustomLog “/var/log/httpd/www1.access” common
</VirtualHost>
<VirtualHost 192.168.1.100:8080>
DocumentRoot “/web/vhosts/www2”
ServerName www2.a2.com
ErrorLog “/var/log/httpd/www2.err”
CustomLog “/var/log/httpd/www2.access” common
</VirtualHost>
2)设置监听地址
Listen 80
Listen 8080
3)检查然后重新加载服务,测试
3、基于 FQDN 的 virtualhost
1)开启虚拟主机域名
NameVirtualHost 192.168.1.100:80
2)编辑配置文件设置如下:
<VirtualHost 192.168.1.100:80>
DocumentRoot “/web/vhosts/www1”
ServerName www1.a1.com
ErrorLog “/var/log/httpd/www1.err”
CustomLog “/var/log/httpd/www1.access” common
</VirtualHost>
<VirtualHost 192.168.1.100:80>
DocumentRoot “/web/vhosts/www2”
ServerName www2.a2.com
ErrorLog “/var/log/httpd/www2.err”
CustomLog “/var/log/httpd/www2.access” common
</VirtualHost>
3)解析域名,此处我就用 hosts 文件来解析了
[root@linuxidc ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.0.1 server.magelinux.com server
192.168.1.100 www1.a1.com
192.168.1.100 www2.a2.com
4)检查加载服务,测试即可
四、httpd-2.2 的基于 https 的安全访问
###CA 服务器上操作:
1)生成密钥对密钥对
[root@linuxidc CA]# (umak 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
2)生成自签证书
[root@linuxidc CA]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
Country Name (2 letter code) [XX]:CN ## 国家
State or Province Name (full name) []:beijing ## 省
Locality Name (eg, city) [Default City]:beijin ## 市
Organization Name (eg, company) [Default Company Ltd]:magedu.com #公司名称
Organizational Unit Name (eg, section) []:yunwei ## 部门
Common Name (eg, your name or your server’s hostname) []:linuxidc ##ca 域名
Email Address []:admin@163.com #邮箱
3)为 CA 提供所需目录及文件
[root@linuxidc CA]# touch {serial,index.txt}
[root@linuxidc CA]# echo 01 > serial
###httpd 服务器上操作:
1)生成密钥
[root@linuxidc ~]# mkdir /etc/httpd/ssl
[root@linuxidc ~]# cd /etc/httpd/ssl/
[root@linuxidc ssl]# (umask 077;openssl genrsa -out /etc/httpd/)
conf/ conf.d/ logs/ modules/ run/ ssl/
[root@linuxidc ssl]# (umask 077;openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
2)生成证书签署请求
[root@linuxidc ssl]# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:beijing
Locality Name (eg, city) [Default City]:beijin
Organization Name (eg, company) [Default Company Ltd]:magedu.com
Organizational Unit Name (eg, section) []:yunwei
Common Name (eg, your name or your server’s hostname) []:linuxidc
Email Address []:admin@163.com
3)在 CA 上签署证书,并将证书方式给请求者
[root@linuxidc tmp]# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
[root@linuxidc certs]# scp httpd.crt root@192.168.1.100:/etc/httpd/ssl
4)httpd 要支持 SSL 需要安装 mod_ssl 模块
[root@linuxidc ~]# yum -y install mod_ssl
5)配置 /etc/httpd/conf.d/ssl.conf
<VirtualHost 192.168.1.100:443> ## 此行 IP 地址需要按照你自己需求更改
DocumentRoot “/web/vhosts/www1”
ServerName
SSLCertificateFile /etc/httpd/ssl/httpd.crt
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key ## 证书私钥
6)检查配置文件,重新加载,测试即可
[root@linuxidc ssl]# httpd -t
Syntax OK
[root@linuxidc ssl]# service httpd reload
Reloading httpd:
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-07/133338.htm