linux Apache服务器系统安全设置与优化

 更新时间:2008年07月15日 18:35:53   作者:  
结合,mod_gzip 和缓冲工具等,我们完全可以使一台配置较低的 PC 有足够的能力处理各种 HTML/CGI 等的请求。

 BrowserMatch命令为特定的客户程序,设置特殊的参数,以保证对老版本浏览器的兼容性,并支持新浏览器的新特性。

# SetHandler server-status

# Order deny,allow

# Deny from all

# Allow from .your_domain.com

# SetHandler server-info

# Order deny,allow

# Deny from all

# Allow from .your_domain.com

## Deny from all

# ErrorDocument 403 http://phf.apache.org/phf_...

用于设置访问控制的设置主要是针对目录和文件进行设置的,然而也可以针对不同的URL进行访问控制的设置,这样就不必担心ScriptAlias、 Alias是否将路径设置到了受控制的目录之外了。针对URL进行控制的语句为 Location语句,这样不但能对服务器上的文件、CGI提供保护,此外,它还能保护不能找到对应文件,而是由服务器本身提供的特殊功能URL。http://servername/server-s...用于报告当前Apache服务器的状态,http://servername/server-i...用于报告Apache 服务器的统计信息。与此相关的设置还有ExtendedStatus参数,可以让服务器输出更详细的的报告。

#ProxyRequests On

# Order deny,allow

# Deny from all

# Allow from .your_domain.com

#ProxyVia On

#CacheRoot "/www/proxy"

#CacheSize 5

#CacheGcInterval 4

#CacheMaxExpire 24

#CacheLastModifiedFactor 0.1

#CacheDefaultExpire 1

#NoCache a_domain.com another_domain.edu joes.garage_sale.com

  Apache服务器本身就具备代理的功能,然而这要求加载入mod_proxy模块。这能使用IfModule语句进行判断,如果存在mod_proxy模块,就使用 ProxyRequests打开代理支持。此后的Directory用于设置对Proxy功能的访问权限设置,以及用于设置缓冲的各个参数设置。

虚拟主机

#NameVirtualHost 12.34.56.78:80

#NameVirtualHost 12.34.56.78

# ServerAdmin webmaster@host.some_domain.com

# DocumentRoot /www/docs/host.some_domain.com

# ServerName host.some_domain.com

# ErrorLog logs/host.some_domain.com-error_log

# CustomLog logs/host.some_domain.com-access_log common

  缺省设置文件中的这些内容是用于设置命名基础的虚拟主机服务器时使用。其中NameVirtualHost 来指定虚拟主机使用的IP地址,这个IP地址将对应多个 DNS名字,如果Apache使用了Listen 参数控制了多个端口,那么就可以在这里加上端口号以进一步进行区分对不同端口的不同连接请求。此后,使用 VirtualHost 语句,使用NameVirtualHost指定的IP地址作参数,对每个名字都定义对应的虚拟主机设置。

  虚拟主机是在一台Web服务器上,可以为多个单独域名提供Web服务,并且每个域名都完全独立,包括具有完全独立的文档目录结构及设置,这样域名之间完全独立,不但使用每个域名访问到的内容完全独立,并且使用另一个域名无法访问其他域名提供的网页内容。

  虚拟主机的概念非常有用,因为虽然一个组织可以将自己的网页挂在具备其他域名的服务器上的下级往址上,但使用独立的域名和根网址更为正式,易为众人接受。传统上,必须自己设立一台服务器才能达到单独域名的目的,然而这需要维护一个单独的服务器,很多小单位缺乏足够的维护能力,更为合适的方式是租用别人维护的服务器。没有必要为一个机构提供一个单独的服务器,完全可以使用虚拟主机能力,使服务器为多个域名提供Web服务,而且不同的服务互不干扰,对外就表现为多个不同的服务器。

  有两种设定虚拟主机的方式,一种是基于HTTP 1.0标准,需要一个具备多IP地址的服务器,再配置DNS 服务器,给每个IP地址以不同的域名,最后才能配置Apache的配置文件,使服务器对不同域名返回不同的Web文档。由于这需要使用额外的IP地址,对每个要提供服务的域名都要使用单独的IP地址,因此这种方式实现起来问题较多。可以在一个网络界面上绑定多个IP地址,Linux下需要使用ifconfig的 alias参数来进行这个配置,但此时会影响网络性能。

  HTTP 1.1标准在协议中规定了对浏览器和服务器通信时,服务器能够跟踪浏览器请求的是哪个主机名字。因此可以利用这个新特性,使用更轻松的方式设定虚拟主机。这种方式不需要额外的IP地址,但需要新版本的浏览器支持。这种方式已经成为建立虚拟主机的标准方式。要建立非IP基础的虚拟主机,多个域名是不可少的配置,因为每个域名就对应一个要服务的虚拟主机。因此需要更改DNS服务器的配置,为服务器增加多个C NAME选项,如:

linux IN A 192.168.1.64

vhost1 IN CNAME linux

vhost2 IN CNAME linux

 基本的设置选项都是为了linux主机设定的,如果要为vhost1和vhost2设定虚拟主机,就要使用VirtualHost语句定义不同的选项,在语句中可以使用配置文件前面中的大部分选项,而可以重新定义几乎所有的针对服务器的设置。

NameVirtualHost 192.168.1.64

DocumentRoot /www/data

ServerName linux.example.org.cn

DocumentRoot /vhost1

ServerName vhost1.example.org.cn

DocumentRoot /vhost2

ServerName vhost2.example.org.cn

  这里需要注意的是,VirtualHost的参数地址一定要和NameVirtualHost定义的地址相一致,必须保证所有的值严格一致,Apache服务器才承认这些定义是为这个IP地址定义的虚拟主机。

  此外,定义过NameVirtualHost之后,那么对这个IP地址的访问都被区分不同的虚拟主机进行处理,而对其他IP地址的访问,例如127.0.0.1,才应用前面定义的缺省选项。

另外一些加速方法

1、 Web 页面和 CGI 页面采用了浏览器缓冲技术。具体的方法可以参考附录一:采用 mod_gzip 加速Apache

2、 不要让 X Windows 运行在你的 Web 服务器上,用 Ctrl-Alt-Backspace 关闭 X 。

3、 在 CGI 脚本中:

                           文件 I/O:打开的文件数目越少越好。

                           Shell 命令:采用全路径来调用 shell 命令。

                           在Web 页面目录中,不要让文件数超过 1000 个,文件越多花费在定位上的时间也越多。

4、 在 Web 服务器上的图片越少越好,保证每个图片都经由图片压缩器运行。

5、 应该配置尽量多的内存,内存的大小对系统性能影响非常大。

6、 可以用strace命令调试调用。

        当你不确定httpd.conf里的设置更改对进程的影响时,strace或许能奏效,通过观察输出的行数,可以判断对一个固定页面访问时需要的调用数。如:

#ps –ef|grep http

#strace –p http_pid

accept(18, 0xFFBEFA50, 0xFFBEFA74, 1) = 3

fcntl(24, F_SETLKW, 0x001D0E10) = 0

sigaction(SIGUSR1, 0xFFBEF908, 0xFFBEF98 = 0

getsockname(3, 0xFFBEFA60, 0xFFBEFA74, 1) = 0

setsockopt(3, 6, 1, 0xFFBEF9C4, 4, 1) = 0

read(3, " G E T / c a s e i n c".., 4096) = 590

sigaction(SIGUSR1, 0xFFBED800, 0xFFBED880) = 0

time() = 1043377552

stat("/docroot/osc-new/www/caseincident/listCase.php", 0x0022BF5 = 0

umask(077) = 0

umask(0) = 077

setitimer(ITIMER_PROF, 0xFFBEF628, 0x00000000) = 0

sigaction(SIGPROF, 0xFFBEF4F8, 0xFFBEF57 = 0

sigprocmask(SIG_UNBLOCK, 0xFFBEF618, 0x00000000) = 0

getsockopt(6, 65535, 8192, 0xFFBE67B0, 0xFFBE67AC, 0) = 0

setsockopt(6, 65535, 8192, 0xFFBE67B0, 4, 0) = 0

setitimer(ITIMER_PROF, 0xFFBEF788, 0x00000000) = 0

sigaction(SIGUSR1, 0xFFBEF908, 0xFFBEF98 = 0

read(3, 0x001E5BC0, 4096) (sleeping...)

附录一、采用 mod_gzip 加速Apache

说明:本附录为全文引用。

我们知道 mod_gzip 是用来在服务器端把客户请求的内容压缩后发送给客户端的一个 Apache 模块。本站的 Zope 通过 FastCGI 来实现和 Apache 的结合,Apache 是解析 HTML 页面的服务程序。安装好 mod_gzip 后就即能压缩普通静态页面也能压缩 Zope 文档。

一、安装

http://www.hyperspacecommu...

页面上有 mod_gzip 的二进制码版本和源码下载。如果你使用前者的话,直接把文件拷贝到 Apache Home 的 libexec 目录下就可以了。下载 mod_gzip.c 后,如果你的 Apache 用 DSO 模式安装的话,用下面简单的命令就可以安装了:

# /www/bin/apxs -i -a -c mod_gzip.c

二、配置

安装完毕以后把下列配置加入httpd.conf :

# mod_gzip 配置

LoadModule gzip_module libexec/mod_gzip.so

AddModule mod_gzip.c

mod_gzip_on Yes

mod_gzip_minimum_file_size 1002

mod_gzip_maximum_file_size 0

mod_gzip_maximum_inmem_size 60000

mod_gzip_item_include mime "application/x-httpd-php"

mod_gzip_item_include mime "text/*"

# 压缩 Zope 的内容:

mod_gzip_item_include file "[^.]*$"

mod_gzip_item_include mime "httpd/unix-directory"

mod_gzip_dechunk Yes

mod_gzip_temp_dir "/tmp"

mod_gzip_keep_workfiles No

mod_gzip_item_include file ".php$"

mod_gzip_item_include file ".txt$"

mod_gzip_item_include file ".html$"

mod_gzip_item_exclude file ".css$"

mod_gzip_item_exclude file ".js$"

并添加下面的行:

LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i" mod_gzip: %{mod_gzip_compression_ratio}npct." mod_gzip

把对应虚拟主机配置中的日志文件参数修改为 mod_gzip

三、压缩效果

这样,我们得到类似以下的日志文件:

61.169.41.13 - - [02/Mar/2002:01:24:29 -0500] "GET /pipermail/freelamp/2002-March/000026.html HTTP/1.1" 200 72848 "http://www.freelamp.com/pipermail/freelamp/2002-March/subject.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Q312461; NetCaptor 6.5.0)" mod_gzip: 54pct.

61.169.41.13 - - [02/Mar/2002:01:24:52 -0500] "GET /new/publish/1003233602/index_html HTTP/1.1" 200 4304 "http://www.freelamp.com/new/publish/search?subject=Zope&op=articles" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Q312461; NetCaptor 6.5.0)" mod_gzip: 65pct.

61.169.41.13 - - [02/Mar/2002:01:24:53 -0500] "GET /new/publish/global_css HTTP/1.1" 200 629 "http://www.freelamp.com/new/publish/1003233602/index_html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Q312461; NetCaptor 6.5.0)" mod_gzip: 73pct.

61.169.41.13 - - [02/Mar/2002:01:24:54 -0500] "GET /new/publish/Images/sitetitle_img HTTP/1.1" 304 0 "http://www.freelamp.com/new/publish/1003233602/index_html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Q312461; NetCaptor 6.5.0)" mod_gzip: 0pct.

61.169.41.13 - - [02/Mar/2002:01:26:21 -0500] "GET /new/publish/index_html HTTP/1.1" 200 7317 "http://www.freelamp.com/new/publish/1003233602/index_html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Q312461; NetCaptor 6.5.0)" mod_gzip: 80pct.

61.169.41.13 - - [02/Mar/2002:01:26:22 -0500] "GET /new/publish/global_css HTTP/1.1" 200 629 "http://www.freelamp.com/new/publish/index_html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Q312461; NetCaptor 6.5.0)" mod_gzip: 73pct.

61.169.41.13 - - [02/Mar/2002:01:26:24 -0500] "GET /new/publish/TopicImages/Tutorial HTTP/1.1" 304 0 "http://www.freelamp.com/new/publish/index_html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Q312461; NetCaptor 6.5.0)" mod_gzip: 0pct.

61.169.41.13 - - [02/Mar/2002:01:26:24 -0500] "GET /new/publish/LinkImages/jsp001_img HTTP/1.1" 304 0 "http://www.freelamp.com/new/publish/index_html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Q312461; NetCaptor 6.5.0)" mod_gzip: 0pct.

我们看到 mod_gzip 已经对 .html 和那些没有点的文件作了压缩,压缩率达到了 70-80%。但是,mod_gzip 对图片文件不作压缩。

四、总结

结合,mod_gzip 和缓冲工具等,我们完全可以使一台配置较低的 PC 有足够的能力处理各种 HTML/CGI 等的请求。

相关文章

  • Apache RewriteBase 指令使用介绍

    Apache RewriteBase 指令使用介绍

    RewriteBase指令显式地设置了目录级重写的基准URL。在下文中,你将看到RewriteRule可以用于目录级的配置文件中(.htaccess)并在局部范围内起作用,即规则实际处理的只是剥离了本地路径前缀的一部分
    2016-04-04
  • 详解ubuntu安装CMake的几种方式

    详解ubuntu安装CMake的几种方式

    这篇文章主要介绍了详解ubuntu安装CMake的几种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • 在linux服务器下使用版本控制软件SVN的方法

    在linux服务器下使用版本控制软件SVN的方法

    下面小编就为大家分享一篇在linux服务器下使用版本控制软件SVN的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • Apache中.htaccess文件功能

    Apache中.htaccess文件功能

    .htaccess文件的功能:"分布式配置文件"提供了针对目录改变配置的方法,即:在一个特定的文档目录中放置一个包含一个或多个指令的文件,以作用于此目录及其所有子目录。
    2011-06-06
  • Linux下的Memcache安装方法

    Linux下的Memcache安装方法

    最近在研究怎么让Discuz!去应用Memcache去做一些事情,记录下Memcache安装的过程。
    2010-05-05
  • 技术小白也能搞定的Linux安装Jenkins+cpolar教程!

    技术小白也能搞定的Linux安装Jenkins+cpolar教程!

    亲爱的技术小白,你是否曾想过在自己的Linux系统上安装Jenkins和cpolar?如果你的答案是肯定的,那么恭喜你,你找对了地方,这个教程将教你如何轻松搞定这两个强大的工具的安装,让你在技术世界里游刃有余,别再犹豫了,让我们一起踏上这趟精彩的旅程吧!
    2024-02-02
  • linux下apache开启url重写的方法(详细说明)

    linux下apache开启url重写的方法(详细说明)

    Apache 2.x 中URL重写,是通过mod_rewrite.so 来实现的,所以您要查看您的Apache 是否已经被编译进去这个模块了,并且在Apache的配置文件httpd.conf 中已经调用了这个模块
    2012-04-04
  • centos redhat系列对抗ddos之居家必备利器 banip.txt

    centos redhat系列对抗ddos之居家必备利器 banip.txt

    本文可以用于redhat centos 系列 linux 系统的 屏蔽多连接ip,具有抗ddos功能的代码。
    2010-11-11
  • ubuntu下用dpkg命令行运行deb安装包的方法

    ubuntu下用dpkg命令行运行deb安装包的方法

    在Ubuntu系统中,除了通过桌面启动deb安装包外,还能通过命令行来运行deb安装包,需要使用到dpkg命令,下面这篇文中就给大家介绍下Ubuntu下使用dpkg命令运行deb安装包的方法,需要的朋友可以参考借鉴,一起来学习下吧。
    2017-01-01
  • Linux 4.0 不再需要重启

    Linux 4.0 不再需要重启

    在大多数的服务器或者数据中心里,喜欢用linux的一个原因是你不需要频繁的进行重启操作。诚然,某些关键性的补丁必须要进行重启,但你也可以等到数月后再做此操作。现在,得益于 linux 内核的最新更新 你也许可以数年间都不用重启。
    2015-03-03

最新评论