apache linux 网站
2011-06-13 22:48:08 weixin_33936401 阅读数 3

Apache服务器配置技术文档

1.基础知识 

 1.1rpm包安装目录结构

   /etc/httpd/ 工作目录

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

   /etc/httpd/conf.d/ 额外配置文件目录

   /var/www/html/ 默认的网页存放位置

   /var/www/cgi-bin/ 可执行的CGI程序目录
   
   /var/log/httpd/ 默认的日志目录
  
   /usr/sbin/apachect1 检测工具
 
   /usr/sbin/httpd  进程启动脚本

   /usr/bin/htpasswd 密码认证工具
 

 1.2 源代码包安装目录结构
    通常建议将下载的源代码包解压到/usr/local/src/目录下,而安装到/usr/local/apacheX路径下(X    可以理解成该源代码包的版本号,可随便定义 但自己一定记得是干什么用的)

  /usr/local/src中,该目录常用于保存需要编译的程序源代码(目录)。


   #tar -zxf httpd-2.0.59.tar.gz -C /usr/local/src  解压到指定路径

   #cd /usr/local/src/httpd-2.0.59/   进入到解压后的路径下

   #.configure --prefix=/usr/local/apache2 --enable-so --enable-rewrite 配置
 
       [--enable-so] 设置Apache服务器可以使用动态加载模块功能
       [--enable-rewirte]设置Apache服务器具有rewrite功能

       (Apache服务器的rewrite功能可以实现对动态网页地址的重写,从而使网页访问这可以通过更加        简单和容易记忆的网页地址访问动态网页系统中的页面)
   #make  编译

   #make install 安装到/usr/local/apache2目录中

 ------------------------------------------------------------------------------------------
    此时工作目录就是上面步骤中的 /usr/local/apache2
    几乎所有的相关配置文档,以及相关的目录都在这个路径下

    该目录下的目录和文件的介绍:

   bin/ 包括服务器运行和管理所需的执行程序,httpd使服务器的执行程序,
         apache1使服务程序的启动脚本。。。。。
  
   lib/ 保存了服务器运行所需的库文件

   conf 配置目录 httpd.conf使主配置文件

   htdocs 默认网页存放路径 ,该目录作为web服务器的根目录
 
   cgi-bin 可执行的CGI程序目录
 
   manual 目录中保存了服务器的帮助手册文件使网页格式的
 
   logs 日志存放目录 access_log访问日志文件 error_log错误日志文件
-------------------------------------------------------------------------------------------
    Apache服务的启动命令为:
                           #/usr/local/apache2/bin/apachectl start
                            没问题的话 启动是没有任何的提示信息的
    在实际的应用系统中,Apache服务器所需要设置在linux系统启动时自动运行,因此需要将apachect1  本的启动命令写入到rc.local文件

 #vi /etc/rc.local
 //在文件末尾添加以下命令
 /usr/local/apache2/bin/apachectl start

   在httpd.conf配置文件中使用ServerName为Apache服务器设置的主机域名,应该在域的授权dns服务     器中进行A记录的设置。

  重新启动httpd服务程序

  #/usr/local/apache2/bin/apachectl restart

  测试httpd.conf的语法

  #bin/apachect1 -t
  Syntax OK


------------------------------------------------------------------------------------------
  Apache配置文件解析

  httpd.conf文件的注释行的信息太多,获得完整的有效的配置清单需下列命令

  #grep -v "#" conf/httpd.conf | head -5

  截取文件httpd.conf文件中非#字符开头的字段中的前五行

----------------------
httpd.conf中的全局配置 :这些配置项不包括在任何区域中,决定了Apache服务器的全局设置

以下是httpd.conf文件中比较常用的全局配置内容:

-----------------------------------------------------------------
ServerRoot "/usr/local/apache2"           -------------1

pidFile logs/httpd.pid                    ------------2

Timeout 300                              -------------3

KeepAlive On                             -------------4

MaxKeepAliveRequests 100                 -------------5

KeepAliveTimeout 15                      -------------6

Listen 80                                -------------7

ServerAdmin you@example.com              -------------8

ServerName www.ltest.com:80              --------------9

DocumentRoot "/usr/local/apache2/htdocs" --------------10

ErrorLog logs/error_log                  ---------------11

Customlog logs/access_log common         ---------------12
 
--------------------------------------------------------------------
1.设置Apache服务器的跟目录,该目录包括了服务器运行必要的目录和文件
  在httpd.conf中,如果设置的目录或文件不使用绝对路径,都将被理解为是在服务器根目录下

2.设置保存httpd服务器程序进程号(PID)的文件 默认logs/httpd.pid 该"logs"目录位于Apache根目录下

3.用于设置Web服务器与浏览器之间网络连接的超时秒数,默认设置为300s

4.当设置为Off时服务器不使用保持连接功能,客户机的每次请求连接只能从服务器返回一个文件,传输效率比较低;当KeepAlive设置为On时,客户机与服务器建立一次连接后可以请求传输多个文件,提高了服务器传输文件的效率,建议保持连接。

5.当使用KeepAlive设置保持连接有效时,需要使用MaxKeepAliveRequests设置客户端每次连接允许请求相应的最大文件数,默认100个。

6.设置保持连接的超时秒数,当客户机的两次相邻请求超过该设置值时需要重新进行连接请求,默认为15s

7.Apache服务器监听的网络端口,默认80


8.设置Apache服务器管理员的E-mail地址,当服务器出现问题时 同过此地址联系管理员

9.ServerName 用于设置Apache服务器的主机名

10.用于设置Apache服务器网页(文档)根目录在Linux系统中的实际目录。Apache服务器中的服务器根目录(ServerRoot)和文档根目录(DocumentRoot)比较容易混淆,应格外注意。

11.错误日志的路径及文件名,默认logs/error_log

12.设置Apache服务器中访问日志文件的路径和格式类型.


-----------------------------------------------------------------------------------------------------------------------
建立系统用户的个人主页

在httpd.conf配置文件中已经默认使用UserDir设置项设置了用户的个人主页目录为public_html,即所有系统用户的宿主目录下如果有名为public_html的子目录,该目录将作为用户在Apache服务器中个人主页的文档根目录。

--------------------------------------------------
#grep UserDir /usr/local/apache2/conf/httpd.conf
--------------------------------------------------

下面以qq建立个人主页为例说明Apache服务器中个人主页的管理与应用

使用su命令将用户的身份由root转变为普通用户qq,当前目录变为宿主目录

-------------------
#su - qq
$pwd
/home/qq
-------------------

由于权限的严格访问 因此需要为其他用户增加进入宿主目录的权限

--------------------------------------
$chmod o+x .
--------------------------------------
public_html子目录默认并不存在,需要用户使用mkdir命令建立,目录建立后向里面建立index.html的文件,该文件为用户个人主页的首页

------------------------------------------------
$mkdir public_html
$vi pbulic_html/index.html
//输入文件的内容
------------------------------------------------

在地址栏中输入http://server.ip/~qq/

------------------------------------------------

如果能看到index.html文件的内容说明用户的个人主页建立成功。

==========================================================================================================================

域名虚拟主机的配置

下面将通过为"www.yahoo.com"和"www.baidu.com"在Apache服务器中配置虚拟主机为例,

     1.找到httpd.conf文件 配置主配置文件,#vi /etc/httpd/conf/httpd.conf


     2.在文件中的最后几行查到
 
     Name VirtualHost *:80     将其前面的#号去掉 ;

     3.再将下面几行例子复制到这行的下面 把每句的前面的#号都去掉 ;
 
 将其编辑成如下内容
              Name VirtualHost *:80
              <VirtualHost *:80>
               DocumentRoot /www/yahoo.com/html
               ServerName www.yahoo.com
               Errorlog /www/yahoo.com/logs/error_log
               CustomLog /www/yahoo.com/logs/access_log common
               </VirtualHost>
             <VirtualHost *:80>
               DocumentRoot /www/baidu.com/html
               ServerName www.baidu.com
               Errorlog /www/baidu.com/logs/error_log
               CustomLog /www/baidu.com/logs/access_log common
             </VirtualHost>

其各个目录的含义同上面的相同 这里就不做多余的累赘了!!!!!!!!

然后创建主配置文件中的相应的目录

#mkdir -p /www/yahoo.com/html
#mkdir -p /www/yahoo.com/logs
#mkdir -p /www/baidu.com/html
#mkdir -p /www/baidu.com/logs

再向目录中存放个网页文件 以用于测试

#echo "www.baidu.com" >/www/baidu.com/html/index.html
#echo "www.yahoo.com" >/www/yahoo.com/html/index.html

因为修改了主配置文件 因此要重启apache服务

#/usr/local/apache2/bin/apachectl stop
#
/usr/local/apache2/bin/apachectl start

查看端口 netstat -ant

然后在客户机上访问测验 如果没有做DNS服务器 可以找到hosts文件写入域名和IP的对应关系,以便能正确的访问到网站, 在地址栏分别输入 www.yahoo.com www.baidu.com 来测试 是否成功

-----------------------------------------------------------------------------------------

转载于:https://blog.51cto.com/878045653/587448

2016-04-20 17:34:48 Alvin__Yang 阅读数 621

在linux apache 上部署 django 网站

(这么难用的编辑器)

1.安装配置apache

1.    1网络上有很多相关内容,不再写了

2.测试的时候记得开启防火墙端口:

1)     /sbin/iptables -I INPUT -p tcp --dport 80-j ACCEPT

2)     linux下的开启防火墙80端口命令。

3)     使用的是root账户去操作,documentroot 设置在了root目录下,一直出现permissiondeny。

4)     改了就好了。因为~apache的群组是apache ,是没有权限操作root目录的。

5)     (这么难用的编辑器!!!!!)


2016-05-18 11:38:26 weixin_33755557 阅读数 2

环境:

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 -&gt; /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错误页面跳转文件放到其他目录的时候,不报错,但是页面跳转不过去。若跳转为未链接,则不影响。


转载于:https://blog.51cto.com/qianyi/1774659

2016-05-18 11:41:15 weixin_33705053 阅读数 1

七、启用压缩模块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模块是否安装方法方法是不同的。最后,我无奈做了很多测试,下面建议大家这样来检查。

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方式安装

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后跟的参数详解

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主配置文件中

1.LoadModule deflate_module     modules/mod_deflate.so

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

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

01.<< code="">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 p_w_picpath/gif p_w_picpath/png  p_w_picpath/jpe p_w_picpath/swf p_w_picpath/jpeg p_w_picpath/bmp

08.#DeflateFilterNote ratio     #在日志中放置压缩率标记,下面是记录日志的,这个功能一般不用

09.#LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate

10.#CustmLog logs/deflate_log.log deflate

11.ifmodule>

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

01.<< code="">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进行优雅重启

八、mod_expires缓存功能

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

1、mod_expires模块检查及安装

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

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方式安装

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.[root@c64-web filters]# ll /usr/local/apache/modules/mod_expires.so   #检查mod_deflate是否安装,成功安装这里会显示出该文件

4.-rwxr-xr-x 1 root root 37439 11月  5 02:02 /usr/local/apache/modules/mod_expires.so

2、配置缓存参数

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


1.LoadModule expires_module modules/mod_expires.so

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

缓存的用法有3种,分别问对全局,对目录,对虚拟主机。

a)对全局

对全局的配置就是在apache主配置文件httpd.conf的末尾加入如下参数即可


01.ExpiresActive on

02.ExpiresDefault "access plus 12 month"

03.ExpiresByType text/html "access plus 12 months"

04.ExpiresByType text/css "access plus 12 months"

05.ExpiresByType p_w_picpath/gif "access plus 12 months"

06.ExpiresByType p_w_picpath/jpeg "access plus12  12 months"

07.ExpiresByType p_w_picpath/jpg "access plus 12 months"

08.ExpiresByType p_w_picpath/png "access plus 12 months"

09.EXpiresByType application/x-shockwave-flash "access plus 12 months"

10.EXpiresByType application/x-javascript "access plus 12 months"

11.ExpiresByType video/x-flv "access plus 12 months"

b)对目录

对目录的配置就是在apache主配置文件中标签内加入如下参数即可


01.<< code="">Directory "/www/html">

02.AllowOverride None

03.Options None

04.Require all granted

05.ErrorDocument 404 /404.html

06.ExpiresActive on

07.ExpiresDefault "access plus 12 month"

08.ExpiresByType text/html "access plus 12 months"

09.ExpiresByType text/css "access plus 12 months"

10.ExpiresByType p_w_picpath/gif "access plus 12 months"

11.ExpiresByType p_w_picpath/jpeg "access plus12  12 months"

12.ExpiresByType p_w_picpath/jpg "access plus 12 months"

13.ExpiresByType p_w_picpath/png "access plus 12 months"

14.EXpiresByType application/x-shockwave-flash "access plus 12 months"

15.EXpiresByType application/x-javascript "access plus 12 months"

16.ExpiresByType video/x-flv "access plus 12 months"

17.Directory>

c)对虚拟主机

对虚拟主机的配置就是在apache的虚拟主机配置文件httpd-vhost.conf中添加如下参数即可


01.<< code="">VirtualHost *:80>

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.ExpiresActive on

09.ExpiresDefault "access plus 12 month"

10.ExpiresByType text/html "access plus 12 months"

11.ExpiresByType text/css "access plus 12 months"

12.ExpiresByType p_w_picpath/gif "access plus 12 months"

13.ExpiresByType p_w_picpath/jpeg "access plus12  12 months"

14.ExpiresByType p_w_picpath/jpg "access plus 12 months"

15.ExpiresByType p_w_picpath/png "access plus 12 months"

16.EXpiresByType application/x-shockwave-flash "access plus 12 months"

17.EXpiresByType application/x-javascript "access plus 12 months"

18.ExpiresByType video/x-flv "access plus 12 months"

19.VirtualHost>


转载于:https://blog.51cto.com/qianyi/1774660

2016-05-18 11:53:15 weixin_33963594 阅读数 1

十、开启防盗链

一些小网站为了盈利,通过盗链来实现对自己网站内容的丰富,这无疑加大了企业的空间和流量的成本,因此我们需要对apache进行防盗链的配置。

由于我们要用到mod_rewrite模块,因此我们需要先检测该模块是否安装,检测和安装方法与上面mod_deflate和mod_expires的一样,这里不多讲了。

防盗链配置:

一般我们都是将防盗链的配置,配置在虚拟主机里面,配置如下:

<VirtualHost *:80>

ServerAdmin 274546888@qq.com

DocumentRoot "/www/html"

ServerName www.sunsky.pw

ServerAlias sunsky.pw

CustomLog "|/usr/local/sbin/cronolog /app/logs/www_access_%Y%m%d.log" combined

ErrorLog "|/usr/local/sbin/cronolog /app/logs/www_error_%Y%m%d.log"

<IfModule rewrite_module>

RewriteEngine On

RewriteCond %{HTTP_REFERER} !^http://sunsky.pw/.*$ [NC]

RewriteCond %{HTTP_REFERER} !^http://sunsky.pw$ [NC]

RewriteCond %{HTTP_REFERER} !^http://www.sunsky.pw/.*$ [NC]

RewriteCond %{HTTP_REFERER} !^http://www.sunsky.pw$ [NC]

RewriteRule .*\.(gif|jpg|swf)$ http://www.sunsky.pw [R,NC]

</IfModule>

</VirtualHost>

如上配置之后,我们重启apache服务即可生效。

 

十一、禁止目录浏览

由于开启目录浏览会让我们整个目录下的内容全部都暴露到外面,因此我们必须要禁止目录浏览功能。当然一些目录开放给客户做下载的,可以忽略此项优化。我的http://down.sunsky.pw就是范例。

我们通过修改apache主配置文件httpd.conf中的<Directory></Directory>标签内的Options选项参数来实现禁用目录浏览。

实现方法有三种:

第一种:


<Directory /www/html>

AllowOverride None

Options FollowSymLinks   #不填写Indexes项,默认即为关闭。

Require all granted

</Directory>

第二种:


 

<Directory /www/html>

AllowOverride None

Options -Indexes #通过在Indexes前面加-来禁用此功能

Require all granted

</Directory>

第三种:

 

<Directory /www/html>

AllowOverride None

Options None    #禁用所有选项

Require all granted

</Directory>

十二、禁用AllowOverride选项,关闭.htaccess文件使用

首先是性能考虑,如果AllowOverride启用了.htaccess文件,则apache需要在每个目录中查找.htaccess文件。因此,无论是否真正用到,启用.htaccess都会导致服务器性能的下降。另外,对于每一个请求,都需要读取一次.htaccess文件。

其次是安全考虑,这样会允许用户自己修改服务器的配置,这可能会导致某些意想不到的修改,所以请认真考虑是否应当给予用户这样的特权。

1、禁用AllowOverride选项

我们通过修改apache主配置文件httpd.conf中的<Directory></Directory>标签内的AllowOverride选项参数来实现禁用目录浏览。


<Directory /www/html

Options none

AllowOverride None    #禁止该选项,防止用户重复载入

Require all granted

</Directory>

通过该设置加快了服务器响应速度,因为它不再让每个请求去寻求每个目录的访问控制文件(.htaccess)

2、关闭.htaccess文件使用

默认在Unix平台下能够使用.htaccess来对目录权限进行规则定义,但是这是不安全的,建议关闭,默认的选项:


AccessFileName .htaccess

这里我们将它关闭注释掉


 

#AccessFileName .htaccess

全部目录权限定义使用httpd.conf中的定义,不使用.htaccess进行定义。

 

十三、关闭自带CGI功能

生产环境中,一般我们不使用apache自带的cgi的功能,如果使用的话,可以用mod_perl模块来替代。因此我们这里需要将apache主配置文件httpd.conf中有关cgi的内容删除掉。

删除部分:


ScriptAlias /cgi-bin/ "/usr/local/apache2.4.6/cgi-bin/"

&lt;Directory "/usr/local/apache2.4.6/cgi-bin"&gt;

AllowOverride None

Options None

Require all granted

&lt;/Directory&gt;

十四、禁止PHP解析指定站点的目录

企业的站点有时会提供用户进行上传操作,而用户上传文件的存放目录,我们是不能给php的解析权限的,否则会对apache服务和系统造成危害。

 

十五、apache的安全模块

我们需要对apache站点增加一些扩展的安全模块,如:mod_evasive20防DDOS、mod_limitipconn(针对单站点)配置、mod_security2防SQL注入等等之类的工具。

另外,下面是推荐给大家的几个工具。

1、makejail http://www.floc.net/makejail/

它是一个自动把建立jail所需要的程序放到jail内的软件,使用python编写,他有debian和openbsd的版本。

2、mod-security http://www.modsecurity.org/

它是apche的一个模块,它不仅可以实现过滤请求和日志审计等功能,而且可以防止SQLInjection和跨站脚本***等是个很不错的安全模块。

 

十六、使用tmpfs文件系统替代频繁访问的目录

tmpfs是一种基于内存的文件系统。它最主要的两个优势就是动态文件系统大小和速度快。因为典型的tmpfs文件系统会完全驻留在RAM中,读写几乎可以是瞬间的。即使用了一些交换分区,性能仍然是卓越的。因此对于那些频繁访问的目录,建议使用tmpfs文件系统进行替代。

 

十七、优化系统内核参数

对系统内核的优化参数,我们在系统的基础优化这边博文已经讲过了。系统内核优化最主要的目的就是减少TIME-WAIT的TCP连接数。

由于在基础优化篇我们已经对apache进行了内核参数的优化,因此这里我就不再操作了。这里我将为大家对优化的参数进行讲解。


net.ipv4.tcp_fin_timeout  #表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间,默认值是60秒。

net.ipv4.tcp_tw_reuse   #表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认值为0,表示关闭。该参数对应系统路径为:/proc/sys/net/ipv4/tcp_tw_reuse 0

net.ipv4.tcp_tw_recycle  #表示开启TCP连接中TIME-WAIT sockets的快速回收该参数对应系统路径为:/proc/sys/net/ipv4/tcp_tw_recycle提示:reuse和recycle两个参数为了防止生产环境下web,squid等time_wait过多设置的。

net.ipv4.tcp_syncookies   #表示开启SYN Cookies功能。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN***,Centos5系列默认值为1,表示开启。因此这个参数也可以不添加。该参数对应系统路径为:/proc/sys/net/ipv4/tcp_syncookies,默认为1

net.ipv4.tcp_keepalive_time   #表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为10分钟。该参数对应系统路径为:/proc/sys/net/ipv4/tcp_keepalive_time,默认为7200秒。

net.ipv4.ip_local_port_range  #选项用来设定允许系统打开的端口范围。即用于向外连接的端口范围。该参数对应系统路径为:/proc/sys/net/ipv4/ip_local_port_range  32768  61000

net.ipv4.tcp_max_syn_backlog   #表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。选项为服务器端用来记录那些尚未收到客户端确认信息的连接请求的最大值。

该参数对应系统路径为:/proc/sys/net/ipv4/tcp_max_syn_backlog

net.ipv4.tcp_max_tw_buckets    #表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清楚并打印警告信息。默认为180000,对于Apache、Nginx等服务器来说可以调整低一点,如改为5000-30000,不同业务的服务器也可以给大一旦,比如lvs,squid。上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。此参数对应系统路径为:/proc/sys/net/ipv4/tcp_max_tw_buckets

net.ipv4.tcp_synack_retries   #参数的值决定了内核放弃连续之前发送SYN+ACK包的数量。该参数对应系统路径为:/proc/sys/net/ipv4/tcp_synack_retries默认值为5

net.ipv4.tcp_syn_retries    #表示在内核放弃建立连接之前发送SYN包的数量。该参数对应系统路径为:/proc/sys/net/ipv4/tcp_syn_retries 5

net.ipv4.tcp_max_orphans    #选项用于设定系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,孤立连接将立即被复位并打印出警告信息。这个限制这是为了防止简单的Dos***,不能过分依靠这个限制甚至认为减少这个值,更多的情况是增加这个值。该参数对应系统路径为:/proc/sys/net/ipv4/tcp_max_orphans 65536

十八、尽可能减少HTTP请求数

http请求是要开销的,想办法减少请求数自然可以提高网页速度。常用的方法,合并css,js(将一个页面中的css和js文件分别合并)以及Imagemaps和csssprites等。当然或许将css,js文件拆分成多个是因为css结构,共用等方面的考虑。阿里巴巴中文站当时的做法是开发时依然分开开发,然后在后台对js,css进行合并,这样对于游览器来说依然是一个请求,但是开发时仍然能还原成多个,方便管理和重复引用。yahoo甚至建议将首页的css和js直接写在页面文件里面,而不是外部引用。因为首页的访问量太大了,这么做可以减少两个请求数。而事实上国内的很多门户都是这么做的。

其中csssprites是指只用将页面上的背景图合并成一张,然后通过css的background-position属性定义不过的值来取他的背景。淘宝和阿里巴巴中文站目前都是这样做的。http://www.csssprites.com/这是个工具网站,它可以自动将你上传的图片合并,并给出对应的background-position坐标。并将结果以png和gif的格式输出。


转载于:https://blog.51cto.com/qianyi/1774669

没有更多推荐了,返回首页