网络服务-Apache

网络服务-Apache

工作模式:

Apache一共有3种稳定的MPM模式(多进程处理模块),分别是prefork、worker、event.

工作模式介绍优点缺点
prefork每个子进程只有一个线程,在一个时间点内,只能处理一个请求稳定、安全占用系统资源、不擅长处理高并发请求
worker每个子进程有多个线程,同时包括一个监听线程占用内存少,高并发表现更优秀需要考虑线程的安全问题,使用keep-alive长连接,要等待超时才能释放线程
event和worker模式很像,解决了keep-alive场景下,长期占用线程资源浪费的问题稳定可用,一个线程可以处理多个请求,实现异步非堵塞遇到某些不兼容的模块时,会退回worker模式

查看工作模式的命令:#httpd -V|grep -i “server mpm”

相关文件的保存位置

配置文件位置:

​ 源码包: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

配置文件解释

主机环境基本配置:

ServerRoot		/usr/local/apache2		#apache的主目录路径
Listen			:80						#监听端口号
LoadModule		php7					#加载模块
User									#用户
Group									#组
ServerAdmin								#管理员邮箱
ServerName								#服务器名
ErrorLog "logs/error_log"				#服务器错误日志
CustomLog "logs/access_log"	 common		#访问记录日志
DirectoryIndex	index.html index.php	#默认网页的优先级顺序
Include		etc/extra/httpd-vhosts.conf	#加载子配置文件内容

主页目录和权限

DocumentRoot “/usr/local/apache2/htdocs”
#网页文件存放目录(默认)
<Directory "/use/local/apache2/htdocs">
	Options Indexes FollowSymLinks   #定义指定目录的权限
		None		#没有任何额外权限
		All			#所有权限 除MultiViews以外
		Indexes		#浏览权限 没有网页文件时显示目录内容
		FollowSymLinks	#准许软连接到其他目录
		MultiViews		#准许文件名泛匹配
	AllowOverride None   #定义是否允许目录下的.htaccess文件中的权限生效
		None		#不生效
		All			#都生效
		AuthConfig	#只有网页认证的权限生效
	Require all granted(denied)  #访问控制列表
</Directory>

<IfModule dir_module>   #此标签用来指定访问到指定目录时自动加载哪个页面文件
	DirectoryIndex index.php index.html   #默认页面优先级
</IfModule>

Apache实验

1)Apache的目录别名

当apache接受请求时,在默认情况下会将DocumentRoot目录中的文件送到客户端,如果想将某一不在DocumentRoot目录中的文件共享到网站上,并希望将它们留在本来位置而不需要移动的话,处理这种情况可以通过建立别名的方式将URL指向特定的目录。

1.编辑主配置文件
#vim /usr/local/apache2/etc/httpd.conf

Include etc/extra/httpd-autoindex.conf  #去掉注释,开启调用子配置文件
2.编辑子配置文件
#vim /usr/local/apache2/conf/extera/httpd-autoindex.conf
alias /incos/ "/usr/local/apache2/icons/"
结构:别名“真实目录” 真实目录的结尾要有/,否则会报错
<Directory "/usr/local/apache2/icons" >
	Options Indexes FollowSymLinks
	AllowOverride None
	Require all granted
</Directory>
可以根据这个模板来自己编写其他的

在这里插入图片描述

2)Apache的用户认证

给一些特殊的访问设置一个用户认证机制,增加安全时使用,比如我们的个人网站,一般都是有一个管理后台的,虽然管理后台本身有密码,但是为了更安全,可以设置多一层用户身份认证保护。

1、编辑配置文件
#vim /usr/local/apache2/etc/httpd.conf

在需要进行登录认证的目录标签中加入如下配置:

<Directory "/usr/local/apache2/htdocs/admin"> #声明被保护目录
	Options Indexes FollowSymLinks
	AllowOverride All		#开启认证文件.htaccess
	Require all granted
</Directory>
2、在指定目录下创建权限文件

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

#vim .htaccess
AuthName "welcome to dd"
#提示信息
AuthType basic
#加密类型
AuthUserFile /usr/local/apache2/htdocs/admin/apache.passwd
#密码文件,绝对路径
require valid-user
#允许密码文件中所有用户访问
3、建立密码文件,加入允许访问的用户.(此用户和系统用户无关)
#ln -s /usr/local/apache2/bin/* /usr/local/bin/  #软链接到bin可以直接调用里面的内容
#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服务并验证

apachectl -t #检测配置文件是否完整无误

apachectl restart

3)虚拟主机

虚拟主机,也称网站空间。把一台运行在互联网上的物理服务器划分成多个”虚拟“的服务器。

虚拟主机的分类:
类型介绍
基于IP的虚拟主机一台服务器,多个ip,搭建多个网站
基于端口的虚拟主机一台服务器,一个ip,多个端口来搭建多个网站
基于域名的虚拟主机一台服务器,一个ip,使用不同域名来搭建多个网站
1.修改主配置文件开启文件管理
#vim /usr/local/apache2/etc/httpd.conf
Include etc/extra/httpd-vhosts.conf 
2.编辑子配置文件,编写虚拟主机标签
#vim /usr/local/apache2/etc/extra/httpd-vhosts.conf
#文件内有案例可以借鉴
<VirtualHost *:80>            #虚拟主机标签
    ServerAdmin chenjungunag@qq.com    #管理员邮箱
    DocumentRoot "/usr/local/apache2/htdocs/xinglang"      #网站的主目录
    ServerName www.xinglang.com				#完整域名
    ErrorLog "logs/dummy-host.example.com-error_log"		#错误日志
    CustomLog "logs/dummy-host.example.com-access_log" common	#访问日志
</VirtualHost>
3.重启服务,并验证
curl www.xinlang.com
elinks www.xinlang.com
没有配置dns的需要自己改hosts文件

4)域名跳转

一个网站有时难免会有不同的域名,而且多个域名总需要一个主次,比如访问www.aaa.com的时候总会跳转到www.bbb.com,这个行为就叫域名跳转,状态码301是永久跳转,状态码302是临时跳转,网站上设置的话一定要使用301,这样对网站比较友好。

1.开启主配置文件的重写模块
vim /usr/local/apache2/etc/httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so  #取消掉注释就是开启
2.修改虚拟主机配置文件
#vim /usr/local/apache2/etc/extra/httpd-vhosts.conf
<Directory "/usr/local/apache2/htdocs/tengxun">
	Options Indexes FollowSymLinks
	AllowOverride All   #开启.htaccesss权限
	Require all granted
</Directory>
3.创建规则匹配文件
#vim /usr/local/apache2/htdocs/tengxun/.htaccess
#在指定的网站目录下创建.htaccess文件,并添加以下内容
RewriteEngine on		#开启rewrite功能
RewriteCond %{HTTP_HOST} ^www.tengxun.com	
#把以www.shouhu.com开头的内容赋值给HTTP_HOST变量
RewriteRule ^(.*)$ http://www.xinlang.com/$1 [R=permanent,L]
#^(.*)$指代客户端要访问的资源
#$1 把.*所指代的内容赋值到$1变量中
#R=permanent 永久重定向=301
#L指定该规则为最后一条生效的规则,以后的不再生效
4.重启服务器并测试

apachectl -t #检测配置文件是否完整无误

apachectl restart

5)Apache+opensll实现https

​ HTTPS(超文本传输安全协议),是以安全为目标的HTTP通道,简单来说就是http的安全版。即HTTP下加入SSL层,用于安全的HTTP数据传输。这个系统被内置于浏览器中,提高了身份验证与加密通讯方式。现在它被广泛运用于网上的安全敏感的通讯,例如支付方面。

1.准备工作:

检查Apache是否支持SSL,检查相应模块是否安装,若安装则将模块启用

模块存放目录:/usr/local/apache2/modules

检查模块是否启用:apachectl -M

2.CA证书申请:
#openssl genrsa -out ca.key 1024
#建立服务器私钥,生成RSA密钥
#openssl req -new -key ca.key -out cjg.csr
#需要依次输入国家、地区,城市,组织,组织单位,Email等信号。最重要的是一个common name,可以写名字或者域名。为了申请https,这个必须和域名符合,否则会引发浏览器警报。生成的csr文件交给CA签名后形成服务端自己的证书。
openssl x509 -req -days 365 -sha256 -in cjg.csr -signkey ca.key -out cjg.crt
#使用CA服务器签发证书,设置证书的有效期等信息
(生成的密钥和证书文件要放到apache的安装目录下的cert目录下)
(生产环境中必须要在https证书厂商注册)
3.配置文件修改:
(调用ssl模块,并启用ssl独立配置文件)
#vim /usr/local/apache2/etc/httpd.conf
LoadModule ssl_module modules/mod_ssl.so
Include etc/extra/httpd.ssl.conf
(修改conf/extra/httpd-ssl.conf配置文件,调用证书等文件)
#添加SSL协议支持协议,去掉不安全的协议
SSLProtocol all-SLLv2 -SSLv3
#修改加密套件如下
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
SSLHonorCipherOrder on
#证书公钥配置(签字的)
SSLCertificateFile cert/cjg.crt
#证书私钥配置
SSLCertificateKeyFile cert/ca.key
(修改主配置文件,添加虚拟主机)
<VirtualHost _default_:443>
#DocumentRoot 目录位置要和httpd.conf里面的一致
DocumentRoot "/usr/local/apache2/htdocs"
ServerName localhost:443
SSLCertificateFile cert/cjg.crt
SSSLCertificateKeyFile cert/ca.key
SSLCertificateChainFile cert/cjg.crt
</VirtualHost>
4.结果验证:
#apachectl -t #检查配置文件语法
#apachectl restart #重启服务再测试
5.强制跳转https:

有些时候为了安全,网站不允许使用http访问,仅允许使用https反问,目的是为了更加安全

在http部分的目录权限中添加

<Directory "/usr/local/apache2/htdocs">
	RewriteEngine on  #开启转发规则
	RewriteCond ${SERVER_PORT} !^443$  #检查访问端口只要目标不是443
	RewriteRule ^(.*)?$ https://%{SERVER_NAME}/$1 [R=301,L]  #全都使用https重新访问
</Directory>
6)Apache日志切割

我们每访问一次网站,就是记录若干的条日志,如果长时间不去整理,时间长了日志文件就会越来越大,这时候我们需要避免产生大的日志文件,就需要对日志进行归档,例如每天一个新日志,或者每小时一个新日志。

1.简单设置日志的路径名称
#vim /usr/local/apache2/etc/httpd.conf
ErrorLog "logs/error.log"
CustomLog "logs/access.log" combined
2.设置apache日志分割
#vim /usr/local/apache2/etc/httpd.conf
ErrorLog "|/usr/local/apache2/bin/rotatelog -l /usr/local/apache2/logs/error_%Y%m%d.log 86400"
Customlog "|/usr/local/apache2/bin/rotatelog -l /usr/local/apache2/logs/access_%Y%m%d.log 86400" combined

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

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

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

1.配置日志不记录图片的访问

#vim /usr/local/apache2/conf/httpd.conf
相关配置:
SetEnvlf Request_URI ".*\.gif$" image-request
SetEnvlf Request_URI ".*\.jpg$" image-request
SetEnvlf Request_URI ".*\.png$" image-request
SetEnvlf Request_URI ".*\.bmp$" image-request
SetEnvlf Request_URI ".*\.swf$" image-request
SetEnvlf Request_URI ".*\.js$" image-request
SetEnvlf Request_URI ".*\.css$" image-request
CustomLog "|/usr/local/apache2/bin/rotatelog -l /usr/local/apache2/logs/access_%Y%m%d.log 86400" combined env=!image-request

说明:在原来的访问日志的基础上,添加一些image-request的定义,把后缀为gif、jpg、bmp、css等文件全标记为image-request,然后在配置日志后加一个标记env=!image-request,表示取反。

8)Apache配置静态缓存

所谓静态的文件指定是图片、js、css、等文件,用户去访问一个站点,其实大部分的元素都是这些静态的文件,这些静态的文件是会被客户端的浏览器缓存到本地的计算机上,目的是为了下次打开相同站点时不用再去服务器上下载,加快了速度,提高了用户的体验,但是缓存也不能一直保存,它也一个设置一些时效性,那么就要设置一个过期时间。

1.配置静态缓存

mod_expires.c模块和mod_header.c模块都可以实现,这边举例mod_headers的例子

#vim /usr/local/apache2/etc/httpd.conf
<IfModule mod_headers.c>
	#html,txt类缓存一个小时
	<filesmatch "\.(html|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|jpeg|png|ico|flv|pdf)$">
		header set cache-control "max-age=29030400"
	</filesmatch>	
</IfModule>

需要开启对应的模块哈~

检查模块:#/usr/local/apache2/bin/apachectl -M

2.重启服务器并验证

#apachectl -t #检查配置文件语法
#apachectl restart #重启服务再测试
#curl -x127.0.0.1:80 'http://www.tengxun.com/image/a.jpg' -I
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>

2.重启服务器并验证

#apachectl -t #检查配置文件语法
#apachectl restart #重启服务再测试
#curl -x127.0.0.1:80 'http://www.tengxun.com/image/a.jpg' -I
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、付费专栏及课程。

余额充值