Apache
作为世界使用排名第一的Web服务器软件,它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一
相信前端的小伙伴对于 apache
和 nginx
都有所了解,特别是前后端分离,独立开发部署后,使用web服务器做一些代理服务可以解决绝大多数因为前后端分离造成的跨域,认证等问题(PS:都2020年了,不会还有项目组主张使用weblogic或tomcat部署前端项目吧? 不会吧,不会吧,不会吧 😓)
下面,我从实际项目角度出发,说一些apache常用配置,相信做到以下配置之后,基本可以解决前端项目部署对接时80%以上的问题 (😃 我骗你的,我怎么知道能解决多少,反正先说一个数嘛)
示例:
<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
类型的路径。
从安全性考虑,根目录的AllowOverride属性一般都配置成不允许任何Override, 即设置 AllowOverride None
,此时,配置目录及子目录的.htaccess 文件将被完全忽略。
当此指令设置为 All 时,所有具有 “.htaccess” 作用域的指令都允许出现在 .htaccess 文件中
1. Order allow,deny:缺省禁止所有客户机的访问,且 Allow 语句在 Deny 语句之前被匹配。如果某条件既匹配 Deny 语句又匹配 Allow 语句,则 Deny 语句会起作用(因为 Deny 语句覆盖了 Allow 语句)。
2. Order deny,allow:缺省允许所有客户机的访问,且 Deny 语句在 Allow 语句之前被匹配。如果某条件既匹配 Deny 语句又匹配 Allow 语句,则 Allow 语句会起作用(因为 Allow 语句覆盖了 Deny 语句)。
allow from al
指令表明允许所有IP来的访问请求。Deny from 197.35.*.*
指令表明禁止IP段为197.35的主机访问。示例:
Alias /public /extra/video/public
apache的Alias配置即虚拟路径配置,如示例中,假设apache服务器启动地址为 http://localhost:3000 ,当访问 http://localhost:3000/public/test.mp4 时, 会返回服务器 /extra/video/public/test.mp4
视频文件。
示例:
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的跳转,匹配规则支持正则匹配。
RewriteRule
语句RewriteCond
条件后将执行配置的重写规则示例:
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 。
示例:
<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-manager
和 http://197.0.35.105:31382/version-manager
两台服务器。
http://197.0.35.105:31382/version-manager
,有一次发给 http://197.0.35.105:31382/version-manager
示例:
<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模块,可以开启压缩功能,减小网站传输时的带宽。
领取专属 10元无门槛券
私享最新 技术干货