Apache2.4常用配置

Apache2.4配置

一、开机自启动

思考:能不能让源码包安装的apache像二进制包安装的apache一样方便的管理?

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

httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

二、日志切割

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

1、Apache自带rotatelogs工具

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

2、系统log rotate工具

 
   
  1. vim /etc/logrotate.conf
  2. 新增
  3. /usr/local/apache2/logs/access_log {
  4. daily
  5. create
  6. rotate 30
  7. dateext
  8. }
  9. 强制刷新截取日志
  10. logrotate -f /etc/logrotate.conf
  11. Error_log也要进行轮替

三、常用配置项(最基本)

apache主配置文件为httpd.conf,文件底部引入子配置文件于extra目录中,可选择开启高级功能,后面讲解

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

 
   
  1. 语法:ServerRoot /path/to/directory
  2. 例如:ServerRoot "/usr/local/apache2"

2 . PidFile:定义其pid文件所在的位置

 
   
  1. 语法:PidFile /path/to/apache2/pid
  2. 例如:Pidfile "/usr/local/apache2/logs/httpd.pid"

3 . Listen:定义apache监听的端口

 
   
  1. 语法:Listen [IpAddress:]port
  2. 例如:Listen 80
  3. 多端口:Listen 80 90

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

 
   
  1. 语法:LoadModule some_module /path/to/module
  2. 例如:LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

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

 
   
  1. 语法:User user_name
  2. 例如:User daemon
  3. apache 默认是以daemon用户的身份执行的

6 . Group:设置提供服务的Apache子进程运行时的用户组。为了使用这个指令,Apache必须以root初始化启动,否则在切换用户组时会失败,并继续以初始化启动时的用户组运行;

 
   
  1. 语法:Group group_name
  2. 例如:Group daemon

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

 
   
  1. 语法:ServerAdmin email_address
  2. 例如:ServerAdmin 888@qq.com

8 . ServerName:设置服务器用于辨识自己的主机名和端口号。

 
   
  1. 语法:ServerName 主机名[:port]
  2. 例如:ServerName www.example.com

9 . DocumentRoot:设置网站根目录,服务器会将请求中的URL附加到DocumentRoot后面以构成指向文档的路径。

 
   
  1. 语法:DowumentRoot /path/to/someFile
  2. 例如:DocumentRoot "/data/a"

10 . 配置页面访问属性:

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

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

11 . CustomLog:定义日志文件的文件名和格式;

 
   
  1. 语法:CustomLog "/path/to/access_log_file" Format_Name
  2. 例如:CustomLog "/data/a/access/www.a.com-access.log" combined
  3. 可选格式 common combined

12 . ErrorLog:定义错误日志

 
   
  1. 语法:ErrorLog "/path/to/error_log"
  2. 例如:ErrorLog "/data/a/error/www.a.com-error.log"

13 . Alias:设置路径别名

 
   
  1. 语法:Aliase /alias/ "/path/to/somewhere/"
  2. 这意味着访问http://Server_IP/alias时,其页面文件来自于/path/to/somewhere/这个位置
  3. 例如:Aliase /images/ "/data/a/imgs/"
  4. 注释:访问:http://192.168.136.128/images/1.gif
  5. 就相当于去访问192.168.136.128这台主机的/www/htdocs/images/1.gif

四、访问控制

在访问目录标签中添加标签

 
   
  1. Require all allow
  2. Require all denied
  3. Require ip 192.168.1 192.168.2
  4. Require not ip 192.168.1 192.168.2
  5. Require ip 192.168.1/24

五、虚拟主机

思考:租一整台服务器租不起,一台能跑多个网站么?

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

 
   
  1. 第一步:编辑httpd.confvhost的注释去掉(去掉'#')
  2. # Include conf/extra/httpd-vhosts.conf
  3. 第二步:开始配置虚拟主机
  4. [root@localhost ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
  5. # 基于域名的
  6. <VirtualHost *:80>
  7. DocumentRoot "/data/a" # 指定你的web根目录
  8. ServerName www.a.com # 配置多个的时候改这里即可
  9. VirtualHost>
  10. # 基于IP的
  11. <VirtualHost 192.168.137.22:80>
  12. DocumentRoot "/data/a"
  13. ServerName www.b.com
  14. VirtualHost>
  15. # 基于PORT的,只是这个还必须编辑httpd.conf 追加端口:Listen 8080
  16. <VirtualHost *:8080>
  17. DocumentRoot "/data/b"
  18. ServerName www.a.com
  19. VirtualHost>

思考:哪种最常用?

六、域名跳转

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

 
   
  1. [root@localhost ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
  2. <VirtualHost *:80>
  3. ...
  4. ServerName www.newa.com # 新域名
  5. ServerAlias www.a.com # 别名(老域名)
  6. ...
  7. <\VirtualHost>
  8. 升级一下
  9. <If "(%{HTTP_HOST} == 'www.a.com') || (%{HTTP_HOST} == 'a.com') || (%{HTTP_HOST} == 'newa.com')">
  10. Redirect permanent / http://www.newa.com/ # 301重定向
  11. If>
  12. 后面继续判断,比如其他人用www.b.com域名绑定你的IP,加上一下判断,无法从他的域名访问到 403
  13. <ElseIf "!(%{HTTP_HOST} == 'www.newa.com') && !(%{HTTP_HOST} == 'localhost')">
  14. Require all denied
  15. ElseIf>
  16. VirtualHost>

七、伪静态

思考:为什么新闻页面的链接都怪兮兮的,我们项目的URL可不是这样!

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

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

 
   
  1. 第一步:编辑httpd.confrewrite模块的注释去掉(去掉'#')
  2. #LoadModule rewrite_module modules/mod_rewrite.so
  3. 第二步:修改AllowOverride All
  4. <Directory "/data/www">
  5. Options Indexes FollowSymLinks
  6. AllowOverride All
  7. Require all granted
  8. Directory>
  9. 第三步:添加规则文件.htaccess到访问目录中
  10. [root@localhost ~]# vim /data/a/.htaccess
  11. RewriteEngine on
  12. RewriteRule news_(\d+).html index.php?id=$1
  13. 实现效果:输入news_(数值).html时,跳转到index.php文件,同时把数值当成变量传入index.php

八、开启目录浏览功能

 
   
  1. 编辑httpd.confautoindex子文件的注释去掉(去掉'#')
  2. #Include etc//extra/httpd-autoindex.conf
  3. 默认的目录浏览功能比较简单,开启后会为文件添加图标也可以修饰文件类型。

九、配置浏览器静态缓存

配置静态缓存可以减少浏览器下载同一资源的次数,同时也可以减轻服务器的压力和节省带宽; 
比如说浏览器请求一个indx.html,该html里面包含一张a.png图片;没有配置静态缓存则每次请求都要重新加载下a.png图片;而配置了静态缓存则在有效期内不会再请求该图片。

 
   
  1. # 首先要开启mod_expires模块(取消前面的注释'#')
  2. [root@localhost ~]# vim /usr/local/apache2/conf/httpd.conf
  3. # LoadModule expires_module modules/mod_expires.so
  4. # 开始配置静态缓存
  5. [root@localhost ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
  6. <IfModule mod_expires.c>
  7. ExpiresActive on
  8. ExpiresByType image/gif "access plus 1 days"
  9. ExpiresByType image/jpeg "access plus 24 hours"
  10. ExpiresByType image/png "access plus 24 hours"
  11. ExpiresByType text/css "now plus 2 hour"
  12. ExpiresByType application/x-javascript "now plus 2 hours"
  13. ExpiresByType application/x-shockwave-flash "now plus 2 hours"
  14. ExpiresDefault "now plus 0 min"
  15. IfModule>
  16. # 打开浏览器,查看结果是否正确(304表示缓存了),缓存时间是否与配置的一致

十、防盗链

思考:如果别人的网站需要图片等静态资源,那我网站资源地址显示,我站点的压力会增大么?github与春运事件

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

 
   
  1. # 开始配置
  2. [root@localhost ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
  3. 在网站目录<Directory "/www/a">Directory>中添加
  4. SetEnvIfNoCase Referer "^http://www.a.com" local_ref
  5. SetEnvIfNoCase Referer "^http://a.com" local_ref
  6. <filesmatch "\.(mp3|mp4|zip|rar|jpg|gif|png)">
  7. Require all denied
  8. Require env local_ref
  9. filesmatch>

最后 HTTP/1.1 状态码

 
   
  1. --来自HTTP/1.1RFC文档
  2. -1xx 报告的 - 接收到请求,继续进程.
  3. -2xx 成功 - 步骤成功接收,被理解,并被接受
  4. -3xx 重发 - 为了完成请求,必须采取进一步措施.
  5. -4xx 客户端出错 - 请求包括错的顺序或不能完成.
  6. -5xx 服务器出错 - 服务器无法完成显然有效的请求.

这里只介绍了简单实用的几种配置功能,需要扩展请查阅官网资料

http://httpd.apache.org/docs/2.4/

你可能感兴趣的:(Linux)