httpd复习

Web服务器-Apache

一. 讲在 Apache之前

HTML语言:超文本标记语言,使用html语言编写的文本叫超文本,“超文本”就是指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。

HTTP协议:超文本传输协议

HTTP使用统一资源标识符(URL)来建立连接和传输数据。是一个基于TCP/IP通信协议来传递数据的协议,属于应用层协议。

URL:统一资源定位符统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。

格式:
http://www.atguigu.com:80/image/a.jpg
知识拓展:
URI:统一资源标志符,URI与URL都是定位资源位置的,就是表示这个资源的位置信息,就像经纬度一样可以表示你在世界的哪个角落。URI是一种宽泛的含义更广的定义,而URL则是URI的一个子集,
就是说URL是URI的一部分。

二. Apache详解

1. 概述

Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python/php等解释器编译到服务器中。

Apache有多种产品,可以支持SSL技术,支持多个虚拟主机。Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,不太适合于多处理器环境,因此,在一个Apache Web站点扩容时,
通常是增加服务器或扩充群集节点而不是增加处理器。到目前为止Apache仍然是世界上用的最多的Web服务器,市场占有率达60%左右。

2. 工作模式

Apache一共有3种稳定的MPM模式(MPM:多进程处理模块),它们分别是 prefork、worker、event
prefork 工作模式
Apache在启动之初,就预先fork一些子进程,然后等待请求进来。之所以这样做,是为了减少频繁创建和销毁进程的开销。每个子进程只有一个线程,在一个时间点内,只能处理一个请求。

优点:成熟稳定,兼容所有新老模块。同时,不需要担心线程安全的问题。
缺点:一个进程相对占用更多的系统资源,消耗更多的内存。而且,它并不擅长处理高并发请求。
在这里插入图片描述

worker 工作模式
使用了多进程和多线程的混合模式。它也预先fork了几个子进程(数量比较少),然后每个子进程创建一些线程,同时包括一个监听线程。每个请求过来,会被分配到1个线程来服务。线程比起进程会更轻量,因为线程通常会共享父进程的内存空间,因此,内存的占用会减少一些。在高并发的场景下,因为比起prefork有更多的可用线程,表现会更优秀一些。

优点:占据更少的内存,高并发下表现更优秀。
缺点:必须考虑线程安全的问题。

event 工作模式
它和worker模式很像,最大的区别在于,它解决了keep-alive场景下,长期被占用的线程的资源浪费问题。event MPM中,会有一个专门的线程来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放。这样增强了高并发场景下的请求处理能力。

HTTP采用keepalive方式减少TCP连接数量,但是由于需要与服务器线程或进程进行绑定,导致一个繁忙的服务器会消耗完所有的线程。Event MPM是解决这个问题的一种新模型,它把服务进程从连接中
分离出来。在服务器处理速度很快,同时具有非常高的点击率时,可用的线程数量就是关键的资源限制,此时Event MPM方式是最有效的,但不能在HTTPS访问下工作。
查看方式:

# httpd -V | grep -i "server mpm"

指定方式:
在编译时,在选项中指定,–with-mpm=xxx
在这里插入图片描述

在这里插入图片描述

3. 相关文件保存位置

配置文件位置:
源码包安装:
PREFIX/etc/httpd.conf(主配置文件)
PREFIX/etc/extra/*.conf(子配置文件)
rpm包安装:
/etc/httpd/conf/httpd.conf

网页文件位置:
源码包安装:
PREFIX/htdocs/
rpm包安装:
/var/www/html/

日志文件位置:
源码包安装
PREFIX/logs/
rpm包安装:
/var/log/httpd/

在这里插入图片描述

4. 配置文件详解

在这里插入图片描述
在这里插入图片描述

Apache实验

1.目录别名

alias /test/ ”/usr/local/apache2/icons/"
<Directory "/usr/local/apache2/icons">
	Options Indexes FollowSymLinks
	AllowOverride None
	Require all granted
</Directory>

2.用户认证

  1. 在需要进行登录认证的目录标签中加入如下配置:
<Directory "/usr/local/apache2/htdocs/admin">#声明被保护目录
	Options Indexes
	FollowSymLinks
	AllowOverride All	#开启权限认证文件.htaccess
	Require all granted
</Directory>
  1. 在指定目录下创建权限文件

切换到/usr/local/apache2/htdocs/admin,创建.htaccess文件,
并添加下面的内容

vi .htaccess
AuthName "Welcome to atguigu"	
#提示信息
AuthType basic	
#加密类型
AuthUserFile /usr/local/apache2/htdocs/admin/apache.passwd		
#密码文件,文件名自定义。(使用绝对路径)
require valid-user	
#允许密码文件中所有用户访问
  1. 建立密码文件,加入允许访问的用户。(此用户和系统用户无关)

htpasswd -c /usr/local/apache2/htdocs/admin/apache.passwd test1

-c建立密码文件,只有添加第一个用户时,才能-c

# htpasswd -m /usr/local/apache2/htdocs/admin/apache.passwd test2

-m 再添加更多用户时,使用-m参数
注意:
htpasswd该命令是httpd的命令,需要绝对路径
4. 重启apache服务

/usr/local/apache2/bin/apachectl -t
/usr/local/apache2/bin/apachectl stop
/usr/local/apache2/bin/apachectl start

先检查配置是否正确,
然后通过浏览器输入要访问的资源时就会提示输入密码了。

3.虚拟主机

基于IP

 <VirtualHost 192.168.10.10>
     DocumentRoot /home/wwwroot/10
     ServerName www.linuxprobe.com
     <Directory /home/wwwroot/10>
     AllowOverride None
     Require all granted
     </Directory>
 </VirtualHost>
  
 <VirtualHost 192.168.10.20>
     DocumentRoot /home/wwwroot/20
     ServerName www.linuxcool.com
     <Directory /home/wwwroot/20>
     AllowOverride None
     Require all granted
     </Directory>
 </VirtualHost>
  
 <VirtualHost 192.168.10.30>
     DocumentRoot /home/wwwroot/30
     ServerName www.linuxdown.com
     <Directory /home/wwwroot/30>
     AllowOverride None
     Require all granted
     </Directory>
 </VirtualHost>

基于主机

 <VirtualHost 192.168.10.10>
     Documentroot /home/wwwroot/linuxprobe
     ServerName www.linuxprobe.com
     <Directory /home/wwwroot/linuxprobe>
     AllowOverride None
     Require all granted
     </Directory>
 </VirtualHost>
 
 <VirtualHost 192.168.10.10>
     Documentroot /home/wwwroot/linuxcool
     ServerName www.linuxcool.com
     <Directory /home/wwwroot/linuxcool>
     AllowOverride None
     Require all granted
     </Directory>
 </VirtualHost>
 
 <VirtualHost 192.168.10.10>
     Documentroot /home/wwwroot/linuxdown
     ServerName www.linuxdown.com
     <Directory /home/wwwroot/linuxdown>
     AllowOverride None
     Require all granted
     </Directory>
 </VirtualHost>

基于端口

 Listen 80
 Listen 6111
 Listen 6222
 Listen 6333
<VirtualHost 192.168.10.10:6111>
     Documentroot /home/wwwroot/linuxprobe
     ServerName www.linuxprobe.com
     <Directory /home/wwwroot/linuxprobe>
     AllowOverride None
     Require all granted
     </Directory>
 </VirtualHost>
 
 <VirtualHost 192.168.10.10:6222>
     Documentroot /home/wwwroot/linuxcool
     ServerName www.linuxcool.com
     <Directory /home/wwwroot/linuxcool>
     AllowOverride None
     Require all granted
     </Directory>
 </VirtualHost>
 
 <VirtualHost 192.168.10.10:6333>
     Documentroot /home/wwwroot/linuxdown
     ServerName www.linuxdown.com
     <Directory /home/wwwroot/linuxdown>
     AllowOverride None
     Require all granted
     </Directory>
 </VirtualHost>

4.访问控制

限制源主机的访问

 <Directory "/var/www/html/server">
     SetEnvIf User-Agent "Firefox" ff=1
     Order allow,deny
     Allow from env=ff
 </Directory>
 # 允许使用Firefox浏览器的主机访问服务器上的首页文件,除此之外的所有请求都将被拒绝

匹配源主机的IP地址进行访问控制

 <Directory "/var/www/html/server">
     Order allow,deny 
     Allow from 192.168.10.20
 </Directory>

5.Apache+openssl 实现 https

HTTPS(全称:Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。
即HTTP下加入SSL层,用于安全的HTTP数据传输。这个系统被
内置于浏览器中,提供了身份验证与加密通讯方法。现在它被广泛用于万维网上安全敏感的通讯,
例如交易支付方面。

[root@proxy ~]# openssl genrsa > cert.key							//生成私钥
[root@proxy ~]# openssl req -new -x509 -key cert.key > cert.pem  	//生成证书

五、修改apache配置文件,让证书生效

 vim /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/pki/tls/certs/myserver.crt
SSLCertificateKeyFile /etc/pki/tls/private/myserver.key

强制转跳https

RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)?$ https://%{SERVER_NAME}/$1 [R=301,L]

7.日志切割

1. logrotate

 vim /etc/logrotate.d/httpd

/var/log/httpd/*log {
    missingok
    notifempty
    sharedscripts
    delaycompress
    postrotate
        /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
    endscript
}

2.

ErrorLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/error_%Y%m%d.log 86400"
CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/access_%Y%m%d.log 86400" combined
注意
1:以上仅为两条命令(一条错误日志,一条访问日志),路径太长写不开
2:若开启了https,则需要修改http-ssl.conf配置文件中的日志记录条目

ErrorLog是错误日志,CustomLog是访问日志。就是管道符,意思是把产生的日志交给rotatelog这个工具,而这个工具就是apache自带的切割日志的工具。
-l的作用是校准时区为UTC,也就是北京时间。86400,单位是秒,正好是一天,那么日志会每天切割一次。而最后面的combined为日志的格式,在httpd.conf中有定义。

7. 不记录指定文件类型的日志

如果一个网站访问量特别大,那么访问日志就会很多,但有一些访问日志我们其实是可以忽略掉的,比如网站的一些图片,还有 js、css等静态对象。而这些文件的访问往往是巨量的,而且即使记录这些日志也没有什么用,那么如何忽略不记录这些日志呢?

  1. 配置日志不记录图片的访问
# vim /usr/local/apache2/conf/httpd.conf
相关配置为:
SetEnvIf Request_URI ".*\.gif$" image-request
SetEnvIf Request_URI ".*\.jpg$" image-request
SetEnvIf Request_URI ".*\.png$" image-request
SetEnvIf Request_URI ".*\.bmp$" image-request
SetEnvIf Request_URI ".*\.swf$" image-request
SetEnvIf Request_URI ".*\.js$" image-request
SetEnvIf Request_URI ".*\.css$" image-request
CustomLog "|/usr/local ... _%Y%m%d.log 86400" combined env=!image-request

说明:在原来的访问日志配置基础上,增加了一些 image-request的定义,比如把 gif、jpg、bmp、swf、js、css等结尾的全标记为 image-request,然后在配置日志后加一个标记 env=!image-request,表示取反。

8 Apache配置静态缓存

所说的静态文件指的是图片、js、css等文件,用户访问一个站点,其实大多数元素都是图片、js、css等,这些静态文件其实是会被客户端的浏览器缓存到本地电脑上的,目的就是为了下次再请求时不再去服务器上下载,这样就加快了速度,提高了用户体验。但这些静态文件总不能一直缓存,它总有一些时效性,那么就得设置这个过期时间。

# vim /usr/local/apache2/conf/httpd.conf
<IfModule mod_expires.c>
ExpiresActive on
#此模块默认未启用,请手动启用
ExpiresByType image/gif "access plus 1 days"
ExpiresByType image/jpeg "access plus 24 hours"
ExpiresByType image/png "access plus 24 hours"
ExpiresByType text/css "now plus 2 hours"
ExpiresByType application/x-javascript "now plus 2 hours"
ExpiresByType application/javascript "now plus 2 hours"
ExpiresByType application/x-shockwave-flash "now plus 2 hours"
ExpiresDefault "now plus 0 min"
</IfModule>

或者使用 mod_headers 模块实现:该模块默认启用

<IfModule mod_headers.c>
# htm,html,txt 类的文件缓存一个小时
	<filesmatch "\.(html|htm|txt)$">
		header set cache-control "max-age=3600"
	</filesmatch>
# css, js, swf 类的文件缓存一个星期
	<filesmatch "\.(css|js|swf)$">
		header set cache-control "max-age=604800"
	</filesmatch>
# jpg,gif,jpeg,png,ico,flv,pdf 等文件缓存一年
	<filesmatch "\.(ico|gif|jpg|jpeg|png|flv|pdf)$">
		header set cache-control "max-age=29030400"
	</filesmatch>
</IfModule>

9. 禁止解析 PHP

某个目录下禁止解析 PHP,这个很有作用,我们做网站安全的时候,这个用的很多,比如某些目录可
以上传文件,为了避免上传的文件有木马,所以我们禁止这个目录下面的访问解析 PHP。
<Directory /usr/local/apache2/htdocs/data>
	php_admin_flag engine off
	<filesmatch "(.*)php">
		Order deny,allow
		Deny from all
	</filesmatch>
</Directory>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值