龙空技术网

Apache服务优化

IT男侃球 319

前言:

现时姐妹们对“图片防盗链apache”大约比较关切,大家都想要剖析一些“图片防盗链apache”的相关内容。那么小编同时在网上搜集了一些关于“图片防盗链apache””的相关资讯,希望小伙伴们能喜欢,你们一起来了解一下吧!

Apache服务优化

1 配置cronolog进行日志轮循

wget ;ResourceID=1851&site=1

-rwxr-xr-x. 1 root root 24988 Dec 7 16:36 rotatelogs#Apache只带的轮循工具,日志切割会丢日志

tar zxf cronolog-1.6.2.tar.gz

cd cronolog-1.6.2.tar.gz

./configure

make && make install

cd ../

在虚拟主机末尾添加

#######################config apache log lunxun#######

CustomLog "|/usr/local/sbin/cronolog /application/apache/logs/access_; combined

按天轮询(生产环境常见用法,推荐使用):

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

提示:这是大多数网站的常规配置方法(按天记录日志,日志不会自动覆盖)

生产中用法:(按每月的第几天%d,即保存30天)

<VirtualHost *:80>

ServerAdmin 6xxxxx@qq.com

DocumentRoot "/var/www/html"

ServerName

ServerAlias linuxyw.com

ErrorLog "logs/linuxyw-error_log"

CustomLog "|/usr/local/sbin/cronolog /var/log/apache/linuxyw_access_%w.log" combined

</VirtualHost>

CustomLog "|/usr/local/sbin/cronolog /app/logs/access_www_%Y%m%d%H.log" combined #生产环境按小时轮询,如果需要及时对Apache日志分析 此法适合

按周轮询的

CustomLog "|/usr/local/sbin/cronolog /app/logs/access_www_%w.log" combined #

[root@mode extra]#

2 错误页面优雅显示

将404等错误信息页面重定向到网站首页或者其它页面 提升用户体验

修改Apache配置文件 将 ErrorDocument 404 #此处支持URL和文件路径

# Customizable error responses come in three flavors:

# 1) plain text 2) local redirects 3) external redirects

356 # Some examples:

357 #ErrorDocument 500 "The server made a boo boo."

358 #ErrorDocument 404 /missing.html

359 #ErrorDocument 404 "/cgi-bin/missing_handler.pl"

360 #ErrorDocument 402

ErrorDocument 404

3 Apache deflate_mod压缩模块

<ifmodule mod_deflate.c>

DeflateCompressionLevel 9

SetOutputFilter DEFLATE

DefalteFilterNote Input instream

DefalteFilterNote Output outstream

DefalteFilterNote Ratio ratio

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

#CustomLog logs/deflate_log.log deflate

</ifmodule> #加到<V..></V..>里

仅仅压缩特定的MIME类型文件

AddOutputFilterByType DEFLATE text/html text/plain text/xml

或者

AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript

mod_deflate模块提供了DEFLATE输出过滤器 允许服务器在将内容发送给客户端之前进行压缩 以节约带宽 提升用户体验

安装方法:编译Apache时加入此模块--enable-deflate 或者以DSO方式编译【--enable-so激活DSO】 查看帮助./configure --help|grep deflate

DSO方式: /application/apache/bin/apachectl -l|grep mod_deflate #查看是否安装了mod_deflate

如果是以DSO方式编译的 结果为:mod_deflate.so

DSO编译过程:

切到apache解压目录 cd /home/tools/httpd2.2.31/modules/filters

/application/apache/bin/apxs -c -i -a mod_deflate.c #以dso方式编译到Apache中

ll /application/apache/modules/mod_deflate.so #检查

两个mod不能同时存在 要不然Apache会报错

4 缓存模块 mod_expires缓存功能

添加Expire/Cache-Control头

如今的网站越来越多的图片 脚本 CSS flash被嵌入到页面中 当我们访问它们的时候势必会做

许多次的http请求 其实我们可以通过设置Expire header来缓存这些文件 Expire其实就是通过header报文来指定特定的类型文件在浏览器中的缓存时间,大多数图片 flash在发布后都是不需要经常修改的,做了缓存一行这样浏览器就不需要再从服务器下载这些文件而是直接从缓存中读取 这样再次访问页面的速度会大大加快。

[root@mode extra]# curl -I blog.aa.com

HTTP/1.1 200 OK

Date: Sun, 13 Dec 2015 06:18:38 GMT

Server: Apache/2.2.31 (Unix) DAV/2 PHP/5.3.10

Last-Modified: Tue, 08 Dec 2015 07:05:44 GMT

ETag: "23efd-12-5265d9a3961cc"

Accept-Ranges: bytes

Content-Length: 18

Cache-Control: max-age=31104000

Expires: Wed, 07 Dec 2016 06:18:38 GMT

Vary: Accept-Encoding

Content-Type: text/html

配置方法:可以针对虚拟主机或Apache主配置文件

ExpiresActive on

ExpiresDefault "access plus 12 month"

ExpiresByType text/html "access plus 12 months"

ExpiresByType text/css "access plus 12 months"

ExpiresByType image/gif "access plus 12 months"

ExpiresByType image/jpeg "access plus 12 months"

ExpiresByType image/jpg "access plus 12 months"

ExpiresByType image/png "access plus 12 months"

ExpiresByType application/x-shockwave-flash "access plus 12 months"

ExpiresByType application/x-javascript "access plus 12 months"

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

淘宝的缓存时间

[root@mode extra]# curl -I

HTTP/1.1 200 OK

Server: Tengine

Content-Type: image/jpeg

Content-Length: 666192

Connection: keep-alive

Date: Tue, 20 Oct 2015 09:15:49 GMT

Last-Modified: Tue, 20 Oct 2015 08:50:56 GMT

Expires: Wed, 19 Oct 2016 09:15:49 GMT

Cache-Control: max-age=31536000

Access-Control-Allow-Origin: *

Via: cache9.l2et15-1[0,200-0,H], cache63.l2et15-1[3,0], cache4.cn228[0,200-0,H], cache1.cn228[2,0]

Age: 4658370

X-Cache: HIT TCP_HIT dirn:3:462507919

X-Swift-SaveTime: Thu, 12 Nov 2015 05:26:08 GMT

X-Swift-CacheTime: 29562581

Timing-Allow-Origin: *

百度的缓存时间:

[root@mode extra]# curl -I

HTTP/1.1 200 OK

Date: Sun, 13 Dec 2015 07:23:58 GMT

Server: Apache

P3P: CP=" OTI DSP COR IVA OUR IND COM "

Set-Cookie: BAIDUID=C77D376D097F467E4B122C83A255E2D0:FG=1; expires=Mon, 12-Dec-16 07:23:58 GMT; max-age=31536000; path=/; domain=.baidu.com; version=1

Last-Modified: Thu, 20 Jan 2011 07:15:35 GMT

ETag: "65e-49a41e65933c0"

Accept-Ranges: bytes

Content-Length: 1630

Cache-Control: max-age=315360000

Expires: Wed, 10 Dec 2025 07:23:58 GMT

Connection: Keep-Alive

Content-Type: image/gif

Expires针对目录的特殊用法

针对指定目录做缓存

<Directory ~ "/application/.*/(all|tuijian)">

ExpiresActive On

ExpiresDefault "access plus 5 mitutes"

ExpiresByType text/html "access plus 1 day"

ExpiresByType text/css "access plus 1 day"

ExpiresByType image/gif "access plus 1 day"

ExpiresByType image/jpeg "access plus 1 day"

ExpiresByType image/png "access plus 1 day"

ExpiresByType audio/mpeg "access plus 1 year"

ExpiresByType audio/x-ms-wma "access plus 1 year"

ExpiresByType video/mpeg "access plus 1 year"

ExpiresByType video/x-msvideo "access plus 1 day"

ExpiresByType application/x-shockwave-flash "access plus 1 year"

ExpiresByType application/x-javascript "access plus 1 day"

ExpiresByType application/javascript "access plus 1 day"

expires优点:

生产环境mod_expires优点

1 提升用户体验

由于用户读本地缓存 所以访问页面就快 用户体验提升 网站口碑就好了

2 节约网站带宽成本

由于用户读本地缓存 和服务器的交互就少了 也节省网站的带宽流量 既满足用户 公司也少花钱

3 节约网站服务器及维护成本

由于用户读本地缓存 和服务器的交互就少了 服务器的压力小了 服务器数量及维护人员等成本都降低了

expires失效条件

1 用户主动清空缓存

当使用了mod_expires功能后 当用户访问一次资源后 在expires时间过期之前

就不会在去服务器下载该资源了 除非用户浏览器端主动清空浏览器缓存

2 内容缓存期已到

即expires的时间到了设定时间 此时 则内容缓存失效 用户又会重新请求服务器

5 更改Apache的默认用户

useradd -M -s /sbin/nologin apache

vi /application/apache/conf/httpd.conf

添加/修改

User apache

Group apache

6 Apache的worker模式 提升并发数(可以达到2000~5000)

编译安装Apache时 加 --with-mpm=worker \

apache的编译安装参数如下

./configure \

--prefix=/application/apache2.2.31 \

--enable-deflate \

--enable-expires \

--enable-headers \

--enable-modules=most \

--enable-so \

--with-mpm=worker \

--enable-rewrite

make

make install

7屏蔽Apache版本等敏感信息

1修改httpd.conf 打开httpd-default.conf模块

2修改httpd-default.conf文件 ServerSignature Off以及ServerTokens Prod

重启Apache apachectl graceful是设置生效

8 Apache目录文件权限设置 (属组root 目录755 文件 644)

[root@mode extra]# ll /var/www/

total 16

drwxr-xr-x. 2 root root 4096 Dec 8 15:12 bbs

drwxr-xr-x. 3 root root 4096 Dec 9 14:48 blog

drwxr-xr-x. 2 root root 4096 Dec 9 10:49 image

drwxr-xr-x. 2 root root 4096 Dec 8 15:13 mp3

[root@mode extra]# ll /var/www/bbs/index.html

-rw-r--r--. 1 root root 24 Dec 8 15:12 /var/www/bbs/index.html

[root@mode extra]#

提示:在网站架构中 应该把资源文件 包括用户上传的图片 附件等和程序分离 最好把上次程序也分离

这样就可以从容授权了

9 开启httpd-mpm.conf增加连接数,Apache默认并发数150

修改httpd.conf 打开httpd-mpm.conf模块

390 # Server-pool management (MPM specific)

391 #Include conf/extra/httpd-mpm.conf

然后

切换到

[root@mode logs]# vi ../conf/extra/httpd-mpm.conf 下进行修改

<IfModule mpm_worker_module>

StartServers 5

MaxClients 2000

MinSpareThreads 50

MaxSpareThreads 200

ThreadLimit 200

ThreadsPerChild 100

MaxRequestsPerChild 0

</IfModule>

10 Apache防盗链功能

<IfModule rewrite_module>

RewriteEngine On

RewriteCond % {HTTP_REFERER} !~http://域名/.*$[NC]

RewriteCond % {HTTP_REFERER} !~http://域名$ [NC]

RewriteCond % {HTTP_REFERER} !~.域名/.*$[NC]

RewriteCond % {HTTP_REFERER} !~.域名$ [NC]

RewriteRule .*\. (gif|jpg|swf)$ .域名 [R,NC]

</IfModule>

  Apache 防盗链的第一种实现方法,可以用 rewrite 实现。

首先要确认 Apache 的 rewrite module 可用:能够控制 Apache httpd.conf 文件的,打开 httpd.conf,

确保有这么一行配置: #LoadModule rewrite_module modules/mod_rewrite.so  去掉前面的“#”,

然后在找到自己网站对应的 配置的地方,加入下列代码:

ServerName

# 防盗链配置

RewriteEngine On

RewriteCond %{HTTP_REFERER} !^.*$ [NC]

RewriteCond %{HTTP_REFERER} !^ [NC]

RewriteCond %{HTTP_REFERER} !^.*$ [NC]

RewriteCond %{HTTP_REFERER} !^ [NC]

RewriteRule .*\.(gif|jpg|swf)$ [R,NC]

防盗链配置的说明:

红色部分: 表示自己的信任站点。对我的站点来说,设置为 和

橙色部分: 要保护文件的扩展名(以|分开)。以这些为扩展名的文件,必须通过红色标注的网址引用,才可以访问。 蓝色部分: 盗链后的重定向页面。用以输出警示信息,这张图片应该尽可能的小。例如我的警示图片是。为了简单处理的原因,我的绿色字体部分,要保护的图片扩展中,没有 .png 的图片,而警示图片是 .png的。(我站内没有 .png的其他图片)

然后重新启动 apache 服务器即可。

11 禁止目录索引 Index

<Directory /var/www/html>

Options FollowSymLinks

AllowOverride None

Order allow,deny

Allow from all

</Directory>

或者

<Directory /var/www/html>

Options -Indexes FollowSymLinks

AllowOverride None

Order allow,deny

Allow from all

</Directory>

12 禁止用户重载 ---加快服务器速度 因为他不再为每个请求找每个目录访问控制文件 .htaccess

<Directory "/application/apache/htdocs">

Options none

AllowOverride None #禁止用户覆盖(重载)

Order allow,deny

Allow from all

</Directory>

13 关闭CGI

注释掉或者删掉

#ScriptAlias /cgi-bin/ "/application/apache2.2.31/cgi-bin/"

258

259 </IfModule>

260

261 <IfModule cgid_module>

262 #

263 # ScriptSock: On threaded servers, designate the path to the UNIX

264 # socket used to communicate with the CGI daemon of mod_cgid.

265 #

266 #Scriptsock logs/cgisock

267 </IfModule>

268

269 #

270 # "/application/apache2.2.31/cgi-bin" should be changed to whatever your ScriptAliased

271 # CGI directory exists, if you have that configured.

272 #

273 #<Directory "/application/apache2.2.31/cgi-bin">

274 # AllowOverride None

275 # Options None

276 # Order allow,deny

277 # Allow from all

278 #</Directory>

14 避免使用.htaccess文件(分布式配置文件)

首先是性能的考虑 如果AllowOverride启用了.htaccess文件 则Apache需要在每个目录中寻找.htaccess文件

因此 无论是否真正用到 启用.htaccess都会导致性能的下降 另外 对每个请求 都需要读取一次.haccess文件

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

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

AccessFileName .htaccess

或者

#AccessFileName .htaccess

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

15 Apache的安全模块

mod_evasive20防DDOS mod_limitipconn(针对单站点)配置 mod_security2 防SQL注入等

makejail下载地址

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

mod-security

它是Apache的一个模块 它请求过滤 日志审计等功能 可以防止SQL Injection 跨站脚本攻击 很不错的一个模块

16 正确途径取得源代码 勤打Apache补丁

17 Apache日志授予root700权限(Apache的主进程是root),不需要在日志目录上给Apache用户读或写的许可

chown -R root.root logs

chmod -R 700 logs

18 系统内核参数优化

防DOS

echo 1> /proc/sys/net/ipv4/tcp_syncookies

echo 1> /proc/sys/net/ipv4/tcp_syn_retries

echo 1> /proc/sys/net/ipv4/tcp_synack_retries

echo 2048> /proc/sys/net/ipv4/tcp_max_syn_backlog

echo 2> /proc/sys/net/ipv4/tcp_keepalive_probes

echo 180> /proc/sys/net/ipv4/tcp_keepalive_time

19 禁止php解析指定站点目录

<Directory "/var/www/html">

Options FollowSymLinks

AllowOverride None

Order allow,deny

Allow from all

php_flag engine off #此行关掉

</Directory>

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

21 尽量减少http请求数

Yahoo的建议是将首页的CSS和js直接写在页面文件里面 而不是使用外部引用

因为首页的访问量大 这么做也可以减少两个请求数 国内的很多门户网站也是这么做的

22 使用CDN做网站加速(网宿 蓝汛 快网)

将网站内容发布到离用户最近的cache服务器内 通过DNS负载均衡技术 判断用户来源就近访问cache服务器取得所需内容

23 Apache程序架构化

1 程序页面服务器 2图片服务器 3上传服务器 三者功能尽量分离

a 分离最佳方式是分别使用独立的服务器

b 次选方案在前端负载均衡器通过haproxy、nginx 根据目录或者扩展名请求后面对应的服务器

403的原因:1 Apache配置文件中没有对站点目录的权限许可配置 这通常是在初始安装Apache后

更改了默认的Apache站点目录所致

2 站点目录下无首页文件index.* 而Apache的配置又禁止了目录浏览【Options -Indexes ...】所以报403错误

3 Directory 权限问题

如Deny from 10.0.0.0/24

4 站点路径权限问题

引言:为了防止域名解析恶意指向,我们需要禁止apache默认的空主机头,操作如下

系统运维 温馨提醒:qihang01原创内容版权所有,转载请注明出处及原文链接

vi /etc/httpd/conf/httpd.conf

#编辑配置文件,在你的站点配置之前再增加一个站点(红色字体部分是我们要增加的,蓝色字体部分代表你正在使用的站点配置)

NameVirtualHost *

<VirtualHost *:80>

ServerAdmin

DocumentRoot /error

ServerName abc.com

</VirtualHost>

系统运维 温馨提醒:qihang01原创内容版权所有,转载请注明出处及原文链接

<VirtualHost *:80>

ServerAdmin

DocumentRoot "你的站点路径"

ServerName yourWebsite.com

ServerAlias *.yourWebsite.com

</VirtualHost>

-----------------php优化--------------------------------

eaccelerator

xcache

加速

2、使用tmpfs作为缓存的文件目录

mount -t tmpfs tmpfs /dev/shm -o size=256m

mount -t tmpfs /dev/shm /tmp/eaccelerator/

3、php.ini的优化

engine =On #启用php解析引擎

short_open_tag = off

output_buffering=4096#输出缓冲区大小,建议在4096~8192;可以减少写入 减少网络数据包的发送

safe_mode=on#是否启用安全模式;打开PHP将检查当前脚本的拥有者是否和被操作者的文件的拥有者相同,可以控制php的函数,如system()

disable_functions=phpinfo,get_cfg_var#该指令接受一个以逗号分隔的函数名列表 以禁用特定的函数 增强服务器的安全性

phpinfo(),get_cfg_var()

expose_php=On

(3)关闭危险的函数

disable_functions=chdir,chroot,dir,getcwd,opendir,readdir,scandir,fopen,unlink,delete,mkdir,rmdir,rename,file,file_get_contents,fputs,fwrite,chgrp,chmod,chown

(4)关闭php版本信息在http头中的泄露

expose_php=off

(5)关闭注册全局变量

register_global=off

(6)打开magic_quotes_gpc来防止SQL注入,主要是转义掉特殊字符

magic_quotes_gpc=on

(7)错误信息控制

display_errors=off

#error_reporting=E_WARNING&E_ERROR#显示错误,最后关闭

(8)错误日志

log_errors=on

error_log=/app/jinlogs/php_error.log#给Apache用户和组写的权限

其它参数的优化

max_execution_time=30 #如果导数据库的话调大点

max_input_time=60

memory_limit=32M

upload_max_filesize=2M#根据具体情况 调大点

output_buffering=on

cgi.fix_pathinfo=0 #去掉注释,主要是防止nginx文件类型错误解析漏洞

memory_limit=128M

allow_url_fopen=off

nginx限制php程序解析

location ~ ^/images/.*\.(php|php5)$

{

deny all;

}

location ~ ^/static/.*\.(php|php5)$

{

deny all;

}

location ~* ^/data/(attachment|avatar)/.*\.(php|php5)$

{

deny all;

}

这些目录的限制必须写在以下配置的前面

location ~ .*\.(php|php5)?$

{

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php

include fcgi.conf

}

fastcgi,php-fpm调优

pid = /app/logs/php-fpm.pid

error_log=/app/logs/php-fpm.log #

log_level=error #

rlimit_files=32768 #

events.mechanism=epoll #

listen.owner=nginx

listen.group=nginx

pm.max_children=1024

pm.start_servers=16 #CPU核数的2倍

pm.min_spare_servers=5

pm.max_spare_servers=20

pm.process_idle_timeout=15s

pm.max_requests=2048

slowlog=/app/logs/$pool.log.slow

request_slowlog_timeout=10

php_admin_value[sendmail_path]=/usr/sbin/sendmail -t -i -f aa@qq.com

-------Apache 403Forbidden问题------

1、Apache的配置文件没有对站点目录许可,即站点目录权限问题,一般是更改了默认的Apache站点目录导致的

解决办法:增加类似<Directory "/application/apache2.2.31/htdocs"></Directory>标签实现对指定目录的权限控制

典型如下(对/var/www目录下的文件允许访问):

<Directory "/var/www">

Options -Indexes FollowSymLinks # 为了服务器的安全 Indexes参数一般要取消

AllowOverride None

Order allow,deny # 允许未被明确拒绝的

Allow from all

</Directory>

2、站点目录下没有首页文件,而Apache的配置文件又禁止了目录浏览

 站点目录下没有首页文件(index.php、index.html等默认文件),而apache的配置又禁止了目录浏览(#Indexes参数:访问目录时,另外如果不存在默认首页则展示站点列表,该行建议改成 Options None),这时也会提示403错误。

解决办法:在站点目录添加默认首页文件或者将配置文件中Options Index增加上。

3、deny from all 禁用了所有来访者访问

<Directory "/var/www">

Options -Indexes FollowSymLinks # 为了服务器的安全 Indexes参数一般要取消

AllowOverride None

Order allow,deny # 允许未被明确拒绝的

Deny from all

</Directory>

解决办法:参考原因2解决方法配置<Directory ></Directory> 参数。

如果系统为Linux系统,站点可能存在目录权限问题

站点目录需要apache的用户有访问权限,否则就会报403错误(一般web站点目录权限给755,站点文件权限给644,上传程序通过另外的上传服务器提供文件上传)

标签: #图片防盗链apache