首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Apache常用配置指北

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

相信前端的小伙伴对于 apachenginx 都有所了解,特别是前后端分离,独立开发部署后,使用web服务器做一些代理服务可以解决绝大多数因为前后端分离造成的跨域,认证等问题(PS:都2020年了,不会还有项目组主张使用weblogic或tomcat部署前端项目吧? 不会吧,不会吧,不会吧 😓)

下面,我从实际项目角度出发,说一些apache常用配置,相信做到以下配置之后,基本可以解决前端项目部署对接时80%以上的问题 (😃 我骗你的,我怎么知道能解决多少,反正先说一个数嘛)

<Directory> 指令

示例:


<Directory "/apache/web/">
   Options MultiViews
   AllowOverride All
   Order allow,deny
   Allow from all
</Directory>

Directory指令用于在配置的目录(示例内'/apache/web'目录)内封装一组指令,配置的指令在该目录及子目录生效。任何可以在"directory"作用域中使用的指令都可以使用

  • 配置目录(示例内 /apache/web/ )目录,配置目录的写法很多,可以指定一个完整的目录,如 /apache/web/ ,也可以使用通配符进行匹配,例如,使用 ?匹配任何单个字符,使用 * 匹配任意多个字符,也可以使用 []匹配字符区间。

唯一需要注意的是: 使用通配符进行匹配时,都不能匹配 / 字符,例如:配置 /apache/*/public 时, 不能匹配到 /apache/web/www/public,即 * 不能匹配到 web/www, 只能匹配到 apache/web/public类型的路径。

  • Options 配置。 Options选项用于定义配置目录使用那些特性,特性列表为:
  • AllowOverride选项用于定义位于每个目录下.htaccess(访问控制)文件中的指令类型。

从安全性考虑,根目录的AllowOverride属性一般都配置成不允许任何Override, 即设置 AllowOverride None ,此时,配置目录及子目录的.htaccess 文件将被完全忽略。

当此指令设置为 All 时,所有具有 “.htaccess” 作用域的指令都允许出现在 .htaccess 文件中

  • Order指令 用于指定执行允许(allow)访问控制规则或者拒绝(deny)访问控制规则的顺序。

1. Order allow,deny:缺省禁止所有客户机的访问,且 Allow 语句在 Deny 语句之前被匹配。如果某条件既匹配 Deny 语句又匹配 Allow 语句,则 Deny 语句会起作用(因为 Deny 语句覆盖了 Allow 语句)。

2. Order deny,allow:缺省允许所有客户机的访问,且 Deny 语句在 Allow 语句之前被匹配。如果某条件既匹配 Deny 语句又匹配 Allow 语句,则 Allow 语句会起作用(因为 Allow 语句覆盖了 Deny 语句)。

  • Allow指令 指明允许访问的地址或地址序列。如allow from al 指令表明允许所有IP来的访问请求。
  • Deny指令 指明禁止访问的地址或地址序列。如 Deny from 197.35.*.* 指令表明禁止IP段为197.35的主机访问。

Alias配置

示例:

Alias /public /extra/video/public

apache的Alias配置即虚拟路径配置,如示例中,假设apache服务器启动地址为 http://localhost:3000 ,当访问 http://localhost:3000/public/test.mp4 时, 会返回服务器 /extra/video/public/test.mp4 视频文件。

Rewrite

示例:


  RewriteEngine on
  RewriteCond %{HTTP_HOST} ^en.cmbc.com [NC]
  RewriteRule ^(.*) http://www.cmbc.com.cn/ [L]

示例效果为将输入 en.cmbc.com 时,跳转到 http://www.cmbc.com.cn/

Apache Rewrite规则修正符


  R 强制外部重定向
  F 禁用URL,返回403HTTP状态码。
  G 强制URL为GONE,返回410HTTP状态码。
  P 强制使用代理转发。
  L 表明当前规则是最后一条规则,停止分析以后规则的重写。
  N 重新从第一条规则开始运行重写过程。
  C 与下一条规则关联

Rewirte即apache的重写规则,主要的功能就是实现URL的跳转,匹配规则支持正则匹配。

  • RewriteEngine 为重写开关,默认关闭重写功能
  • RewriteCond 为重写条件,可多个顺序配置,符合配置规则后将执行紧邻的 RewriteRule 语句
  • RewriteRule 为重写规则,符合 RewriteCond 条件后将执行配置的重写规则

ProxyPass和ProxyPassReverse

示例:


  ProxyPass /swaggerui http://197.0.35.4:7000
  ProxyPassReverse /swaggerui http://197.0.35.4:7000

apache中的mod_proxy模块用于url的转发,即具有代理的功能。

ProxyPass即转发功能,如示例中的配置,为将 http://localhost:3000/swaggerui 的请求转发至 http://197.0.35.4:7000/swaggerui服务器.

ProxyPassReverse 的配置和 ProxyPass 的配置一致,它用于反向代理,例如示例中请求http://localhost:3000/swaggerui后,转发给配置的目标服务器( http://197.0.35.4:7000swaggerui),返回的处理结果为重定向redirect至 http://197.0.35.4:7000/login.html 登录页,此时若未配置反向代理,浏览器会访问 http://197.0.35.4:7000/login.html ,而配置反向代理后,apache服务器会在重定向时,修改redirect地址为 http://localhost:3000/login.html

apache负载均衡

示例:


  <Proxy balancer://version_manager>
    BalancerMember http://197.0.35.104:31382/version-manager loadfactor=1 hcmethod=TCP hcinterval=30 hcpasses=1 hcfails=1
    BalancerMember http://197.0.35.105:31382/version-manager loadfactor=1 hcmethod=TCP hcinterval=30 hcpasses=1 hcfails=1
    ProxySet lbmethod=byrequests
  </Proxy>

负载均衡配置稍显复杂,后续会专门总结一下相关配置,以上示例配置所达到的效果为:请求 http://localhost:3000/version_manager 时,会均衡负载发至 http://197.0.35.105:31382/version-managerhttp://197.0.35.105:31382/version-manager 两台服务器。

  • loadfactor表示后台服务器负载到由Apache发送请求的权值,该值默认为1,可以将该值设置为1到100之间的任何值。 简明说法就是如果有2次请求,有1次发送到 http://197.0.35.105:31382/version-manager ,有一次发给 http://197.0.35.105:31382/version-manager
  • hcmethod,hcinterval,hcpasses,hcfails为健康检查策略。
  • lbmethod 为负载均衡策略,可能的取值有: lbmethod=byrequests 按照请求次数均衡(默认) lbmethod=bytraffic 按照流量均衡 lbmethod=bybusyness 按照繁忙程度均衡(总是分配给活跃请求数最少的服务器)

apache调优

示例:


<IfModule mod_deflate.c>
  DeflateCompressionLevel 6
  SetOutputFilter DEFLATE
  AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript text/x-js application/x-javascript application/javascript application/json
  AddOutputFilterByType DEFLATE text/*
  AddOutputFilterByType DEFLATE image/*
  AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript application/javascript application/x-javascript
  SetEnvIfNoCase Request_URI .(?:apk|ipa|go)$ no-gzip dont-vary
</IfModule>

启用Apache的deflate模块,可以开启压缩功能,减小网站传输时的带宽。

  • SetOutputFilter DEFLATE 配置项,告诉apache对传输到浏览器的内容进行压缩
  • DeflateCompressionLevel 压缩等级(1-9),等级越大效率越高,但同时消耗的CPU也高,根据具体情况调优,也可以设置为6来平衡CPU及压缩质量
  • SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary #设置不对后缀gif,jpg,jpeg,png的图片文件进行压缩
  • AddOutputFilterByType DEFLATE text/* #设置对文件是文本的内容进行压缩,例如text/html text/css text/plain等
  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/580071e9e23c36d0ab4ed9cd7
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券