阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Apache的几种常用配置

227次阅读
没有评论

共计 5568 个字符,预计需要花费 14 分钟才能阅读完成。

Apache 是世界使用排名第一的 Web 服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的 Web 服务器端软件之一。

     下面介绍几个常用的 apache 命令:

/usr/local/apache2/bin/apachectl -M  查看常见的模块(包括动态和静态)

/usr/local/apache2/bin/apachectl -l    查看加载的静态模块

/usr/local/apache2/bin/apachectl -t    检查配置文件有无语法错误

/usr/local/apache2/bin/apachectl graceful  加载配置文件,但不重启

/usr/local/apache2/bin/apachectl start/restart/stop   启动 / 重启 / 停止 apache 服务

下列的配置在 apache2.2.31 版本实测。

一、用户认证

有些时候访问网站下的一些页面时,需要用户认证。

编辑虚拟主机的配置文件:

vim /usr/local/apache2/conf/extra/httpd-vhosts.conf

写入:

  <Directory /data/www/abc>     #/data/www/abc 为将要访问的页面的目录

     AllowOverride AuthConfig

     AuthName “cct”        

     AuthType Basic

     AuthUserFile /data/.htpasswd  #指定存放用户名和密码的文件

     require valid-user

  </Directory>

  保存退出,生成密码文件

  htpasswd -c /data/.htpasswd cct #指定用户名为 cct,输入自己设定的密码

 /usr/local/apache2/bin/apachectl graceful  加载配置

     二、默认虚拟主机

   有些时候,为了 web 服务安全性,我们需要设置默认的虚拟主机。

    编辑虚拟主机的配置文件:

  <VirtualHost *:80>

    DocumentRoot “/tmp/111”     #该目录可以不存在

    ServerName 111.com

  </VirtualHost>

  <VirtualHost *:80>

    DocumentRoot “/data/www”

    ServerName www.test.com

    ServerAlias www.aaa.com

   </VirtualHost>

将这段设定放在虚拟主机配置的最上面。除了已作过设置的域名(aaa、test)外,其余访问的域名均跳转到 /tmp/111 下。

  三、rewrite 规则

下列代码均写在 <IfModule mod_rewrite.c> 模块下

1. 域名 301 跳转

  web 服务可能会用到多个域名,域名有主有次,输入次域名会自动跳转到主域名进行访问。设定为 301 永久跳转,302 是暂时跳转。

编辑虚拟主机的配置文件:

写入:

   <IfModule mod_rewrite.c>

        RewriteEngine on      #打开 rewrite 功能

        RewriteCond %{HTTP_HOST} ^www.aaa.com$ [OR]

        RewriteCond %{HTTP_HOST} ^www.bbb.com$ 

        RewriteRule ^/(.*)$ http://www.test.com/$1 [R=301,L]  

   </IfModule>   

 调用了 rewrite 模块,RewriteCond 是跳转条件,RewriteRule 是跳转规则。 

2. 禁止指定 user_agent

  RewriteCond %{HTTP_USER_AGENT} ^.*curl.* [NC,OR]  #禁止 curl 和 chrome 浏览器访问

  RewriteCond %{HTTP_USER_AGENT} ^.*chrome.* [NC]  #NC 是不区分大小写的意思

  RewriteRule .* – [F]   #为禁止的意思

3. 通过 rewrite 限制某个目录

 RewriteCond %{REQUEST_URI} ^.*/tmp/.* [NC]  #禁止访问 tmp 目录

  RewriteRule .* – [F]

4.rewrite 规则

1) [R=301](force redirect) 强制外部重定向

2) [F]禁用 URL, 返回 403HTTP 状态码

3)[NC](no case) 不区分大小写

4)[OR] 或者

变量:

%{HTTP_USER_AGENT}      表示:访问的 user_agent

%{HTTP_HOST}    表示:当前访问的网址,只是指前缀部分,格式是 www.xxx.com 不包括“http://”和“/”

%{REQUEST_URI}     表示:表示访问的相对地址,就是相对根目录的地址,就是域名 / 后面的成分,格式上包括最前面的“/”,

www.123.com/xiang/1.html 黑字表示 HOST,绿色部分表示 URI

四、日志切割与管理

 web 服务器出现大量的访问日志和错误日志,所以我们要对日志进行切割,方便管理人员的查询。一些并不重要的记录,我们可以规定日志中不显示这些。

 首先我们先将虚拟主机配置文件里的日志记录打开,日志的 路径在/usr/local/apache2/logs 下

 ErrorLog “logs/test.com-error_log”  #错误日志

 CustomLog “logs/test.com-access_log” common    #common 是日志类型

 在 apache 的主配置文件里我们可以看到���志的相关格式规定

 LogFormat “%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”” combined

 LogFormat “%h %l %u %t \”%r\” %>s %b” common

 %h 是来源 ip

 %u 访问的 user

 %t 时间

 %r 动作

 有些时候一些用户使用代理服务器,这里的 %h 会显示代理 ip,在 %h 后面加上%{X-FORWARDED-FOR}i 即显示真实 ip。

1. 日志切割

修改虚拟主机的 access log 的定义:

  CustomLog “|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/test.com-access_%Y%m%d_log 86400” combined      #%Y%m%d 规定年月日;86400 秒即为一天切割。

2. 不记录指定文件类型的日志

   ErrorLog “logs/test.com-error_log”

 SetEnvIf Request_URI “.*\.gif$” image-request   #对 gif 文件做一个标记 image-request,也可以写成 abc  

 SetEnvIf Request_URI “.*\.jpg$” image-request     #setenvif 要和 customlog 写在一起

 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

 CustomLog “|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/test.com-access_%Y%m%d_log 86400” combined env=!image-request     #不记录做过标记的文件

注意:SetEnvIf 要和 customlog 写在一起,中间不要有分隔。

五、配置静态缓存

对于图片,html,css,Javascripts 等,让客户端缓存,让访问时不需要去服务器上访问,提高用户体验,需要提前确认是否支持 mod_expires.c 模块

<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 hours”

  ExpiresByType application/x-javascript      “now plus 2 hours”

  ExpiresByType application/x-shockwave-flash “now plus 2 hours”

  ExpiresDefault “now plus 0 min”

</IfModule>

 

六、配置防盗链

 

  防止其他的网站大量使用自己网站里的一些图片,流量跑的是自己的网站,造成带宽的浪费。防止图片被盗用。

在虚拟主机的配置文件里加上:

SetEnvIfNoCase Referer “^http://.*\.test\.com” local_ref  #给网址做标注

    <filesmatch “\.(txt|png|gif|doc|mp3|zip|rar|jpg|css|js)”>  #规定一下哪些类型的文件

    Order Allow,Deny                             #禁止引用 

    Allow from env=local_ref                      #允许 local_ref 引用

</filesmatch>

七、访问控制

 

我们可以针对某些目录进行访问控制,禁止一些 IP 地址的访问

<Directory “/data/www”>

    AllowOverride None

    Options None

    Order allow,deny

    Allow from all

    deny from 192.168.206.1    #该 IP 地址为禁止访问的 ip 地址 

</Directory>

还有一种以 URI 做限制访问

<filesmatch “(.*)admin(.*)”>

    Order allow,deny

    Allow from all

    Deny from 192.168.206.1

</filesmatch>

所有 uri 中包括 admin 的都进行 ip 访问限制

八、apache 禁止解析 php

多用在在网络安全方面,比如:某些目录上传文件,避免上传的有木马,针对某些路径禁止解析 php。

编辑虚拟主机的配置文件,加入:

<Directory /data/www/data>  #对 data 目录进行 php 解析限制。

php_admin_flag engine off  #将 php 解析引擎关闭

<filesmatch “(.*)php”>  #匹配

Order deny,allow

Deny from all   #禁止解析所有,若不加 filesmatch,只是将 engine off,在浏览器访问该文件时,会将 php 文件下载下来,这样不好

</filesmatch>

</Directory> 

Apache 的几种常用设置就整理到这,希望能够帮到运维的同仁们!

 

下面关于 LAMP 相关 的内容你可能也喜欢

 

LAMP 平台安装 Xcache 和 Memcached 加速网站运行  http://www.linuxidc.com/Linux/2015-06/118835.htm

 

CentOS 7 下搭建 LAMP 平台环境  http://www.linuxidc.com/Linux/2015-06/118818.htm

 

CentOS 6.5 系统安装配置 LAMP(Apache+PHP5+MySQL)服务器环境 http://www.linuxidc.com/Linux/2014-12/111030.htm

 

CentOS 7.2 yum 安装 LAMP 环境  http://www.linuxidc.com/Linux/2016-11/136766.htm

 

Ubuntu 14.04 配置 LAMP+phpMyAdmin PHP(5.5.9)开发环境  http://www.linuxidc.com/Linux/2014-10/107924.htm

 

Ubuntu 14.10 下安装 LAMP 服务图文详解  http://www.linuxidc.com/Linux/2014-12/110082.htm

 

LAMP 结合 NFS 构建小型博客站点  http://www.linuxidc.com/Linux/2015-08/121029.htm

 

CentOS7 下安装部署 LAMP 环境  http://www.linuxidc.com/Linux/2016-04/130653.htm

 

Ubuntu Server 14.04 LTS 下搭建 LAMP 环境图文详解  http://www.linuxidc.com/Linux/2016-12/138758.htm

 

Ubuntu Server 16.04 下配置 LAMP 环境 http://www.linuxidc.com/Linux/2016-12/138757.htm

 

Ubuntu 16.04 搭建 LAMP 开发环境 http://www.linuxidc.com/Linux/2016-10/136327.htm

 

 

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-01/140071.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计5568字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中