apache2日常笔记
.htaccess
反向代理
依赖模块:
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ http://malu.me/$1 [P]
</IfModule>
给特定文件后缀添加header头
<FilesMatch ".json" >
Header set Access-Control-Allow-Origin: "*"
</FilesMatch>
禁止用户访问特定文件
<Files config.json>
order allow,deny
deny from all
</Files>
禁止访问特定后缀-正则匹配
<FilesMatch "\.(sql|py|db|sh)$">
order allow,deny
deny from all
</FilesMatch>
静态项目重写
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.html [L]
</IfModule>
动态项目重写
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
设置.htaccess后出现页面500错误
查看apache2的错误日志出现:.htaccess: order not allowed here
解决办法:
在apache的配置文件中修改AllowOverride的属性为all:
AllowOverride All
表示允许用户自定义.htaccess文件。
升级apache2
系统环境:Ubuntu 14.04、apache2
apache 2.4.9以后php-fpm协同apache一起工作所需要的配置没有以前那么复杂了,所以有必要升级一下。
查看apache版本
apachectl -v
1.添加并更新源
LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/apache2
apt-get update
注意,命令前加了 LC_ALL=en_US.UTF-8,为了防止添加期间编码报错问题!
如果还是出现编码问题则:
locale-gen en_US en_US.UTF-8
dpkg-reconfigure locales
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
注:
locale # 查看当前编码环境
locale -a # 查看所有支持的语言环境
如果add-apt-repository在您的VPS中不可用,请安装它。
apt-get install software-properties-common
或者,在较旧的Ubuntu版本上:
apt-get install python-software-properties
2.安装
安装前您可以通过以下方式查看存储库中的可用版本:
$ apt-cache policy apache2
apache2:
Installed: 2.4.7-1ubuntu4.18
Candidate: 2.4.33-1+ubuntu14.04.1+deb.sury.org+1
Version table:
2.4.33-1+ubuntu14.04.1+deb.sury.org+1 0
500 http://ppa.launchpad.net/ondrej/apache2/ubuntu/ trusty/main amd64 Packages
*** 2.4.7-1ubuntu4.18 0
500 http://mirrors.aliyun.com/ubuntu/ trusty-updates/main amd64 Packages
500 http://mirrors.aliyun.com/ubuntu/ trusty-security/main amd64 Packages
100 /var/lib/dpkg/status
2.4.7-1ubuntu4 0
500 http://mirrors.aliyun.com/ubuntu/ trusty/main amd64 Packages
开始安装吧:
apt install apache2
系统会自动更新至最新版本 2.4.33
安装模块
安装mod_qos模块
apt-get install libapache2-mod-qos
安装模块后, 它将自动注册并启用自身。
配置文件路径:
/etc/apache2/mods-enabled/qos.conf
重启apache2
service apache2 restart
重新加载apache2的配置文件
apachectl graceful
使用a2enmod开启模块:
a2enmod qos
缓慢的http拒绝服务攻击处理
使用mod_reqtimeout和mod_qos两个模块相互配合来防护。
1、mod_reqtimeout用于控制每个连接上请求发送的速率。配置例如:
#请求头部分,设置超时时间初始为10秒,并在收到客户端发送的数据后,每接收到500字节数据就将超时时间延长1秒,但最长不超过40秒。可以防护slowloris型的慢速攻击。
RequestReadTimeout header=10-40,minrate=500
#请求正文部分,设置超时时间初始为10秒,并在收到客户端发送的数据后,每接收到500字节数据就将超时时间延长1秒,但最长不超过40秒。可以防护slow message body型的慢速攻击。
RequestReadTimeout body=10-40,minrate=500
需注意,对于HTTPS站点,需要把初始超时时间上调,比如调整到20秒。
2、mod_qos用于控制并发连接数。配置例如:
当服务器并发连接数超过600时,关闭keepalive
QS_SrvMaxConnClose 600
限制每个源IP最大并发连接数为50
QS_SrvMaxConnPerIP 50
这两个数值可以根据服务器的性能调整。
配置缓存
1.进入apache模块目录:
cd /etc/apache2/mods-enabled
2.给expires、headers两个模块建立软链:
ln -s ../mods-available/expires.load
ln -s ../mods-available/headers.load
3.建立配置文件、以及软链:
ln -s ../mods-available/expires.conf
ln -s ../mods-available/headers.conf
或者使用a2enmod开启模块:
a2enmod expires
a2enmod headers
4.编辑配置文件:
cat ../mods-available/expires.conf
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/html "now plus 1 day"
ExpiresByType text/css "now plus 1 month"
ExpiresByType application/x-javascript "now plus 5 day"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/bmp "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
</IfModule>
cat ../mods-available/headers.conf
<IFModule mod_headers.c>
Header add Pragma "cache"
</IFModule>
5.重启apache2:
/etc/init.d/apache2 restart
内存优化
利用mpm_prefork模块调整内存占用:
apt-get install apache2-mpm-prefork
比如需要对低内存设备优化:
1.修改:/etc/apache2/mods-enabled/mpm_prefork.conf
<IfModule mpm_prefork_module>
StartServers 1
MinSpareServers 1
MaxSpareServers 10
MaxRequestWorkers 150
MaxConnectionsPerChild 2
</IfModule>
StartServers 启动时建立的子进程数量
MinSpareservers和MaxSpareServers分别设置空闲子进程的最小和最大数量
MaxConnectionsPerChild 子进程最大连接数 (超过了释放内存)
2.修改:/etc/apache2/apache2.conf
KeepAlive off
KeepAlive 配置的含义:
对于HTTP/1.1的客户端来说,将会尽量的保持客户的HTTP连接,通过一个连接传送多份HTTP请求响应。
这样对于客户端来说,可以提高50%左右的响应时间,而于服务器端来说则降低了更多个连接的开销。
不过这个依赖于客户端是否想保持连接。IE默认是保持连接的,当你打开100个图片的网站时,IE有可能只打开2个连接,通过这两个连接传送数据,而不是开100个连接。
在 Apache 服务器中,KeepAlive 是一个布尔值,On 代表打开,Off 代表关闭,这个指令在其他众多的 HTTPD 服务器中都是存在的。
KeepAliveTimeout 为持久连接保持的时间,也就是说,在这此连接结束后开始计时,多长时间内没有重新发送HTTP请求,就断掉连接。默认设置为5秒,这个值可以大点,但不能太大,否则会出现同时等候过多连接,导致多的内存被占用。
解决403错误
一般是权限不够导致,尝试在<Directory /**>目录下添加
Require all granted