Tôi đang đối mặt với cùng một vấn đề và đã thử giải pháp của bạn. Mặc dù nó ít nhiều hoạt động, nhưng vẫn còn một vài trục trặc. Và thành thật mà nói, nó cảm thấy giống như chống lại các triệu chứng như trái ngược với chữa bệnh.
Vì vậy, đây là những gì cuối cùng làm việc cho tôi:
Thay vì thiết lập triển khai ngoài thông qua các con đường, tôi được phân công mỗi triển khai đến cảng riêng của mình:
foo.war <-- http://localhost:8080/ -- | Proxy | <-- http://www.foo.com -- | Client |
bar.war <-- http://localhost:8181/ -- | Proxy | <-- http://www.bar.com -- | Client |
Bằng cách này, cả hai triển khai có thể sử dụng/như đường dẫn ngữ cảnh của họ, do đó không cần phải chỉnh sửa đường dẫn ngữ cảnh.
Để đạt được điều này, bạn không nhất thiết phải chạy hai máy chủ ứng dụng. Trong trường hợp của tôi (Wildfly 10,0) đó là đủ để xác định hai máy chủ undertow trong cấu hình wildfly, đều có riêng máy chủ ảo và http người nghe, như vậy:
<server name="foo-server">
<http-listener name="foo-listener" proxy-address-forwarding="true" socket-binding="foo-http"/>
<host name="foo-host" default-web-module="foo.war" alias="localhost, foo.com, wwww.foo.com"/>
</server>
<server name="bar-server">
<http-listener name="bar-listener" proxy-address-forwarding="true" socket-binding="bar-http"/>
<host name="bar-host" default-web-module="bar.war" alias="localhost, bar.com, wwww.bar.com"/>
</server>
<socket-binding name="foo-http" port="${jboss.http.port:8080}"/>
<socket-binding name="bar-http" port="${jboss.http.port:8181}"/>
Bạn cũng sẽ cần một JBoss-web.xml trong dự án của bạn:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
<server-instance>foo-server</server-instance>
<virtual-host>foo-host</virtual-host>
<context-root>/</context-root>
</jboss-web>
Hai máy chủ là cần thiết vì bạn không thể thêm ổ cắm ràng buộc vào máy chủ ảo. Vì vậy, có một chi phí nhỏ ở đây, nhưng không đáng kể so với chạy hai máy chủ ứng dụng hoàn chỉnh.
Sửa 1:
Nó chỉ xảy ra với tôi rằng nó có lẽ thậm chí không cần phải sử dụng các cổng khác nhau và sử dụng một máy chủ undertow mỗi deplyoment có lẽ là không cần thiết nữa.
Vì proxy có thể chuyển tiếp máy chủ theo yêu cầu của máy khách đến máy chủ ứng dụng, nên đảm bảo có thể chọn máy chủ ảo thích hợp thông qua tham số bí danh.
Về cơ bản, proxy sẽ chuyển tiếp mọi yêu cầu tới foo.com hoặc bar.com đến localhost: 8080 và để AS sắp xếp mọi thứ.
tôi đã không kiểm tra này, nhưng đây là làm thế nào nó có thể làm việc (một lần nữa, đây là cho Wildfly 10,0):
<server name="default-server">
<http-listener name="http" proxy-address-forwarding="true" socket-binding="http"/>
<host name="foo-host" default-web-module="foo.war" alias="foo.com, wwww.foo.com"/>
<host name="bar-host" default-web-module="bar.war" alias="bar.com, wwww.bar.com"/>
</server>
Và JBoss-web.xml sẽ mất thẻ server:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
<virtual-host>foo-host</virtual-host>
<context-root>/</context-root>
</jboss-web>
Trong trường hợp tác phẩm này sẽ không có chi phí liên quan nào cả.
Chỉnh sửa 2:
Chỉ cần thử nghiệm cách tiếp cận đơn giản - vâng, nó hoạt động :)
Lưu ý: Điều này cũng có thể được thực hiện với một 'Filter' và ít hơn một nửa số mã. – BalusC
@BalusC, hôm nay tôi chuẩn bị triển khai giải pháp Lọc của bạn, nhưng đã sợ hãi vì thực tế là bài đăng của bạn đã bị xóa)) – Osw
Tôi chỉ xóa nó vì nó không đáng để nỗ lực. – BalusC