apache常用配置

apache配置非常多,我们来看下它的常用配置项 。
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 服务器出错 – 服务器无法完成显然有效的请求.

赞(1) 打赏
特别声明:除特殊标注,本站文章均为原创,遵循CC BY-NC 3.0,转载请注明出处。三伏磨 » apache常用配置

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏