Linux网站架构系列之Apache调优全解

news/2024/5/14 2:15:42/文章来源:https://blog.csdn.net/weixin_45537987/article/details/106781033

环境:

 

view sourceprint?
1.CentOS6.4 x86_64位 采用最小化安装,系统经过了基本优化篇
2.apache版本:httpd-2.4.6
3.apr版本:apr-1.4.8
4.apr-util版本:apr-util-1.5.2
5.pcre版本:pcre-7.8
6.源码包存放位置:/server/tools
7.源码包编译安装位置:/etc/local/软件名称

一、源码官方下,补丁及时打

正如我们在apache部署篇讲到的我们需要对下载的源码包进行验证一样,我们在挑选apache源码安装包的时候,一定要去官网,不要去乱七八糟的站点进行下载,防止源码包被别有用心的人动过手脚,导致后面对公司业务造成不必要损失。

另外为了apache的安全性和性能考虑,我们一定要多多关注apache的官网的补丁发布情况,一旦有新的补丁,我们一定要及早打上。特别是一些安全补丁,防止受到损失。

 

二、屏蔽apache版本等敏感信息

1)我们在apache主配置文件httpd.conf中,找到包含httpd-default.conf的行,并解开注释


view sourceprint?
1.[root@c64-web /]# grep "httpd-default.conf" /usr/local/apache/conf/httpd.conf
2.#Include conf/extra/httpd-default.conf
3.[root@c64-web /]# sed -i 's#\#Include conf/extra/httpd-default.conf#Include conf/extra/httpd-default.conf#g' /usr/local/apache/conf/httpd.conf

注意:编译安装的情况下,只有此行解开注释了,后面的修改才能生效。

2)打开httpd-default.conf文件,修改如下两个地方


view sourceprint?
1.[root@sunsky /]# grep Server conf/extra/httpd-default.conf|grep -v "#"
2.ServerTokens full
3.ServerSignature Off

修改为
 

view sourceprint?
1.ServerTokens Prod
2.ServerSignature Off

经过上面的修改,当你在curl-Iwww.sunsky.pw的时候,还是会出现下面的信息

 

view sourceprint?
1.Server: Apache

彻底让版本等敏感信息消失

如果你需要彻底将版本之类的信息进行改头换面,你就需要在编译之前做准备或者进行从新编译了。在重新编译时,修改源码包下include目录下的ap_release.h文件


view sourceprint?
1.#define AP_SERVER_BASEVENDOR "Apache Software Foundation" #服务的供应商名称
2.#define AP_SERVER_BASEPROJECT "Apache HTTP Server"  #服务的项目名称
3.#define AP_SERVER_BASEPRODUCT "Apache"        #服务的产品名
4.#define AP_SERVER_MAJORVERSION_NUMBER 2  #主要版本号
5.#define AP_SERVER_MINORVERSION_NUMBER 4  #小版本号
6.#define AP_SERVER_PATCHLEVEL_NUMBER  6  #补丁级别
7.#define AP_SERVER_DEVBUILD_BOOLEAN  0  #

上述列出的行,我已经给出了注释,大家可以修改成自己想要的,然后编译安装之后,再对httpd-default.conf文件进行修改,对方就彻底不知道你的版本号了。

三、更改apache的默认用户

我们通过更改apache的默认用户,可以提升apache的安全性。这样,即使apache服务被攻破,黑客拿到apache普通用户也不会对系统和其他应用造成破坏。这里创建的apache用户,将用于对子进程和线程的控制。


view sourceprint?
1.[root@c64-web /]# useradd -M -s /sbin/nologin apache 创建apache用户

编辑apache配置文件,修改默认的用户。
 

view sourceprint?
1.[root@c64-web /]# vim /usr/local/apache/conf/httpd.conf
2.User apache  #更改默认的daemon用户为apache用户
3.Group apache  #更改默认的daemon用户为apache用户

四、apache目录及文件权限设置

在生产环境的网站架构中,我们应把资源文件,例如用户上传的图片及附件等和程序做好分离,最好是把上传程序也分离开来。这样才能更方便我们做好授权,保证apache服务和整个服务器安全。

这里我们设置apache的网站目录属主和属组是root,权限是755,文件的权限为644。


view sourceprint?
1.lrwxr-xr-x  1 root root   23 11月  5 02:04 apache -> /usr/local/apache-2.4.6
2.drwxr-xr-x 14 root root 4096 11月  5 12:37 apache-2.4.6

并且,在对日志的授权商,我们要将属主和属组都设置为root,权限设置为700。
 

view sourceprint?
1.drwx------ 2 root root 4096 11月  5 02:46 logs

由于apache日志的记录是由apache的主进程进行操作的,而apache的主进程又是root用户启动的,所以这里设置700是不影响日志记录了。这也是日志记录的最安全的方法。

五、配置cronolog进行日志轮询

由于apache自带的日志轮询工具rotatelogs,据专家说在进行日志切割时容易丢日志,因此我们通常使用cronolog进行日志轮询。

1、下载并安装cronolog


view sourceprint?
1.[root@sunsky /]# cd /server/tools/
2.[root@sunsky tools]# wget http://cronolog.org/download/cronolog-1.6.2.tar.gz
3.[root@sunsky tools]# tar zxf cronolog-1.6.2.tar.gz
4.[root@sunsky tools]# cd cronolog-1.6.2
5.[root@sunsky cronolog-1.6.2]# ./configure
6.[root@sunsky cronolog-1.6.2]# make&&make install

2、配置apache使用cronolog

由于实验用的apache开启了虚拟主机功能,所以以下范例配置都在虚拟主机中进行。


view sourceprint?
1.[root@sunsky cronolog-1.6.2]# vim /usr/local/apache/httpd/extra/httpd-vhosts.conf

将配置文件中的CustomLog和ErrorLog替换为下面的(由于我们要对多站点,所以这里要替换两个虚拟主机的,并且将日志存放名字做有效的区分才好)
 

view sourceprint?
1.CustomLog "|/usr/local/sbin/cronolog /app/logs/sunsky_access_%Y%m%d.log" combined
2.ErrorLog "|/usr/local/sbin/cronolog /app/logs/sunsky_error_%Y%m%d.log"

更多日志格式参考:
 

view sourceprint?
1.按天轮询(生产环境常见用法,推荐使用):
2.CustomLog "|/usr/local/sbin/cronolog /app/logs/access_www_%Y%m%d.log" combined
3.按小时轮询(生产环境较常见用法):
4.CustomLog "|/usr/local/sbin/cronolog  /app/logs /access_www_ %Y%m%d%H.log" combined

六、错误页面优雅显示

为了提升网站的用户体验,避免404,403之类的丑陋的默认错误提示出现,我们需要对错误页面进行优化,让他们变的漂亮一点。错误页面不仅在于告诉用户访问出现了问题,而且需要引导用户到正确的页面。

错误页面优雅化显示的实现方式主要有两种,下面我们主要以404错误为例:

第一种:在apache的主配置文件httpd.conf中的<Directory></Directory>标签内添加ErrorDocument配置。


view sourceprint?
1.[root@sunsky /]# vi /usr/local/apache/conf/httpd.conf
2.&lt;Directory "/www/html"&gt;
3.AllowOverride None
4.Options None
5.Require all granted
6.ErrorDocument 404 /404.html  #将404错误跳转到/www/html下的404.html页面上
7.&lt;/Directory&gt;

第二种方法:在apache的虚拟主机配置文件httpd-vhost.conf中的<VirtualHost*:80></VirtualHost>中添加ErrorDocument配置。

 

view sourceprint?
01.&lt;VirtualHost *:80&gt;
02.ServerAdmin 274546888@qq.com
03.DocumentRoot "/www/html"
04.ServerName www.sunsky.pw
05.ServerAlias sunsky.pw
06.CustomLog "|/usr/local/sbin/cronolog /app/logs/www_access_%Y%m%d.log" combined
07.ErrorLog "|/usr/local/sbin/cronolog /app/logs/www_error_%Y%m%d.log"
08.ErrorDocument 404 http://www.sunsky.pw ;  #将404错误跳转到http://www.sunsky.pw页面上
09.&lt;/VirtualHost&gt;

从上面的两种解决方案,我们可以看出ErrorDocument的命令格式如下
 

view sourceprint?
1.ErrorDocument 错误代码 跳转到的页面或文件

另外这里需要注意,你若设置跳转到文件,必须要有这个文件才行。另外文件必须在站点目录内,不然会报错。

在跳转到文件的测试中,我用全路径和别名路径进行测试,当把404错误页面跳转文件放到其他目录的时候,不报错,但是页面跳转不过去。若跳转为未链接,则不影响。

 

七、启用压缩模块mod_deflate

网站随着用户访问量的增加和内容量的增加,网站的带宽会不断的增加,随之就是网站成本的增加。并且当内容量增大的时候,客户端如果带宽小,就会影响用户的体验。因此从这两方面考虑,网站的某些内容必须经过压缩之后再传给用户,然后在用户客户端进行解压,来实现双方共赢的效果。

apache的压缩要用到mod_deflate模块,该模块提供了DEFLATE输出过滤器,允许服务器在将输出内容发送到客户端以前进行压缩,以节约带宽。它的核心思想就是把文件先在服务器进行压缩,然后再进行传输,这样可以显著减少文件传输的大小。当传输完毕后,客户端游览器会重新对压缩过的内容进行解压缩。如果没特殊情况的话,所以的文本内容都应该能被gzip压缩,例如:html(php),js,css,xml,txt等。特殊情况就是像一些首页上有很多广告投放的js代码,由于需要每次加载进而进行来访信息统计,所以这些广告代码拥有者网站的js不会经过gzip压缩,

mod_deflate模块,在我们前篇部署的时候已经编译安装进去了。

那么如果没有安装,如何安装呢?并且如果不知道到是否安装了,如何查看呢?

1、mod_deflate模块检查及安装

由于apache2.2.x和2.4.x这两个版本在检查mod_deflate模块是否安装方法方法是不同的。最后,我无奈做了很多测试,下面建议大家这样来检查。


view sourceprint?
1.[root@c64-web /]# /usr/local/apache/bin/apachectl -M | grep deflate
2.deflate_module (static)  #此种结果为编译安装时装的
3.[root@c64-web /]# /usr/local/apache/bin/apachectl -M | grep deflate
4.deflate_module (shared)  #此种结果为DSO方式安装的

安装了的话,就可以直接进行压缩配置了,如果没有安装,下面为安装方法

a)编译时安装方法

编译的时候跟上--enable-deflate即可实现安装

b)DSO方式安装


view sourceprint?
1.[root@c64-web /]# cd /server/tools/httpd-2.4.6/modules/filters/  #切到apache源码包mod_deflate所在的目录下
2.[root@c64-web filters]# /usr/local/apache/bin/apxs -c -i -a mod_deflate.c  #以dso的方式编译安装到apache中
3.[root@c64-web filters]# ll /usr/local/apache/modules/mod_deflate.so   #检查mod_deflate是否安装,成功安装这里会显示出该文件
4.-rwxr-xr-x 1 root root 76697 11月  5 07:50 /usr/local/apache/modules/mod_deflate.so

扩展:使用DSO方式安装,apxs后跟的参数详解
 

view sourceprint?
1.-c  此选项表明需要执行编译操作。它首先会编译c源程序(.c)files为对应的目标代码文件(.c),然后连接这些目标代码和files中其余的目标代码文件(.c和.a),以生成动态共享对象dsofile。如果没有指定-s选项,则此输出文件名由files中的第一个文件名推测得出,也就是默认mod_name.so。
2.-i  此选项表示需要执行安装操作,以安装一个或多个动态共享对象到服务器的modules目录。
3.-a  此选项自动增加一个LoadModule行到httpd.conf文件中,以激活此模块,或者,如果此行已经存在,则启用之。
4.压缩模块配置

2、配置压缩参数

注意如果我们是编译安装时已经编译进去的,此时我们需要先将httpd.conf主配置文件中


view sourceprint?
1.LoadModule deflate_module     modules/mod_deflate.so

此行解锁后再进行下面操作,不然下面的操作会报错。

我们需要在虚拟机的<VirtualHost*:80></VirtualHost>中添加如下配置即可实现压缩


view sourceprint?
01.<ifmodule mod_deflate.c>
02.DeflateCompressionLevel 9      #压缩等级,越大效率越高,消耗CPU也越高
03.SetOutputFilter DEFLATE           #启用压缩
04.AddOutputFilterByType DEFLATE text/html text/plain text/xml     #仅压缩限制特定的MIME类型文件:
05.AddOutputFilterByType DEFLATE application/javascript
06.AddOutputFilterByType DEFLATE text/css
07.AddOutputFilterByType DEFLATE image/gif image/png  image/jpe image/swf image/jpeg image/bmp
08.#DeflateFilterNote ratio     #在日志中放置压缩率标记,下面是记录日志的,这个功能一般不用
09.#LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate
10.#CustmLog logs/deflate_log.log deflate
11.</ifmodule>

下面是朋友公司的另外一种压缩配置,有兴趣的朋友们也可以操作操作。

 

view sourceprint?
01.<ifmodule mod_deflate.c>
02.DeflateCompressionLevel 9
03.SetOutputFilter DEFLATE
04.DeflateFilterNote Input instream #声明输入流的byte数量
05.DeflateFilterNote Output outstream  #声明输出流的byte数量
06.DeflateFilterNote Ratio ratio   #声明压缩的百分比
07.#LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate      #声明日志类型
08.#CustomLog logs/deflate_log.log deflate    #声明日志类型
09.AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript  #仅压缩限制特定的MIME类型文件
10.</ifmodule>

执行上面的添加后,我们对apache进行优雅重启
 

view sourceprint?
1.[root@c64-web /]# /usr/local/apache/bin/apachectl graceful

下面访问我们的网站,然后用火狐或者google游览器的YSLOW插件进行压缩效果的查看

050914778.png

怎么样,是不是已经进行压缩了啊!

我们在企业生产环境中时,在启用mod_deflate时,一定要注意,对于太小的文件和某些格式的图片不要对它们进行压缩,有可能越压越大。

下面给出大家几乎是所有的AddOutputFilterByTypeDEFLATE后跟的压缩文件类型,大家可以参照选择。


view sourceprint?
1.text/plain text/html text/php text/xml text/css text/javascript
2.application/xhtml+xml application/xml application/rss+xml application/atom_xml application/x-javascript application/x-httpd-php image/svg+xml image/gif image/png  image/jpe image/swf image/jpeg image/bmp

八、mod_expires缓存功能

虽然我们上面通过mod_deflate模块启用了压缩,从很大程度上节约了企业带宽,降低了企业成本。可是由于现在越来越多的图片、脚本、css和flash被嵌入到页面中,当客户访问站点势必会做很多次的http请求,因此我们还可以通过mod_expires缓存模块来设置ExpiresHeader来缓存这些文件。Expires是通过header报文来指定特定类型的文件在游览器中的缓存时间的。平时,我们大多数的图片,flash在发布之后都是不需要经常修改的,因此做了缓存之后,游览器第一次从服务器下载之后,就不需要再从服务器下载这些文件而是直接从游览器缓存中读取了。这样客户访问页面的速度就会大大加快,企业的带宽压力也得到了缓解。

1、mod_expires模块检查及安装

检查mod_expires模块是否安装的方法如下:


view sourceprint?
1.[root@c64-web /]# /usr/local/apache/bin/apachectl -M | grep deflate
2.expires_module (static)  #此种结果为编译安装时装的
3.[root@c64-web /]# /usr/local/apache/bin/apachectl -M | grep deflate
4.expires_module (shared)  #此种结果为DSO方式安装的

安装了的话,就可以直接进行压缩配置了,如果没有安装,下面为安装方法

a)编译方式安装

编译的时候跟上--enable-expires即可实现安装

b)DSO方式安装


view sourceprint?
1.[root@c64-web /]# cd /server/tools/httpd-2.4.6/modules/filters/  #切到apache源码包mod_expires所在的目录下
2.[root@c64-web filters]# /usr/local/apache/bin/apxs -c -i -a mod_expires.c  #以dso的方式编译安装到apache中
3.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_762977.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

容器方式搭建免费的表白网站(2022.9.25更新)

目录效果图拉取镜像运行容器访问制作方式效果图 拉取镜像 docker pull registry.cn-zhangjiakou.aliyuncs.com/dwz/softwares:boy921运行容器 docker run -di -p 80:80 -e BOYNAME王晨 -e GIRLNAME王舒涵 -e FIRSTTIME2022/9/21 -e STARTTIME2022,8,21 registry.cn-zhangjia…

24.网站更新数据监控-1

24.网站更新数据监控-1 一.scrapy 对网站是否更新做监控1.spider.py # -*- coding: utf-8 -*- import scrapy import time import re from WEB.conmon.md5_tool import md5_encodefrom WEB.items import WebItemclass CompanyInfoSpider(scrapy.Spider):name wenzhouallowed_d…

网站忘记密码怎么找回?

网站忘记密码怎么找回? 两个方法 方法一&#xff1a; 登录数据库&#xff0c;把password 下面的这一串加密串 解密一下。我至今没这样弄过&#xff0c;原理是这样&#xff0c;但是我没找到好用的md5 解密网站。一般的都要收费的。 方法二: 在数据库重置一个简单的密码&#xf…

手机网站按住放大图片_让渣渣像素图片复活,推荐两个无损放大图片的网站

老Y在之前的文章中推荐过不少寻找高清大图的网站&#xff08;收集了3年的网站和大家分享&#xff09;​虽然大多数情况下能够找到比较高清的图片&#xff0c;但有些图片确实很难找到高清的&#xff0c;比如一些企业的Logo、专业性设备照片等&#xff0c;只能在官网上找到一些小…

建站公司需要结合哪方面来制作网站?

企业建网站目的就是为了推广自己品牌、产品、业务等项目。对一个企业来讲&#xff0c;建设网站可迅速树立自已的品牌形象&#xff0c;来提高知名度。但对于建设网站公司来讲&#xff0c;既要结合建站技术&#xff0c;又要根据企业需要来打造用户喜欢的网站。 可能有人会想&…

代码内容变成图片_SEO代码优化之img图片标签

在网站的页面中&#xff0c;图片是重要的组成元素之一&#xff0c;所以&#xff0c;对网站img图片进行SEO优化&#xff0c;不仅有利于用户的浏览体验提升&#xff0c;也有利于搜索引擎蜘蛛的抓取识别&#xff0c;还可以丰富页面的内容&#xff0c;提升页面得分&#xff0c;有利…

50万以内的网站服务器系统配置,每秒50万次请求 你的Web服务器能办到吗?

现在的 HTTP 服务器性能非常之高&#xff0c;在一些老的服务器上一样可以有非常棒的表现&#xff0c;下面是对 Nginx 1.0.14 自带的默认首页进行压力测试的结果&#xff0c;图表显示每秒请求数和并发连接数&#xff1a;在这张图中 Nginx 的最高处理能力达到每秒 50w 的请求数处…

爬取17k小说网站

传入网站的首页的url&#xff0c;获取首页多个书籍对应书名和对应书名的url 书籍对应书名和对应书名的url如下 部分代码如下 def getBook(url):getBookList []chrome webdriver.Chrome()chrome.get(url)texts chrome.find_elements_by_xpath(//ul[class"Top1"]/li…

Django的模板继承和加载以及常见网站类型

PyCharm快捷键 Ctrlf查找 Ctrlr替换 做项目过程中注意事项 前面记得加斜杠 代表从根匹配&#xff0c;加/很重要。不加的话代表从当前的目录开始。 模板继承 针对网站所有的网页通常使用一个模板&#xff0c;所有代码都有相同部分&#xff0c;为了减少代码冗余&#xff0c;方便代…

python做的网站_如何用Python做一个网站?

Install pip install Django 2. 新建一个2113工程 django-admin startproject mysite 然后5261&#xff0c;4102我们会得到一个这样的文件结构请点击输入图片描述 python manage.py runserver 0.0.0.0:8888 然后&#xff0c;你就可1653以在浏览器地址栏中输入http://127.0.0.1:…

分类信息网站源码_SEO优化:教你三招做好分类信息网站优化

各位小伙伴大家好~我是新人小编艾斯~今天给大家分享下分类信息网站优化分类信息网目前看似已经被赶集网、58同城这样的超大网站垄断&#xff0c;但是针对地方的分类信息&#xff0c;还是有做头的。比如朋友的“重庆二手it论坛”&#xff0c;就利用小众领域的分类信息进行突破&a…

网站备案负责人_网站icp备案流程是怎样的

目前在国内知名系统主机作网站&#xff0c;都是要按照国家法规来备案网站主办人信息&#xff0c;与以网站内容信息用途&#xff0c;都是要详细备案。那么&#xff0c;网站icp备案流程是怎样的?一起来了解一下吧。1.首先选择你备案的运营商&#xff0c;这里以百度云为例。注册好…

powerbi中python网站数据_PowerBI/Excel批量爬取网页数据超详细流程

前面介绍PowerBI数据获取的时候&#xff0c;曾举了一个从网页中获取数据的例子&#xff0c;但当时只是爬取了其中一页数据&#xff0c;这篇文章来介绍如何用PowerBI批量采集多个网页的数据。(Excel中的Power query可以同样操作)本文以智联招聘网站为例&#xff0c;采集工作地点…

网站克隆工具-httrack安装使用教程

1、安装 sudo apt-get isntall httarck 2、启动httrack cd 到一个文件夹 启动 httrack -*.gif www.*.com/*.zip -*img_*.zip 之后一路回车就行了&#xff0c;httrack会爬取所有网站的js文件以及图片保存到相应的文件夹中 3、克隆完成 过一会提示 Done.K Thanks for usi…

网站被百度提示有风险,该如何解决?网站被黑怎么办?

网站在最近被百度提示有风险&#xff0c;导致网站流量急剧的下滑&#xff0c;从百度点击进去会直接跳转到什 么BCdu博的网站上去&#xff0c;360提示&#xff1a;未经证实的BCdu博网站您访问的网站含有未经证实的境外BC网站的相关内容&#xff0c;可能给您造成财产损失&#xf…

网站被入侵,该如何查找黑客及网站漏洞?

当网站被攻击后&#xff0c;令人头疼的是网站哪里出现了问题&#xff0c;是谁在攻击我们&#xff0c;是利用了什么网站漏洞呢&#xff1f;如果要查找到黑客攻击的根源&#xff0c;通过服务器里留下的网站访问日志是一个很好的办法。为什么网站访问日志是如此的重要呢&#xff1…

网站安全检测服务之PHP代码的后台绕过登录漏洞

针对于PHP代码的开发的网站&#xff0c;最近在给客户做网站安全检测的同时&#xff0c;大大小小的都会存在网站的后台管理页面被绕过并直接登录后台的漏洞&#xff0c;而且每个网站的后台被绕过的方式都不一样&#xff0c;根据SINE安全渗透测试多年来经验&#xff0c;来总结一下…

网站被黑了被挂马篡改后我是如何解决网站被挂马!

1、发现被黑&#xff0c;网站被黑的症状两年前自己用wordpress搭了一个网站&#xff0c;平时没事写写文章玩玩。但是前些日子&#xff0c;突然发现网站的流量突然变小&#xff0c;site了一下百度收录&#xff0c;发现出了大问题&#xff0c;网站被黑了。大多数百度抓取收录的页…

javaweb网站安全问题web网站安全问题防范安全部署tomcat方法

Apache tomcat是JAVA开发&#xff0c;JSP运行首选的web环境&#xff0c;国内很多网站&#xff0c;以及平台都在使用tomcat 环境来运行网站&#xff0c;高效&#xff0c;稳定&#xff0c;安全&#xff0c;赢得了国内许多客户。tomcat 该如何安全设置与部署呢&#xff1f;SINE安全…

网站安全问题针对一句话木马函数的普析与防范

本文内容转载于Sinesafe网站安全服务http://www.sinesafe.com/article/20180608/244.htmlPHP网站安全防一句话木马入侵 一、首先是菜刀一句话木马&#xff1a; 菜刀一句话木马的原理是调用了PHP的代码执行函数&#xff0c;比如以下1和2两个常见的一句话菜刀马&#xff0c;就…