apache常见配置

Apache2.4配置
一、开机自启动
思考:能不能让源码包安装的apache像二进制包安装的apache一样方便的管理?

[root@localhost ~]# cp `which apachectl` /etc/init.d/httpd
[root@localhost ~]# vim /etc/init.d/httpd 在#!/bin/bash下加入:(前面需要'#')
# chkconfig: 2345 85 15
# description: httpd2.4...
[root@localhost ~]# chkconfig --add /etc/init.d/httpd
[root@localhost ~]# chkconfig --list httpd
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

二、日志切割
思考:如果日志过大,写满磁盘怎么办?行车记录仪

1、Apache自带rotatelogs工具

[root@localhost ~]# vim /usr/local/apach2/etc/httpd.conf
注释以下两行
ErrorLog logs/error_log
CustomLog logs/access_log common
重写为
ErrorLog "|bin/rotatelogs logs/errorlog.%Y-%m-%d-%H_%M_%S 86400 480"
CustomLog "|bin/rotatelogs logs/accesslog.%Y-%m-%d-%H_%M_%S 86400 480" common
86400为切割单位秒,480是中国与美国的时差,根据地区可自行调节。
也可以根据大小切割如
CustomLog "|bin/rotatelogs logs/accesslog.%Y-%m-%d-%H_%M_%S 5M" common
可识别的单位 K M G
2、系统log rotate工具

vim /etc/logrotate.conf
新增
/usr/local/apache2/logs/access_log {
daily
create
rotate 30
dateext
}
强制刷新截取日志
logrotate -f /etc/logrotate.conf
Error_log也要进行轮替
三、常用配置项(最基本)
apache主配置文件为httpd.conf,文件底部引入子配置文件于extra目录中,可选择开启高级功能,后面讲解

1 . ServerRoot:服务器的基础目录,一般来说它将包含conf/和logs/子目录,其它配置文件的相对路径即基于此目录。默认为安装目录,不需更改。

语法:ServerRoot /path/to/directory
例如:ServerRoot "/usr/local/apache2"
2 . PidFile:定义其pid文件所在的位置

语法:PidFile /path/to/apache2/pid
例如:Pidfile "/usr/local/apache2/logs/httpd.pid"
3 . Listen:定义apache监听的端口

语法:Listen [IpAddress:]port
例如:Listen 80
多端口:Listen 80 90
4 . LoadModule:加载特定的DSO模块。Apache默认将已编译的DSO模块存放于/usr/local/apache2/modules目录结中。如果想使用使用某一个DSO模块,需用LoadModule指令进行加载,windows多以dll结尾

语法:LoadModule some_module /path/to/module
例如:LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
5 . User:设置实际提供服务的子进程的用户。为了使用这个指令,服务器必须以root身份启动和初始化。如果你以非root身份启动服务器,子进程将不能够切换至指定用户,并继续以启动服务器的原始用户身份运行。如果确实以root用户启动了服务器,那么父进程将仍然以root身份运行。

语法:User user_name
例如:User daemon
apache 默认是以daemon用户的身份执行的
6 . Group:设置提供服务的Apache子进程运行时的用户组。为了使用这个指令,Apache必须以root初始化启动,否则在切换用户组时会失败,并继续以初始化启动时的用户组运行;

语法:Group group_name
例如:Group daemon
7 . ServerAdmin:设置管理员邮件地址,当apache服务器发生错误的时候,邮件地址就会出现在错误页面上。

语法:ServerAdmin email_address
例如:ServerAdmin 888@qq.com
8 . ServerName:设置服务器用于辨识自己的主机名和端口号。

语法:ServerName 主机名[:port]
例如:ServerName www.example.com
9 . DocumentRoot:设置网站根目录,服务器会将请求中的URL附加到DocumentRoot后面以构成指向文档的路径。

语法:DowumentRoot /path/to/someFile
例如:DocumentRoot "/data/a"
10 . 配置页面访问属性:

原则上一个需要访问的目录设置一组

<Directory "/path/to/somewhere">
Options:
Indexes:缺少指定的默认页面时,允许将目录中的所有文件以列表形式返回给用户;
FollowSymLinks:是否将符号连接所指向的文件打开;
None:所有选项都不启用
All:所有选项都启用
AllowOverride
All:寻找.htaccess文件
No:不寻找
访问控制:后面详述
</Directory>
注:MultiViews:协商可以这样理解,假如网页有中文的,英文的,阿拉伯文的,而用户需要中文的,则客户端和服务端进行协商,最后把中文的网页发送给用户,这就是协商;
11 . CustomLog:定义日志文件的文件名和格式;

语法:CustomLog "/path/to/access_log_file" Format_Name
例如:CustomLog "/data/a/access/www.a.com-access.log" combined
可选格式 common combined
12 . ErrorLog:定义错误日志

语法:ErrorLog "/path/to/error_log"
例如:ErrorLog "/data/a/error/www.a.com-error.log"
13 . Alias:设置路径别名

语法:Aliase /alias/ "/path/to/somewhere/"
这意味着访问http://Server_IP/alias时,其页面文件来自于/path/to/somewhere/这个位置
例如:Aliase /images/ "/data/a/imgs/"
注释:访问:http://192.168.136.128/images/1.gif
就相当于去访问192.168.136.128这台主机的/www/htdocs/images/1.gif
四、访问控制
在访问目录标签中添加标签

<RequireAll>
Require all allow
Require all denied
Require ip 192.168.1 192.168.2
Require not ip 192.168.1 192.168.2
Require ip 192.168.1/24
</RequireAll>
五、虚拟主机
思考:租一整台服务器租不起,一台能跑多个网站么?

有基于:域名、IP、端口三种划分方式

第一步:编辑httpd.conf将vhost的注释去掉(去掉'#')
# Include conf/extra/httpd-vhosts.conf
第二步:开始配置虚拟主机
[root@localhost ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
# 基于域名的
<VirtualHost *:80>
DocumentRoot "/data/a" # 指定你的web根目录
ServerName www.a.com # 配置多个的时候改这里即可
</VirtualHost>
# 基于IP的
<VirtualHost 192.168.137.22:80>
DocumentRoot "/data/a"
ServerName www.b.com
</VirtualHost>
# 基于PORT的,只是这个还必须编辑httpd.conf 追加端口:Listen 8080
<VirtualHost *:8080>
DocumentRoot "/data/b"
ServerName www.a.com
</VirtualHost>
思考:哪种最常用?

六、域名跳转
如果网站域名更换但保留用户访问方式可使用域名跳转

[root@localhost ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
...
ServerName www.newa.com # 新域名
ServerAlias www.a.com # 别名(老域名)
...
<VirtualHost>
升级一下
<If "(%{HTTP_HOST} == 'www.a.com') || (%{HTTP_HOST} == 'a.com') || (%{HTTP_HOST} == 'newa.com')">
Redirect permanent / http://www.newa.com/ # 301重定向
</If>
后面继续判断,比如其他人用www.b.com域名绑定你的IP,加上一下判断,无法从他的域名访问到 403
<ElseIf "!(%{HTTP_HOST} == 'www.newa.com') && !(%{HTTP_HOST} == 'localhost')">
Require all denied
</ElseIf>
</VirtualHost>
七、伪静态
思考:为什么新闻页面的链接都怪兮兮的,我们项目的URL可不是这样!

动态网站不适合大面积静态化,但访问方式有需要伪装,于是就产生了伪静态技术或者路由技术。伪静态只是使用rewrite模块改变了URL,实际上还是动态页面;

缺点:比纯动态URL解析更耗资源。

第一步:编辑httpd.conf将rewrite模块的注释去掉(去掉'#')
#LoadModule rewrite_module modules/mod_rewrite.so
第二步:修改AllowOverride 为 All
<Directory "/data/www">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
第三步:添加规则文件.htaccess到访问目录中
[root@localhost ~]# vim /data/a/.htaccess
RewriteEngine on
RewriteRule news_(d+).html index.php?id=$1
实现效果:输入news_(数值).html时,跳转到index.php文件,同时把数值当成变量传入index.php
八、开启目录浏览功能
编辑httpd.conf将autoindex子文件的注释去掉(去掉'#')
#Include etc//extra/httpd-autoindex.conf
默认的目录浏览功能比较简单,开启后会为文件添加图标也可以修饰文件类型。
九、配置浏览器静态缓存
配置静态缓存可以减少浏览器下载同一资源的次数,同时也可以减轻服务器的压力和节省带宽; 
比如说浏览器请求一个indx.html,该html里面包含一张a.png图片;没有配置静态缓存则每次请求都要重新加载下a.png图片;而配置了静态缓存则在有效期内不会再请求该图片。

# 首先要开启mod_expires模块(取消前面的注释'#')
[root@localhost ~]# vim /usr/local/apache2/conf/httpd.conf
# LoadModule expires_module modules/mod_expires.so
# 开始配置静态缓存
[root@localhost ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
<IfModule mod_expires.c>
ExpiresActive on
ExpiresByType image/gif "access plus 1 days"
ExpiresByType image/jpeg "access plus 24 hours"
ExpiresByType image/png "access plus 24 hours"
ExpiresByType text/css "now plus 2 hour"
ExpiresByType application/x-javascript "now plus 2 hours"
ExpiresByType application/x-shockwave-flash "now plus 2 hours"
ExpiresDefault "now plus 0 min"
</IfModule>
# 打开浏览器,查看结果是否正确(304表示缓存了),缓存时间是否与配置的一致
十、防盗链
思考:如果别人的网站需要图片等静态资源,那我网站资源地址显示,我站点的压力会增大么?github与春运事件

解决这个问题的方法是配置下防盗链,让外来的盗不了链;

# 开始配置
[root@localhost ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
在网站目录<Directory "/www/a"></Directory>中添加
SetEnvIfNoCase Referer "^http://www.a.com" local_ref
SetEnvIfNoCase Referer "^http://a.com" local_ref
<filesmatch ".(mp3|mp4|zip|rar|jpg|gif|png)">
Require all denied
Require env local_ref
</filesmatch>
最后 HTTP/1.1 状态码
--来自HTTP/1.1RFC文档
-1xx 报告的 - 接收到请求,继续进程.
-2xx 成功 - 步骤成功接收,被理解,并被接受
-3xx 重发 - 为了完成请求,必须采取进一步措施.
-4xx 客户端出错 - 请求包括错的顺序或不能完成.
-5xx 服务器出错 - 服务器无法完成显然有效的请求.
这里只介绍了简单实用的几种配置功能,需要扩展请查阅官网资料
http://httpd.apache.org/docs/2.4/
---------------------
作者:天下步武
来源:CSDN
原文:https://blog.csdn.net/u014737928/article/details/81040142
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/w1618/p/10748873.html