重定向与反向代理

专业制作的 Web 应用程序不会向用户公开服务器环境的内部细节。当你在零售商处下订单时,你看不到(或必须输入) https://mydealer.com:8443/Dealerapp/entryPage.html ,但只是 mydealer.com,尽管应用服务器需要所有细节在更长的 URL 中给出。这可以通过以下方式实现:

if ($scheme = http) {
    return 301 https://$server_name$request_uri;
}

这会重定向。即使客户端没有请求安全连接,浏览器也会立即重定向到它。在拥有严格数据隐私法的国家/地区,你甚至可能有义务在任何商业网站上执行此操作。采用重定向方式是因为浏览器需要知道安全连接,否则它不会与服务器协商以使其安全。

location /app/ {
    proxy_pass https://mydealer.com:8443/Dealerapp/entryPage.html;
}

这是一个反向代理。它对浏览器是透明的。因此,你可以完全隐藏最终用户是否有一个或多个应用服务器,他们在哪些端口上监听,或者他们的应用程序是如何命名的。否则,如果你的数据中心需要将应用程序移动到另一个侦听 8543 的服务器,则客户端的所有书签都将无效。此示例还将用户引导至你的输入页面。如果你将条目页面命名为 index.html,则可以省略此项。但是,你可能在应用程序中有多个用户可能想要添加书签的条目页面,因此如果你不受 index.html 约束,则可以更灵活。

我用/ app 后缀了公司 URL。如果你的域只提供此应用,则可以省略此项。如果除了应用程序之外,还有一些静态内容,例如你的公司描述,你可能希望拥有简单的 URL。

此代理仅适用于输入页面。我通常需要两个 URL 方案,一个用于 Web 应用程序的静态内容,如 JavaScript,CSS 和图像。我将所有这些放在名为 serverapp 的文件夹下的文件夹结构中,并编写以下代理:

location /app/serverapp/ {
    proxy_pass https://mydealer.com:8443/Dealerapp/serverapp/;
}

另一条 REST 服务路径; 其余的 URL 路径与文件夹不匹配,但是 jax-rs REST 服务的路径:

location /rest/ {
    proxy_pass https://mydealer.com:8443/Dealerapp/rest/;
}

还需要采取另一个步骤,很少在任何地方提到。应用服务器在 URL 路径/ Dealerapp 下运行,因此它将发出具有属性 path = Dealerapp 的会话 cookie。浏览器不知道此路径,并且由于其原始策略将忽略 cookie。我们可以通过跨源资源共享来说服它,但是通过将路径设置为/来修改 cookie 路径可能更容易

<session-config>
    <session-timeout>720</session-timeout>
    <cookie-config>
        <name>SZSESSION</name>
        <path>/</path>
        <http-only>true</http-only>
        <secure>true</secure>
    </cookie-config>
</session-config>

到我们的 web.xml。