重定向與反向代理

專業製作的 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。