设为首页 收藏本站
查看: 791|回复: 0

[经验分享] 如何在Apache中方便地切换http和https?

[复制链接]

尚未签到

发表于 2017-1-11 06:26:35 | 显示全部楼层 |阅读模式
在YMU系统中,我们使用Apache 2.x作为前端Web Server,用于静态内容的保存和获取,及动态内容向后端Web Server(Tomcat)的转发;同时Apache 2.x也承担Tomcat服务器之间的负载均衡器。
<o:p> </o:p>
从性能方面考虑,YMU系统的大部分页面采用http协议传输。而某些页面,如注册、登录和修改密码等安全性要求高的页面,则需要采用https协议进行传输。
<o:p> </o:p>
如何在http及https协议之间转换?最直接的办法是采用绝对路径,此方法优点是间接明了,缺点是移植性差。一个比较好的方法是使用Apache的rewrite模块对相对路径进行转换,从而达到协议转换的目的。
<o:p> </o:p>
我们可以在Apache的官方文档中找到http/https切换的相关说明:
RewriteEngine on<o:p></o:p>
RewriteRule ^/(.*):SSL$ https://%{SERVER_NAME}/$1 [R,L]<o:p></o:p>
RewriteRule ^/(.*):NOSSL$ http://%{SERVER_NAME}/$1 [R,L]<o:p></o:p>
<o:p> </o:p>
如果直接定义在httpd.conf,则会有以下问题:

  • <!---->  <!---->在页面中点击这些特殊的URL(login.html:SSL)时,浏览器会报协议错误,它把:SSL前面的内容(login.html)当作协议了;
  • <!---->  <!---->如果把“:”改成“_”或其他字符,则http可以转到https了,而https则不能转成http。什么原因呢?看了很多文档,才发现rewrite规则设置是针对虚拟主机的,而443端口被配置成另外的虚拟主机,所以就规则就失效了,还得在ssl配置文件(httpd-ssl.conf)中设置转发规则。
<o:p> </o:p>
下面举例说明配置过程。假设我们在相对路径url后增加_ssl表示以https协议装载url;而url后面增加_nossl则用于在https页面中跳转回http协议。配置步骤如下:
<o:p> </o:p>
<!---->1.       <!---->编译Apache时,生成rewrite模块(mod_rewrite.so);
<!---->2.       <!---->在httpd.conf中装载rewrite模块,并定义http->https的转换规则:
LoadModule rewrite_module modules/mod_rewrite.so<o:p></o:p>
<o:p> </o:p>
<ifmodule rewrite_module=""><o:p></o:p></ifmodule>
RewriteEngine On                                                          <o:p></o:p>
#RewriteLog "/usr/local/apache2/logs/rewrite.log"<o:p></o:p>
#RewriteLogLevel 10<o:p></o:p>
RewriteRule ^/(.*)_ssl$ https://%{SERVER_NAME}/$1 [R,L]<o:p></o:p>
<o:p></o:p>
RewriteRule ^/(.*)_nossl$ http://%{SERVER_NAME}/$1 [R,L]<o:p>
</o:p>

其中:

  • <!---->  <!---->RewriteEngine On:打开转换引擎;
  • <!---->  <!---->RewriteLog:定义日志文件,用于调试;
  • <!---->  <!---->RewriteLogLevl:设置日志级别,0表示不输出;数字越大,则输出信息越详细;
  • <!---->  <!---->RewriteRule:定义转换规则,其中:


  • <!---->  <!---->^/(.*)_ssl$:表示 以 / 开头,以_ssl结尾;
  • <!----><!---->https://%{SERVER_NAME}/$1:$1表示URL中 / 后 与 _ssl之前的部分内容;
  • <!---->  <!---->[R, L]:R表示重定向;L表示最后一条规则,即若符合条件,则不再匹配下面规则;
<!---->
3.       在ssl配置文件(conf/extra/httpd-ssl.conf)中定义https->http的转换规则:LoadModule rewrite_module modules/mod_rewrite.so<o:p></o:p>
<o:p> </o:p>
<virtualhost _default_:443=""><o:p></o:p></virtualhost>
……<o:p></o:p>
<ifmodule rewrite_module=""><o:p></o:p></ifmodule>
RewriteEngine On<o:p></o:p>
RewriteRule ^/(.*)_nossl$ http://%{SERVER_NAME}/$1 [R,L]<o:p></o:p>
<o:p></o:p>
<o:p></o:p>
<o:p>   </o:p>RewriteRule ^/(.*)_ssl$ https://%{SERVER_NAME}/$1 [R,L]
注:

  • <!---->  <!---->虽然ssl配置文件会被httpd.conf包括,LoadModule还是需要的;
  • <!----><!----><ifmodule>…</ifmodule>需要定义在VirtualHost内部。
<o:p> </o:p>
<!---->4.       <!---->再根据规则修改页面中的URL。
<o:p> </o:p>
哈哈,大功告成!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-326612-1-1.html 上篇帖子: Apache Rewrite实现URL的301跳转和域名跳转 下篇帖子: 5、用Apache的commons-modeler来辅助开发JMX
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表