`
java.guru
  • 浏览: 66770 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

如何在Apache中方便地切换http和https?

阅读更多

YMU系统中,我们使用Apache 2.x作为前端Web Server,用于静态内容的保存和获取,及动态内容向后端Web Server(Tomcat)的转发;同时Apache 2.x也承担Tomcat服务器之间的负载均衡器。

<o:p> </o:p>

从性能方面考虑,YMU系统的大部分页面采用http协议传输。而某些页面,如注册、登录和修改密码等安全性要求高的页面,则需要采用https协议进行传输。

<o:p> </o:p>

如何在httphttps协议之间转换?最直接的办法是采用绝对路径,此方法优点是间接明了,缺点是移植性差。一个比较好的方法是使用Apacherewrite模块对相对路径进行转换,从而达到协议转换的目的。

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

哈哈,大功告成!

分享到:
评论

相关推荐

    服务器绿色php集成环境,支持重启动apache服务,自由切换php版本

    【描述】中提到的“支持重启动apache服务”,意味着该集成环境提供了方便的Apache服务管理功能。在服务器环境中,有时需要重启Apache服务以应用新的配置或解决某些问题。通过这个特性,用户可以直接在集成环境中执行...

    ApacheHttp编程时用到的JAR包

    6. **commons-codec-1.4.jar**:Apache Commons Codec库包含了多种编码和解码算法,如Base64、Hex、Phonetic和URL编码,这些在HTTP通信中可能需要用到。 7. **mysql-connector-java-5.1.12-bin.jar**:虽然这个JAR...

    linux上如何让apache运行aspx网站

    为了方便切换不同版本的服务程序,可以创建符号链接: ```bash sudo ln -s /usr/bin/mod-mono-server1 /usr/bin/mod-mono-server sudo ln -s /usr/bin/mod-mono-server2 /usr/bin/mod-mono-server ``` 重启Apache...

    PhpStorm6 配置Apache

    本文将详细解析如何在PhpStorm 6中配置Apache Web服务器,以便开发者能够更高效地进行PHP项目的开发、调试和测试。通过以下步骤,我们将深入理解每个环节的关键知识点。 ### 一、打开设置 首先,启动PhpStorm 6,...

    apache上下文驱动包工具包

    7. **版本控制**:在多版本环境中,工具包可能支持不同版本的Apache服务器管理,方便在不同版本之间切换或回滚。 8. **脚本和自动化**:为了简化重复性任务,工具包可能包含自动化脚本或API,允许用户集成到更大的...

    Node.js-通过NodeJS运行服务器端JavaScript文件像通过Apache运行PHP一样方便

    标题提到“通过Node.js运行服务器端JavaScript文件像通过Apache运行PHP一样方便”,这揭示了Node.js在Web开发中的一个重要特性:轻量级、高效且易于部署。 Node.js的出现极大地简化了服务器端编程,特别是对于那些...

    apache-log4j-2.3-bin和commons-logging-1.2

    总结来说,Apache Log4j 2.3 和 Commons Logging 1.2 在Java Web开发中扮演着重要角色,它们帮助开发者方便地记录、管理和分析应用程序的日志,提升开发效率和问题排查能力。这两个库的结合使用,能够实现日志系统的...

    apache-flume1.8

    在实际应用中,Apache Flume 常常被用于日志收集,例如从服务器、应用程序或网络设备收集日志数据,然后将这些数据存储到 Hadoop 集群中,以便进行进一步的分析和挖掘。通过合理配置 Flume,可以构建出高效、可靠的...

    apache-flume-1.8.0

    在标签"flume apache"中,"flume"是指Apache Flume项目本身,"apache"则表明它是Apache软件基金会的一部分,这是一个开源项目,遵循Apache许可证并由社区维护和开发。 关于压缩包子文件的文件名称"apache-flume-...

    windows system apache2.4 服务器

    4. **启动服务**:在命令行中,切换到Apache24的bin目录,运行`httpd.exe -k install`来安装Apache为Windows服务,然后使用`httpd.exe -k start`启动服务。 5. **防火墙设置**:如果需要,记得在Windows防火墙中...

    Java版本选择切换工具

    通过Java版本切换工具,用户可以方便地管理不同Java版本的安装路径和环境配置,避免环境混乱的问题。 特点: 支持多厂商、多版本的JDK切换,包括Corretto、Dragonwell、IBM、Kona、OpenJdk、OracleJdk、RedHat等。...

    apache_ftp 开发包

    `slf4j-api-1.5.2.jar`和`slf4j-log4j12-1.5.2.jar`是Simple Logging Facade for Java (SLF4J)的API和Log4j绑定,SLF4J提供了一种统一的日志接口,允许开发者在不改变代码的情况下切换不同的日志实现。 在使用这个...

    Apache的个人主页设置方法

    Apache 个人主页设置方法可以为用户提供独立的网页空间,方便用户管理和维护自己的网页文件。同时,这种设置方法也可以提高 Apache 服务器的安全性,因为每个用户的个人主页都有独立的文件夹,避免了文件权限的问题...

    如鹏网版绿色免安装apache

    这种形式方便了用户的使用和移动,尤其在多台计算机之间切换时,可以避免版本冲突和系统污染。 3. **bin文件夹**:在Apache结构中,“bin”文件夹包含了所有可执行文件,包括httpd.exe(在Windows上),它是Apache...

    Apache+Trac配置

    本文将详细介绍如何在Windows XP操作系统上配置Apache服务器与Trac,以实现项目的版本控制和问题跟踪管理。 #### 二、系统需求及准备工作 - **操作系统**: Windows XP - **软件准备**: - Apache HTTP Server - ...

    apache ftp工具所需jar

    Apache FTP工具所需JAR文件是Java开发中用于与FTP服务器交互的重要组件,这些JAR库提供了方便的API,使得开发者可以轻松地实现FTP文件传输功能。以下是对这些JAR文件的详细说明: 1. `ant-jakarta-oro-1.6.1.jar`: ...

    php+mysql+apache安装包(包括常见错误分析)

    在IT领域,PHP、MySQL和Apache是Web开发中不可或缺的三大核心技术。PHP是一种服务器端的脚本语言,常用于创建动态网页;MySQL是流行的开源关系型数据库管理系统;Apache则是最常用的HTTP服务器软件,能处理HTTP协议...

    Apache Commons 常用jar包(包含代码和doc)更新至2011/12

    通过 Commons Logging,你可以轻松地在不同的环境中切换日志系统,提高代码的可移植性和可维护性。 这四个模块是 Apache Commons 中非常基础且常用的部分,广泛应用于各种 Java 应用程序开发中。它们不仅提高了开发...

    apache编译参数介绍

    ### Apache编译参数详解 #### 一、概述 在安装Apache服务器时,通过自定义编译参数能够根据实际需求配置出更加适合应用环境的服务。...希望本文介绍的各项参数能帮助大家更好地理解和利用Apache的强大功能。

    Apache Commons组件简介.ppt

    通过使用Apache Commons中的这些组件,开发者可以轻松地集成和利用经过验证和优化的代码,从而提高开发效率,确保代码质量,并降低维护成本。每个组件都具有独立的文档和示例,方便开发者快速理解和应用到实际项目中...

Global site tag (gtag.js) - Google Analytics