配置Apache

部署Apache2.4的Web服务器 文章记录了作者在Vmware的虚拟机CentOS 7上部署Apache Web服务器的过程,以及常遇到的一些问题及相应的解决方案。 阅读详情

1.安装完成Apache后如何配置呢,如下图步骤


2.Apache安装成功

Apache的配置主要集中在httpd.conf文件,它位于你的安装目录,比如:我安装在


3.用编辑器打开httpd.conf文件,

先来查找到如下这一行:

#ServerName

我们可以得到如下这一行内容:

#ServerAdmin www.admin:80

这就是我们的主机名了,我们可以将前面的“#”去掉,并将其改为:

ServerName 127.0.0.1:80


4.改完后存盘,在重启你的Apache2.2前我们先测试一下我们的Apache的配置文件是否改得对:


5.如果在你点了Test Configuration后,黑屏一闪而过,说明你的改动无误,

不然这个黑屏会一直停留在当前状态,并且告诉你,你的配置改动有错,错在哪里。

重新启动你的Apache


6.找到如下这行:

DocumentRoot

你会发下有这样的一行内容:

DocumentRoot "D:/Apache2.2/htdocs"


7.这个叫作DocumentRoot即webroot,即:发布目录,发布在这个目录下的任何工程都会在Apache服务开启时被装载成标准的web工程,我们现在动手来把这个WebRoot定位到我们自己的发布目录中去吧。

DocumentRoot "D:/www"


8.我们把它改到了d盘的www目录中去了,然后我们在该目录中放入一个index.html文件,内容为:

<html><body><h1>我更改到D盘www目录啦</h1></body></html>


9.重启我们的Apache服务,来测试一下:

我们得到了什么?禁止访问,为什么?

Forbidden

You don't have permission to access / on this server.



10.找到下面这一段:

<Directory />

    Options FollowSymLinks

    AllowOverride None

    Order deny,allow

    deny from all

</Directory>

把这个”deny from all”改成”allow fromall’吧。

<Directory />

    Options FollowSymLinks

    AllowOverride None

    Order deny,allow

    allow from all

</Directory>


11.修改完后重启你的Apache服务,

我们的Apache的发布目录已经成功更改到了d:\www目录下了


1、apache开机自启动

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

2、配置多个虚拟主机:基于域名、IP、PORT

很多时候你想在一台机器上跑多个网站,比如一个跑discuz、一个跑wordpress、一个跑其他网站...
这时候你就要需要开启apache的虚拟主机配置了。

前面几篇实际上有介绍过这个了,这里还是重新讲下吧:
第一步:编辑httpd.conf将vhost的注释去掉(去掉'#')
# Include conf/extra/httpd-vhosts.conf
第二步:开始配置虚拟主机
[root@csr ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
# 基于域名的
<VirtualHost *:80>
    DocumentRoot "/data/www" # 指定你的web根目录
    ServerName www.csr.com # 配置多个的时候改这里即可
</VirtualHost>
# 基于IP的
<VirtualHost 192.168.137.22:80>
    DocumentRoot "/data/www1"
    ServerName www.csr.com
</VirtualHost>
# 基于PORT的,只是这个还必须编辑httpd.conf加入:Listen 8080
<VirtualHost *:8080>
    DocumentRoot "/data/www2"
    ServerName www.csr.com
</VirtualHost>

对于http,默认端口是80,如果是基于端口的,用户每次请求还需要输入port,而且很多用户甚至不懂的怎么做,所以这种方法不常用; 
基于ip的,现如今ip地址紧缺,使用基于ip也并不是什么好方法; 
所以最常用的就是这个基于域名的虚拟主机了(申请一个域名相对与ip来说一般还是便宜很多的)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

3、配置域名跳转

因为各种原因,你换了个域名;但你的老顾客并不知道或者并不想记你的新域名,这时候就可以通过域名跳转将其跳转到你的新域名了。

[root@csr ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
    DocumentRoot "/data/www"
    ServerName www.csrnew.com # 新域名
    ServerAlias www.csr.com # 别名(老域名)

    # 方法一:开启rewrite,但会降低效率
    # mod_rewrite应该是最后手段,除非没有其他方法,否则不要轻易使用它(这句来自Apache2.4官方文档翻译的)
    # 首先还得开启rewrite_module模块
    [root@csr ~]# vim /usr/local/apache2/conf/httpd.conf 去掉注释
    #LoadModule rewrite_module modules/mod_rewrite.so
    [root@csr ~]# apachectl graceful
    # 检查是否已经加载
    [root@csr ~]# apachectl -M |grep -i 'rewrite'
     rewrite_module (shared)
    # 然后编辑vhost开始使用mod_rewrite模块
#   <IfModule mod_rewrite.c> 
#       RewriteEngine on # 开启rewrite引擎
#       RewriteCond %{HTTP_HOST} ^www.csr.com$ [OR]   
#       RewriteCond %{HTTP_HOST} ^csr.com$ [OR]     
#       RewriteCond %{HTTP_HOST} ^csrnew.com$     
#       RewriteRule ^/(.*)$ http://www.csrnew.com/$1 [R=301,L] 
#   </IfModule>

    # 方法二:简单高效,不需要开启rewrite模块
    <If "(%{HTTP_HOST} == 'www.csr.com') || (%{HTTP_HOST} == 'csr.com') || (%{HTTP_HOST} == 'csrnew.com')">
        Redirect permanent / http://www.csrnew.com/ # 301重定向
    </If>
    # 后面继续判断,比如其他人用www.nocsr.com域名绑定你的IP,加上这个他就访问不到了(403 Forbidden)
    # 自己测试的时候改hosts绑定IP即可,看看是不是403 Forbidden
    <ElseIf "!(%{HTTP_HOST} == 'www.csrnew.com') && !(%{HTTP_HOST} == 'localhost')">
        Require all denied
    </ElseIf>
</VirtualHost>

# 使用curl测试,也可以在windows上打开浏览器->打开审查元素(按F12也可以打开)->Network查看,如图1

# curl -I 只请求http首部(使用HEAD方法) -x 使用HTTP代理proxy,结果见图2
[root@csr ~]# curl -x127.0.0.1:80 www.test.com/static/image/common/logo.png -I
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

csr

csr

4、屏蔽恶意USER_AGENG

有时候可能会有一些恶意的USER_AGENG会一直爬你的网站,这时你需要屏蔽他们。
(或者你不想让某些蜘蛛爬你的网站,同样可以使用USER_AGENG屏蔽他们)

[root@csr ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
# 方法一:使用mod_rewrite模块,并不推荐这个方法,除非你真的不懂其他方法了
#   不加[OR]默认是表示AND,只允许匹配Firefox、Too Bot/1.0的访问,其他的一律拒绝,i忽略大小写,可以用m##代替//
#   <IfModule mod_rewrite.c>
#        RewriteEngine on
#        RewriteCond expr "!(%{HTTP_USER_AGENT} =~ /Firefox/i)"  [NC]
#        RewriteCond expr "!(%{HTTP_USER_AGENT} =~ m#Too Bot/1.0#i)"  [NC]
#        RewriteRule  .*  -  [F]
#    </IfModule>

# 方法二:只允许匹配chrome,google的user_agent访问,其他的一律拒绝
#   <If "!(%{HTTP_USER_AGENT} =~ /google/i) && !(%{HTTP_USER_AGENT} =~ /chrome/i)">
#       Require all denied
#   </If>

# 开始测试,结果见下图
[root@csr ~]# apachectl -t 
Syntax OK 
[root@csr~]# apachectl graceful
[root@csr ~]# curl -x127.0.0.1:80 -A "baidu/1.0" www.test.com -I
[root@csr ~]# curl -x127.0.0.1:80 -A "chrome/1.0" www.test.com -I
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

csr

5、配置用户认证

对于一些重要内容,需要加一些安全措施,用户认证就可以在一定程度上保证它的安全。

[root@csr ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
# FilesMatch后面的文件是相对路径,而Files、Directory则使用绝对路径
# (比如这里Directory则为:"/data/www/admin.php")
<FilesMatch "admin.php">
    AllowOverride AuthConfig
    AuthName "csr: test Authentication."
    AuthType Basic
    AuthUserFile /data/.htpasswd # 基于用户的
    # AuthGroupFile /data/.htgpasswd    # 基于组的
    # Require user csr      # 只允许csr用户认证
    Require valid-user  允许有效用户认证
    # Require group group-csr   允许group-csr组认证
</FilesMatch>

[root@csr ~]# apachectl -t 
Syntax OK 
[root@csr~]# apachectl graceful

# /usr/local/apache2/bin/htpasswd:用于创建用户认证的账户和密码
# htpasswd第一次创建用户要用到-c 参数 第2次就不能加-c了,否则会覆盖前面已建立好的用户
[root@csr ~]# /usr/local/apache2/bin/htpasswd -c /data/.htpasswd  test
# 提示输入密码然后完成

# 结果如图:
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

csr

6、访问控制

访问控制,很基础但非常重要,很多安全设置都是靠他实现的:
比如某些企业只允许本局域网内的主机对某一特定目录的某类文件进行访问,外来的则全部禁止:
<Directory /path/>
    <FilesMatch ".+\.(txt|doc)$">
        Require all denied
        Require ip 192.168.0.0/16
    </FilesMatch>
</Directory>

Apache2.4以下版本的访问控制方法有点奇特,规则是这样的:
-- 首先看Order后面是那个再前面
-- 如果deny(allow)在前,那么看deny(allow) from,按顺序看完再看allow(deny)的

例一、禁止5.5.5.5和6.6.6.6的:
Order allow deny 也可以这样: Order allow deny
Deny from 5.5.5.5           Allow from all
Deny from 6.6.6.6           Deny from 6.6.6.6
Allow from all              Deny from 5.5.5.5

例二、只允许5.5.5.5和6.6.6.6的:
Order deny allow 也可以这样: Order deny allow
Allow from 5.5.5.5          Deny from all
Allow from 6.6.6.6          Allow from 6.6.6.6
Deny from all               Allow from 5.5.5.5

Apache2.4开始,取消这种奇怪的规则,改成更通俗易懂的:
#   Require all denied   全部禁止
#   Require all granted  全部允许 
#   Require host www.csr.com  
#   Require ip 192.168.1 192.168.2 
#   Require ip 192.168.1/24 
...
其他的等用到了再介绍吧
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

7、配置防盗链

有时候,你的网站莫名其妙的访问量变大,不要高兴的太早,有可能是被别人盗链了...
举个例子:比如我搭的这个discuz论坛,有人发了一个贴,里面全是些xxx图片视频;
然后将他网站上访问图片的地址重定向到我的discuz上,这样他的服务器就可以空闲出来了;
也就是说别人访问他网站的图片视频,消耗的确是你服务器的资源;
网络上访问xxx图片视频的人很多,这样就很有可能导致你的discuz负载超核挂了;

解决这个问题的方法是配置下防盗链,让外来的盗不了链;
(不过最本质的方法还是自己定期删除些违法的内容,没有这些违法内容别人也不会去盗链)

# 对视频图片压缩包等比较耗资源的做下防盗链
SetEnvIfNoCase Referer "^http://www.csr.com" local_ref
SetEnvIfNoCase Referer "^http://csr.com" local_ref
<filesmatch "\.(mp3|mp4|zip|rar|jpg|gif|png)"> 
    # 2.4版本以下的
    方法一:
    Order Deny,Allow 
    Allow from env=local_ref 
    Deny from all
    方法二:
    Order Allow,Deny 
    Allow from env=local_ref

    2.4版本以上,方法如下:
    Require all denied
    Require env local_ref
</filesmatch> 

# graceful下apache然后结果如下图:
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

csr

8、配置静态文件缓存

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

# 首先要开启mod_expires模块(取消前面的注释'#')
[root@csr ~]# vim /usr/local/apache2/conf/httpd.conf
LoadModule expires_module modules/mod_expires.so
[root@csr ~]# apachectl -t 
Syntax OK 
# 检查模块是否正确开启
[root@csr ~]# apachectl graceful
[root@csr ~]# apachectl -M |grep expires_module
 expires_module (shared)

# 开始配置静态缓存
[root@csr ~]# 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表示缓存了),缓存时间是否与配置的一致
# 这里不能使用curl测试了,因为curl命令并不支持缓存功能,所以看不到304的
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

csr

csr

9、配置伪静态

对于某些更新频繁的网站来说,使用静态则不利与更新,而使用动态又不利于网络蜘蛛爬你的网站,于是,就产生了伪静态技术。

伪静态只是使用rewrite模块改变了URL,实际上还是动态页面;
例如:你请求www.csr.com/a.html,服务器提取出uri,然后使用rewrite模块重写为a.php,再调用a.php将结果返回浏览器。
从这里的分析可以看出,伪静态实际上比动态还要耗资源,因为对每个请求,都必须使用rewrite重写URL。

# 这里不能再使用前面的方法了,因为expr中只有匹配没有替换,所以,重写URL的话就只能使用rewrite模块了
# 既然要使用rewrite模块,那么就要先开启才行:
[root@csr ~]# vim /usr/local/apache2/conf/httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so
[root@csr ~]# apachectl -t 
Syntax OK 
[root@csr ~]# apachectl graceful
[root@csr ~]# apachectl -M |grep rewrite_module
 rewrite_module (shared)

 # discuz伪静态配置
 # 自己一个个重写有点麻烦,这里就直接使用aminglinux里的discuz伪静态配置了
 # 规则很简单,提取整个查询字符串,然后将...\.html的重写成后面的形式
[root@csr ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^/topic-(.+)\.html$ /portal.php?mod=topic&topic=$1&%1
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^/article-([0-9]+)-([0-9]+)\.html$ /portal.php?mod=view&aid=$1&page=$2&%1
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^/forum-(\w+)-([0-9]+)\.html$ /forum.php?mod=forumdisplay&fid=$1&page=$2&%1
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /forum.php?mod=viewthread&tid=$1&extra=page\%3D$3&page=$2&%1
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^/group-([0-9]+)-([0-9]+)\.html$ /forum.php?mod=group&fid=$1&page=$2&%1
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^/space-(username|uid)-(.+)\.html$ /home.php?mod=space&$1=$2&%1
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^/blog-([0-9]+)-([0-9]+)\.html$ /home.php?mod=space&uid=$1&do=blog&id=$2&%1
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^/archiver/(fid|tid)-([0-9]+)\.html$ /archiver/index.php?action=$1&value=$2&%1
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^/([a-z]+[a-z0-9_]*)-([a-z0-9_\-]+)\.html$ /plugin.php?id=$1:$2&%1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

10、自定义访问日志+错误日志格式

很多时候,apache默认的日志格式并不满足我们的需求,这时我们就需要自定义日志的格式了。

例如:%h 记录访问者的IP,如果在web的前端有一层代理,那么%h其实是代理机器的IP;
而%{X-FORWARDED-FOR}i 字段则会记录客户端真实的IP。

1、自定义访问日志(范围:全局、vhost都可以)
# 在<IfModule log_config_module>模块里加入:(如下图)
 [root@csr ~]# vim /usr/local/apache2/conf/httpd.conf
 LogFormat "%h %{X-FORWARDED-FOR}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" csr

2、自定义错误日志(范围:全局、vhost都可以)
# 在<IfModule log_config_module>模块里加入:(如下图)
[root@csr ~]# vim /usr/local/apache2/conf/httpd.conf
ErrorLogFormat "[%t] [%l] [pid %P] %F: %E: [client %a] %M"

根据个人的喜好可以配置成不同的格式,每个参数具体意义详见Apache2.4官方文档,这里再介绍内容就太多了。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

csr

11、排除无意义的日志

对于一般的请求图片、css等日志,是根本不需要记录的,反而还会增加日志的大小。
对于大访问量的图片网站,则更需要排除没意义的日志记录。

# 使用上面的自定义日志格式,同时不记录后缀为gif、jpg等日志
[root@csr ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
    SetEnvIf Request_URI ".*\.gif$" image-request
    SetEnvIf Request_URI ".*\.jpg$" image-request
    SetEnvIf Request_URI ".*\.png$" image-request
    SetEnvIf Request_URI ".*\.bmp$" image-request
    SetEnvIf Request_URI ".*\.swf$" image-request
    SetEnvIf Request_URI ".*\.js$" image-request
    SetEnvIf Request_URI ".*\.css$" image-request
    SetEnvIf Request_URI ".*\.ico$" image-request
    CustomLog "/tmp/1.log" csr env=!image-request
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

12、日志切割

随着时间的增加,服务器产生的日志文件会越来越大,如果不对日志进行分割;
那么删除日志只能整个删除,这样会丢失很多宝贵的信息。
而且分割日志对以后查看日志也更加方便了,删除的时候也可以选择保留最近一段时间的日志。

# 日志分割,需要用到apache自带的rotatelogs工具
/usr/local/apache2/bin/rotatelogs 
rotatelogs --help   查看帮助信息可以让我们了解怎么分割日志

# 以天为单位进行分割,-l指定使用本地时间,86400单位为秒=1天
# 配置时结合上面的“不记录没意义日志”,重复了这里就不加上了
[root@csr bin]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
CustomLog "|/usr/local/apache2/bin/rotatelogs -l /tmp/access_%Y%m%d.log 86400" csr env=!image-request
ErrorLog "|/usr/local/apache2/bin/rotatelogs -l /tmp/discuz_error_%Y%m%d.log 86400"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

13、错误日志级别-差异记录

有时候网站有问题了,查看错误日志却没有发现上面异常,很可能是你定义的日志级别太高导致没有记录到;
这时就可以将级别(LogLevel)调成debug然后进行调试。

# LogLevel:作用范围:全局、vhost、Directory
# 也就是说可以细到对每个目录进行差异记录,这很有用!
# 比如你可以在总的httpd.conf里设置为error,然后在某些很重要的目录设置级别为debug;
# 这样记录日志的时候就可以记录更多重要目录的信息而不会把其他目录也记录下来了。

# 例如全局设置为error,而passwd目录(里面存着很多人的银行卡密码)设置为debug
[root@csr bin]# vim /usr/local/apache2/conf/httpd.conf
...
LogLevel error
...
<Directory "/data/zhifubao/passwd/">
  LogLevel debug
</Directory>

# 下面列出LogLevel的所有级别(来自Apache2.4官方文档)
Level   Description     Example
emerg   Emergencies - system is unusable.   "Child cannot open lock file. Exiting"
alert   Action must be taken immediately.   "getpwuid: couldn't determine user name from uid"
crit    Critical Conditions.    "socket: Failed to get a socket, exiting child"
error   Error conditions.   "Premature end of script headers"
warn    Warning conditions. "child process 1234 did not exit, sending another SIGHUP"
notice  Normal but significant condition.   "httpd: caught SIGBUS, attempting to dump core in ..."
info    Informational.  "Server seems busy, (you may need to increase StartServers, or Min/MaxSpareServers)..."
debug   Debug-level messages    "Opening config file ..."
trace1  Trace messages  "proxy: FTP: control connection complete"
trace2  Trace messages  "proxy: CONNECT: sending the CONNECT request to the remote proxy"
trace3  Trace messages  "openssl: Handshake: start"
trace4  Trace messages  "read from buffered SSL brigade, mode 0, 17 bytes"
trace5  Trace messages  "map lookup FAILED: map=rewritemap key=keyname"
trace6  Trace messages  "cache lookup FAILED, forcing new map lookup"
trace7  Trace messages, dumping large amounts of data   "| 0000: 02 23 44 30 13 40 ac 34 df 3d bf 9a 19 49 39 15 |"
trace8  Trace messages, dumping large amounts of data   "| 0000: 02 23 44 30 13 40 ac 34 df 3d bf 9a 19 49 39 15 |"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

14、开启server-info、server-status

对于服务器的状态和配置信息,Apache也提供了一个方法:通过server-info、server-status查看;
通过查看这两个我们可以很方便的了解到Apache当前的详细状态与配置信息,很好用,不过必须加上访问控制,否则就可能让外来人看到你的配置信息了。
这也很简单,根据前面所讲的只允许本局域网内的主机查看,更细致点,只允许特定几台主机查看,这样就不用担心会泄露了。

# ...老是直接教怎么做却没有告诉你们方法学了可能也是白学,拿这个为例:
1、首先server-info、server-status的信息在httpd-info.conf里有介绍,查看该文件
[root@csr bin]# vim /usr/local/apache2/conf/extra/httpd-info.conf

2、里面有这样的三行:
# Required modules: mod_authz_core, mod_authz_host,
#                   mod_info (for the server-info handler),
#                   mod_status (for the server-status handler)
说明他们依赖这些模块,要开启则必须先加载这些模块...加载这些模块
(至于加载模块前面已经讲过多次了,取消LoadModule前面的注释然后grep检查是否正确加载即可)

3、接着往下看:with the URL of http://servername/server-status
这个介绍了配置好后怎么在浏览器里打开他们

4、继续:发现它已经给了大致模版了,编辑vhost文件将其加入,然后修改下访问控制,例如status:
<Location /server-status>
    SetHandler server-status
    Require all denied
    Require ip 127.0.0.1
    Require ip x.x.x.x
    ...
</Location>

5、graceful下Apache,然后浏览器测试,发现提示not found
仔细想想httpd-info.conf配置文件和虚拟主机配置一样在./conf/extra/下,
这下面的配置文件想要生效必须在httpd.conf里取消Include ...的注释;

6、于是,编辑httpd.conf,开启httpd-info.conf配置文件
# Real-time info on requests and configuration
# Include conf/extra/httpd-info.conf

7、再次测试,发现可以查看了(结果见下图)

8、从server-info、server-status可以看到很多有用的信息
比如status可以看到等待连接的请求有多少个、cpu的使用率、空闲(忙碌)的线程数等等
而info中可以很方便的看到某一模块在哪些行被配置使用,点击模块还会跳转到该模块下面...
具体的自己去试试吧
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

csr
csr

15、 HTTP/1.1 状态码

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

16、ErrorDocument+Alias

1、自定义404 not found 页面
# vim vhost.conf加入
ErrorDocument 404 "/csrtest/not_found.html"
# cat not_found.html
<html><title>404</title><body>...not found...</body></html>
这样以后只要是404 not found就会显示not_found.html的内容了

2、Alias URL路径 文件系统的绝对路径
# Alias指令使文档可以被存储在DocumentRoot以外的本地文件系统中

# 下面的是将URL/csr2映射到系统的/data/www/csrtest下
# 例如请求www.csr110.xyz/csr2/1.php,apache则会读取/data/www/csrtest/1.php的内容
#   Alias /csr2 /data/www/csrtest
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

大致Apache就先介绍到这里吧,Apache实际上还有非常多的功能,有兴趣的可以自己去看官方文档。



2.4版本apache安装 然后再启动,启动两次,出现run。Ctrl+F进行搜索。安装apr-util。报错,缺少expat。安装完成后设置防火墙。 阅读详情

相关推荐

Apache 配置 SSL 证书

本文将介绍购买 SSL 证书并在 Apache 2 配置的姿势。

百度一下 项目学社 816

Apache2.4配置(全)

--用户认证 --日志切割 --差异记录 --访问控制 --域名跳转 --配置静态文件缓存 --防盗链

u012291157的专栏 2万+

Apache配置多站点,Apache配置站点PHP

在Apache服务器上配置多个站点是常见的需求,特别是在共享主机环境或开发环境中。Apache提供了强大的虚拟主机功能,允许我们在同一台服务器上托管多个站点,并为每个站点配置独立的设置。本文将详细介绍如何在Apache上配置多个站点,并为这些站点启用PHP支持。需要注意的是,以上示例中的配置适用于基本的多站点和PHP支持。这样,你就成功配置了一个多站点的Apache服务器,并启用了PHP支持。你可以按照上述步骤为其他站点创建虚拟主机配置文件,并在其中配置相应的域名、目录和其他设置。上述配置中,我们设置了。

BUG?不存在的! 605

Apache2.4的安装、配置与常见的问题(Windows)

apache2.4安装、配置与常见的配置问题(windows版本)

m0_65040097的博客 2106

windows下apache2.4虚拟主机配置本机域名以及报403的处理方法

windows下apache2.4虚拟主机配置本机域名 1.首先,找到hosts文件,C:\Windows\System32\drivers\etc\hosts,打开hosts,IP指向一个域名: 如127.0.0.1 www.tp5.com 2.打开Apache配置文件 httpd.conf,位于Apache\conf目录下: 搜索‘LoadModule headers_module modules/mod_headers.so’去掉前面的#号; 搜索LoadModule vhost_alias_module modules/mod_vhost_alias.so 去掉前面的#号; 搜索Lo

Windows 11 系统部署 OpenClaw 完整指南:从零到一的 AI 助手搭建

OpenClaw(昵称“小龙虾”)是一款开源 AI 代理工具,定位为“AI 指挥官”,能够接收指令、调用工具并自动化处理任务。它支持对接国内外多款大模型,所有数据本地存储,兼顾实用性与安全性。本文将详细介绍在 Windows 11 系统上部署 OpenClaw 的完整流程。OpenClaw 在 Windows 11 上的部署虽然有一定技术门槛,但按照本文的步骤操作,大多数用户都能顺利完成安装。环境准备是基础:确保 Node.js ≥22 版本,使用管理员权限操作安装方式灵活选择。

weixin_41484939的博客 800

Apache配置+php配置

一、apache配置 首先下载apache安装包,下载地址:http://httpd.apache.org/download.cgi 我的是win7系统,所以下载windows的安装包,点击我圈出的地方 然后点击ApacheHaus 根据自己的电脑选择64位还是32的安装包,进行下载 然后解压文件,我解压到E:\Apache\Apache24然后打开文件夹找到conf文件夹...

yimiiya的博客 3万+

OpenEuler内核编译及替换

一、内核源码下载 在gitee上下载OpenEuler内核源码 下载地址 选择需要的内核版本源码压缩包进行下载 二、内核编译 1.解压缩 将下载好的源码进行解压 tar xvf openeuler-kernel-4.19.90-2107.1.0.tar.gz 2.清理源代码树 解压后得到一个名为kernel的内核源码文件夹,进入后执行命令 make mrproper 清理过去内核编译产生的config,第一次编译时可不执行此命令 3.生成内核配置文件.config 先将将系统原配置文件拷贝过来,原

m0_56602092的博客 2万+

Apache配置(Apache与PHP联系)

以wampserver为例: httpd-vhosts.conf和httpd.conf在D:\wamp64\bin\apache\apache2.4.23\conf中 里面内容若是改错了,在original中复原(复制粘贴到错的位置) 注意:配置文件中的行首#是指注释 监听端口 监听端口可以随意修改为任意一个未被其他程序监听的端口,可以通过设置配置文件httpd.conf中的Listen指令后面...

肖的博客 8000

泛微ecology9二次开发-附件上传-安全实践

本文深入探讨了泛微ecology9二次开发中附件上传功能的安全实践。针对原生接口的安全机制,文章提出了同源部署与服务端代理转发两大核心策略,并提供了基于Vue3和Element Plus的完整前端实现代码,重点解决了会话验证、权限控制及文件关联等关键安全问题,确保二次开发应用能安全、稳定地与ecology9系统集成。

qsc9012345的博客 531

STM32cube HAL库两条命令实现i2c通信---Nucleo L476RG用I2C实现tmp117模块温度读取并串口打印

Getting Started with STM32 - I2C Example

m0_54706625的博客 1831

linux apache配置,LINUX-APACHE服务的配置

APACHE服务的配置。APACHE的简介.APACHE是世界上最流行的Web服务器软件之一,当然,提供WWW服务的还有微软的IIS,它是由微软开发的,只能用在微软的操作系统上,而APACHE是一个自由软件。说到APACHE,还要联想到LAMP,这个近年来也是应用得非常广泛,LAMP就是:linux+apache+mysql+php。Apache的特点是简单、速度快、性能稳定。APACHE的安装。...

weixin_35346265的博客 262

淘宝x-mini-wua生成机制与硬件信息关联性深度解析

本文深度解析了淘宝x-mini-wua的生成机制与硬件信息的关联性,详细介绍了其作为设备指纹令牌的核心作用及技术实现细节。通过分析基础硬件层、环境特征层和行为特征层的数据采集,揭示了淘宝如何利用AES加密和分级加密策略防止破解,并探讨了其安全防护与对抗策略。

weixin_29243279的博客 228

Apache的配置详解,最好的Apache配置文档。

Apache的配置由httpd.conf文件配置,因此下面的配置指令都是在httpd.conf文件中修改。  主站点的配置(基本配置)  (1) 基本配置:  ServerRoot "/mnt/software/apache2" #你的apache软件安装的位置。其它指定的目录如果没有指定绝对路径,则目录是相对于该目录。  PidFile logs/httpd.pid #第一个ht

Robert's blog 1万+

微带功分器设计与ADS-EM联合仿真实战解析

本文详细解析了微带功分器设计与ADS-EM联合仿真的实战技巧,涵盖特性阻抗计算、ADS原理图设计、版图生成与EM仿真等关键步骤。通过实际案例分享,帮助工程师掌握射频电路设计中的核心技术和调试方法,提升功分器设计效率与性能。

weixin_29280219的博客 450

K230+canMV开发中常见的数据类型转换参考示例

【代码】K230+canMV开发中常见的数据类型转换参考示例。

weixin_47446386的博客 67

apache配置

根据著名的WWW服务器调查公司所作的调查,世界上百分之五十以上的WWW服务 器都在使用Apache,是世界排名第一的WEB服务器。Apache的诞生极富有戏剧性。 当NCSA WWW服务器项目停顿后,那些使用NCSA WWW服务器的人们开始交换他们 用于该服务器的补丁程序,他们也很快认识到成立管理这些补丁程序的论坛是 必要的。就这样,诞生了Apache Group,后来这个团体在NCSA的

漠北苍狼的专栏 3043

SAP 交货成本(运费)

交货成本: 业务场景: 有些产品或供应商,会产生交货成本(运费、关税等) 业务模拟(以运费为例): 1、运费在采购订单体现:计划运费 ME21N创建采购订单,并且包含运费: MIGO收货时: 由上可知,MIGO时运费最终体现在库存(存货)科目中(V),或者价格差异中(S计价时)。 MIRO发票校验: 运费最终体现在单独科目中: 后台配置: 运费在发票时候...

willieyuan的博客 1万+

Apache的配置优化

Apache的配置优化 【APACHE的工作方式】 prefork模式(默认) 这个多路处理模块(MPM)实现了一个非线程型的、预派生的web服务器,它的工作方式类似于Apache 1.3。它适合于没有线程安全库,需要避免线程兼容性问题的系统。它是要求将每个请求相互独立的情况下最好的MPM,这样若一个请求出现问题就不会影响到其他请求。 这个MPM具有很强的自我调节能力,只需要很少的配置指...

dbf3771的博客 146

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

配置php apache,php apache安装以及配置

初学php,配置起来老出问题,找了篇不错的帖子,一试就通过了,所以就顺带着转了过来。不过在我安装phpMyAdmin的时候还是发现这篇文章的一个问题,就是php.ini如果放在system32下,启动phpMyAdmin的时候会报“Cannot load mysql extension. Please check your PHP configuration.”这个错误,实际上应该放到WINDOW...

weixin_36204045的博客 496

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Apache+Tomcat配置

很简单,跟我做,几步搞定:假设:apache安装目录为APACHE_HOMEtomcat安装目录为TOMCAT_HOME (要设到环境变量中)jdk安装目录为JAVA_HOME(要设到环境变量中)1.安装apache:(假定安装目录为APACHE_HOME,根据你实际安装自行替换)废话不多说,安装后修改APACHE_HOME/CONF/httpd.conf 以下6个地方:1) Port 8080

itww007的专栏 796

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

配置apache的php环境,apache配置php环境的方法

apache配置php环境的方法发布时间:2020-06-16 16:08:33来源:亿速云阅读:151作者:小新今天小编给大家分享的是apache配置php环境的方法,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是...

weixin_29809927的博客 3052

apache常用配置

++如何设 置请求等待时间 在httpd.conf里面设置:   TimeOut n   其中n为整数,单位是秒。 ++如何接收一个get请求的总时间 接收一个post和put请求的TCP包之间的时间   TCP包传输中的响应(ack)时间间隔 ++如何使得

3653

apache配置说明

apache配置说明---------------------------------------------安装apache------------------------------------------------------------------------------目前几乎所有的linux发行版都捆绑了apache,但默认情况下apache不会安装在系统上。apache

宋轶聪的专栏 409

Apache系列:Apache的全局配置

配置文件组成: 整个配置文件由3段组成: (1)全局配置:对主服务器或虚拟机都有效,且有些功能是服务器自身工作属性; (2)主服务器:主站属性; (3)虚拟主机:虚拟主机及属性定义 注:第二段和第三段(即主机和虚拟主机)不能同时使用;   全局配置 一、配置监听的地址和端口 Listen [IP:]PORT //List...

weixin_34187862的博客 576

如何配置Apache和php,Apache和PHP环境的配置方法

Apache和PHP的配置此文档的配置说明主要是对web服务器是Apache时,不针对IIS的配置资源下载:php for windows下载列表。: http://windows.php.net/download/本文档针对php5.3.1:http://windows.php.net/downloads/releases/php-5.3.1-Win32-VC6-x86.zipApache fo...

weixin_35208812的博客 362
上一篇: 微信小程序开发教程
下一篇: Apache的URL地址重写(RewriteCond与RewriteRule)
function__
博客等级 码龄10年 99粉丝 39原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值