apache功能优化
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了apache功能优化相关的知识,希望对你有一定的参考价值。
隐藏Apache版本等敏感信息
$ grep Server /usr/local/httpd/conf/extra/httpd-default.conf|grep -v "#"
修改后如下:
ServerTokens Prod
ServerSignature Off
但是还是会出现apache的字样:
$ curl -I localhost
Server: Apache
彻底隐藏的方法: 在编译前, 修改tar包下的include/ap_release.h文件
#define AP_SERVER_BASEVENDOR "Apache Software Foundation" #服务的供应商名称
#define AP_SERVER_BASEPROJECT "Apache HTTP Server" #服务的项目名称
#define AP_SERVER_BASEPRODUCT "Apache" #服务的产品名
#define AP_SERVER_MAJORVERSION_NUMBER 2 #主要版本号
#define AP_SERVER_MINORVERSION_NUMBER 4 #小版本号
#define AP_SERVER_PATCHLEVEL_NUMBER 6 #补丁级别
#define AP_SERVER_DEVBUILD_BOOLEAN 0 #...
更改apache的默认用户
$ useradd -M -s /sbin/nologin apache
$ vim /usr/local/httpd/conf/httpd.conf
User apache
Group apache
修改apache日志权限
$ chmod 700 /usr/local/httpd/logs
日志轮询(分割)
$ cd /usr/local/tools
$ wget http://cronolog.org/download/cronolog-1.6.2.tar.gz
$ tar zxf cronolog-1.6.2.tar.gz
$ cd cronolog-1.6.2
$ ./configure
$ make && make install
$ grep CustomLog /usr/local/httpd/conf/httpd.conf
按天轮询(生产环境常见用法,推荐使用。按小时,则文件名再加上 %H):
CustomLog "|/usr/local/sbin/cronolog /usr/local/httpd/logs/access_%Y%m%d.log" combined ErrorLog "|/usr/local/sbin/cronolog /usr/local/httpd/logs/error_%Y%m%d.log"
错误页面优雅显示
$ vi /usr/local/httpd/conf/httpd.conf
<Directory "/usr/local/httpd/htdocs"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all ErrorDocument 404 /404.html ##新增一行 </Directory>
$ vi /usr/local/httpd/htdocs/404.html
Error: lost page...
mod_rewrite防盗链
##示例: 虚拟主机的配置文件 <VirtualHost *:80> ServerAdmin 123456@qq.com DocumentRoot "/usr/local/httpd/htdocs" ServerName www.test.com ServerAlias test.com CustomLog "|/usr/local/sbin/cronolog /usr/local/httpd/logs/access_%Y%m%d.log" combined ErrorLog "|/usr/local/sbin/cronolog /usr/local/httpd/logs/error_%Y%m%d.log" <IfModule rewrite_module> RewriteEngine On RewriteCond %{HTTP_REFERER} !^http://test.com/.*$ [NC] RewriteCond %{HTTP_REFERER} !^http://test.com$ [NC] RewriteCond %{HTTP_REFERER} !^http://www.test.com/.*$ [NC] RewriteCond %{HTTP_REFERER} !^http://www.test.com$ [NC] RewriteRule .*\.(gif|jpg|swf)$ http://www.test.com [R,NC] </IfModule> </VirtualHost>
禁止目录浏览: httpd.conf
<Directory "/usr/local/httpd/htdocs"> Options -Indexes ##方式1 Options FollowSymLinks ##方式2 </Directory>
禁用AllowOverride选项: httpd.conf
apache需要在每个目录中查找.htaccess文件。因此,无论是否真正用到,启用.htaccess都会导致服务器性能的下降。另外,对于每一个请求,都需要读取一次.htaccess文件。
<Directory /usr/local/httpd/htdocs>
Options none
AllowOverride None ##设置为none
Require all granted
</Directory>
关闭.htaccess文件使用: httpd-default.conf
全部目录权限定义使用httpd.conf中的定义,不使用.htaccess进行定义
#AccessFileName .htaccess ##注释掉
关闭自带CGI功能: httpd.conf
一般我们不使用apache自带的cgi的功能,如果使用的话,可以用mod_perl模块来替代
修改配置文件, 删掉有关cgi的内容
#ScriptAlias /cgi-bin/ "/usr/local/httpd/cgi-bin/" #<Directory "/usr/local/httpd/cgi-bin"> #AllowOverride None #Options None #Order allow,deny #Allow from all #</Directory>
禁止php解析某个目录: 比如用户的上传文件目录
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和跨站脚本攻击等是个很不错的安全模块。
apache网站架构优化
1.在生产环境中建议将程序页面服务器、图片附件服务器和上传服务器三者的功能尽量分离。
2.或在前端负载均衡器通过haproxy/nginx来根据用户请求的目录或扩展名来对后端的服务器发出请求。
优化linux系统内核参数
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
;
以上是关于apache功能优化的主要内容,如果未能解决你的问题,请参考以下文章