2013-08-26 26 views
0

我有一個Play應用程序,我已經通過在SBT中運行stage來部署,然後使用target/start從命令行運行它。我已將Nginx放在它的前面,並且基於子域,我有兩個server塊 - 一個用於端口80,另一個用於端口443.端口80塊只是重定向到端口443上的https模式這一切都很好。如何強制用戶通過SSL訪問我的Play應用程序?

要回顧一下:

  • http://play.mydomain.com/重定向到
  • https://play.mydomain.com/這是http://localhost:9000

代理但是,如果我只是去http://mydomain.com:9000/,我可以訪問我的播放應用程序直接。沒有SSL,我無法想出讓任何人訪問它。

我該怎麼辦?我應該使用Nginx將端口9000上的任何訪問重定向到SSL版本的URL嗎?我應該防火牆端口9000,並只允許在該端口上的本地請求? (如果是這樣,我該怎麼做?)有沒有其他的方式來處理這個問題,我沒有想到?

直到Servlet 3.1規範發佈多長時間,我可以將整個事情部署爲WAR? :-)

+0

確定。剛發現我不能讓Nginx將端口9000重定向到正確的子域名,因爲我的Play應用已經將自己綁定到了9000端口。奇怪的是,我在互聯網上找不到任何關於這個的東西。我開始認爲我錯過了一些基本的東西。 – TOB

回答

1

您可以讓您的Play應用程序僅偵聽本地接口(例如127.0.0.1)。這樣,nginx仍然可以代理請求,但是外部沒有人可以直接訪問你的應用程序。不需要額外的防火牆設置。

貌似可以傳遞一個附加參數start

$ start -Dhttp.port=9000 -Dhttp.address=127.0.0.1

+0

而你這樣做顯然是在啓動應用程序時使用選項'-Dhttp.address = localhost'。如果你使用'stage'來讓應用程序準備好運行,你可以執行'target/start -Dhttp.address = localhost',並且我已經驗證允許通過Nginx訪問應用程序,但是不能通過端口9000直接。謝謝! – TOB

相關問題