如何使用Apache2在Glassfish上配置HTTPS重定向

时间:2014-03-03 10:41:32

标签: spring apache .htaccess redirect glassfish

我的情景看起来如下: 1. 服务器 - 有很多域名 2. domain - 用Spring MVC编写的应用程序 3. apache2 - 在服务器上

在应用程序用户匿名时使用http,当他尝试登录应用程序时需要HTTPS。我是这样做的春天安全:

<http auto-config="true">  
    <intercept-url pattern="/user/add*" access="ROLE_ANONYMOUS" requires-channel="https"/>  
    <intercept-url pattern="/**" access="ROLE_USER, ROLE_ANONYMOUS"/> 
    <form-login login-page="/user/add" authentication-failure-url="/user/logFailed"></form-login>
    <port-mappings>
        <port-mapping http="8080" https="8181"/>
    </port-mappings>
</http> 

在本地计算机上工作正常,点击/用户/添加(登录页面)时重定向到https。 在服务器上我使用apache2上的代理传递我们:

<VirtualHost *:80>
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/

Http运行良好,我的域上的每个HTTP请求都被重定向,而Glassfish获取它。

问题在于Https。我的代理通行证:

<IfModule mod_ssl.c>
<VirtualHost *domain*:8181>
    ServerAdmin webmaster@localhost
    ServerName *server*
    ServerAlias www.*domain*
    DocumentRoot /var/www/*domain*/
    <Directory /var/www/*domain*/>
            Options -Indexes
    </Directory>

    ProxyPass / https://127.0.0.1:8181/
    ProxyPassReverse / https://127.0.0.1:8181/

我尝试了很多不同的配置,但我不知道问题出在哪里。请求被重定向到https但在地址127.0.0.1上,这当然是localhost。当我将ProxyPass更改为域名时,它的工作原理相同。

我必须重新配置?

也可以让Glassfish在443端口工作,而不是8181 ???

1 个答案:

答案 0 :(得分:0)

我猜你的本地配置不包含前面的apache而你让Glassfish处理SSL?这就是它在本地工作没有问题的原因。

Apache配置不是我强大的领域,但让我试一试:如果您现在尝试直接在服务器上访问端口8181,您甚至不需要使用代理传递配置,因为您的GF已在运行那里。这就是为什么你被重定向到127.0.0.1(因为配置毫无意义,它在相同的端口上进行代理传递)。您还可能在服务器hosts-file中遗失您的域。

您要做的只是在80上使用虚拟主机,并将代理传递到8080(在8181虚拟主机中定义ServerAdmin等),让Glassfish和Spring处理非匿名身份验证的重定向。 / p>

另一个选择是将SSL移动到Apache:443虚拟主机代理到8181并相应地修改Spring Security配置(端口映射https到443)。

关于直接运行GF的问题:443,你是在Windows上运行还是在UNIX上运行?在Windows上,通过管理控制面板修改https-listener,可以将Glassfish直接绑定到端口443:配置 - &gt; server-config - &gt; HTTP服务 - &gt;修改启用了安全性的http侦听器上的端口值。您也可以直接在domain.xml中修改http-listener元素的端口值

在类UNIX上它有点问题,因为不允许应用程序在1024以下的端口上绑定。在这种情况下,您可以在前面配置iptables redirection并将所有流量从443重定向到8181(或任何端口) Glassfish正在运行的1024以上)。

我认为你需要停一秒钟并权衡选项,无论是否在前面使用apache,或者让Glassfish直接使用iptables配置执行所有http(s)处理。 This thread有详细信息可以帮助您拨打电话。

我希望这有用,你的问题范围很广,如果你能决定是否使用apache以及在哪里做SSL,那么提供更具体的建议会更容易。您此时的Spring安全配置看起来简单而正确,只需要弄清楚上面的内容。