「如何用嵌入式Tomcat完成此操作?」
這可能是可能的,但不推薦。那會導致你太多的壓力值得。
而是使用前綴「/ api/v1 /」,並將所有寧靜的端點放在該路徑後面。
然後可以通過彈簧安全(允許CORS等)特定管理「/ api」路徑。
「v1」路徑允許您爲客戶版本化api,或者您可能有日期依賴業務邏輯的情況。
「如何使用Spring Boot應用程序在其中運行的託管Tomcat完成此任務?」
我明白你爲什麼要這麼做;我有「人」(?)要求我做類似的奇怪的事情/
我推薦在這種情況下用於寧靜端點的相同「/ api」方法,但是阻止所有對Tomcat的靜態內容請求。 Spring Security可以配置爲只能通過tomcat請求「api」下的寧靜端點,並阻止任何對Tomcat的靜態內容請求。
將Nginx配置爲與tomcat位於同一臺服務器上,並將NgineX docbase設置爲戰爭擴展後的靜態內容。
不要在「META-INF」或「WEB-INF」內的任何地方放置該目錄;;這些目錄中的文件只能由Tomcat提供,而其他任何操作都不安全。
另外,不要使用Nginx重定向到Tomcat,以便Tomcat將靜態內容提供給Nginx,Nginx將它傳遞給客戶端。如果Tomcat除了從戰爭中提取內容之外不會做任何事情,那麼Nginx就是多餘的。
最終的結果是,Nginx運行在不同的端口上,它看起來好像你有兩個應用程序,但不是真的。
它不如只保持角度的應用程序分開,但你知道......「人」。
如果您打算使用tomcat從war文件提供靜態內容,請不要將它放在「src/main/resources/static /」下。靜態目錄適用於jar部署,但在部署戰爭內容時很麻煩。相反,將它放在「src/main/webapp /」下。您需要確保Spring Security仍然允許它,但是標準的tomcat允許所有不在「META-INF」或「WEB-INF」下的內容請求。
如果所有這一切仍然沒有你所要做的事情的方式,那麼你可以定義在雄貓「server.xml中」一個單獨的主機和連接器,並與自己的「文檔庫定義兩個不同的上下文「在context.xml中。
上下文文檔:https://tomcat.apache.org/tomcat-8.5-doc/config/context.html
主機文檔:https://tomcat.apache.org/tomcat-8.5-doc/config/host.html
也許這有助於https://stackoverflow.com/questions/36357135/configure-spring-boot-with-two-ports – jmhostalet
如果內容真正是靜態的,而你正在用Web服務器(nginx)服務你的服務,那你爲什麼不把你的靜態內容部署到Web服務器上? –
@jmhostalet不幸的是,因爲這個答案不夠遠。我知道如何啓用第二個端口。但最初的問題是如何在兩個端口上提供不同的內容。不管怎麼說,還是要謝謝你! – jonas