尽管这是一个老问题,但对于答案并没有很多 WebLogic 特定的见解。这是我 7 年左右处理 WebLogic(有和没有 Netscaler 作为后端)的经验。
1) 你为什么要在端口 7001 或 7002 上公开你的应用程序?通常,7001 和 7002 将容纳 AdminServer,您当然不希望人们能够访问http://...:7001/console(或https://....:7002/console)。端口 7001 和 7002 应该只能从网络的受信任(管理)部分访问。
1a) 通常,如果您使用 Oracle 融合中间件,应用程序将在单独的托管服务器中运行,该服务器拥有自己的端口。例如,Oracle WebCentre Content 在名为 UCM_server1 的托管服务器中运行,其主要服务端口为 16200 (http) 和 16201 (https)
2) 你真的应该把 WebLogic 放在一个反向代理后面来显示任何类型的站点。我们通常使用 OHS(Oracle 的 httpd 版本)或 Apache httpd。然后通常您会使用 httpd 中的 weblogic_module 反向代理到您的 WebLogic 托管服务器。(在其高级设置中,您可以设置“启用 WebLogic 模块”(或类似名称,我想不起来了)。
2a) weblogic_module 特别重要(或者更确切地说,当在反向代理后面使用时,它启用了特别重要的功能)。像知道这样的特点:
2b) weblogic_module 所做的大部分工作是设置特定的 HTTP 请求标头。在托管服务器的设置中启用“使用 weblogic 模块”只是告诉 WebLogic“信任一些进入请求的特定标头并使用这些标头来了解有关流量来自何处以及如何进入系统的更多信息”。
实际上,我建议最好避免使用 weblogic_module,特别是如果您想在不重定向用户的情况下获得更好的“哎呀,站点不可用”体验(即 503 处理程序)(改变他们的上下文,这样他们就不能只是重新加载页面)。只需做与 weblogic_module 相同的事情——这并不难。
3)在其前面粘贴一个缓存(清漆,nginx等)。根据我的经验,您确实希望只提供来自 WebLogic 的动态内容,并确保提供针对该目的优化的静态内容。不要不必要地占用你的工作线程;它们有时可能是稀缺资源。根据您的应用程序,您可能更喜欢让您轻松控制缓存头之类的东西(因为某些产品 --- Oracle WebCentre Content,我在看你 --- 在涉及到使站点缓存友好而无需重写 Cache-Control 标头)。
4) 您很可能希望拥有一个 URL……拥有不同的内部和外部 URL 是……真的很糟糕。考虑使用“水平分割”DNS 等技术,内部客户端将获得一个 IP(例如 10.xxx),而外部客户端将获得另一个(例如 123.xxx),或者仅从一个公共 IP 提供所有服务。每个人都应该有相同的 SSL 证书;否则,HSTS 很可能会给您带来问题。
5)说到 SSL,我建议你也使用自签名证书(或者如果你有本地 CA,则本地颁发的证书)用于内部(例如 WebLogic 服务器,如 AdminServer,以及 Nodemanager),并且只有 CA实际网络头上的证书。
6) 如果使用 httpd,我强烈建议您使用 mod_remoteip 之类的工具部署它,因为您有一个很好的日志记录来源。
A-Team(他们来自 Oracle ——并且对各种 Oracle 产品非常了解)有一篇关于 weblogic_module 主题的精彩博客文章:SSL 卸载和 WebLogic 服务器
F5 有一个有用的部署指南,展示了如何配置反向代理(在他们的情况下是 F5 BigIP,但仍然与 Netscaler 或只是 httpd 相关)并且不必使用 weblogic_module。
7) 你可能会恨我让你思考这么多……但我告诉你,这一切都是由经验驱动的……其中一些是相当痛苦的。
8) 哦,如果您在 VMWare 环境(不公开硬件随机数生成器)上运行 Java 工作负载,您将需要做一些事情来确保您的应用程序只使用 /dev /urandom,从不 /dev/random --- 找到所有 jre/lib/security/java.security 文件并设置 securerandom.source=file:/dev/./urandom 以解决长期存在的问题(可能最终在某个地方解决在 Java 8 中)错误,它会“聪明”并最终使用 /dev/random,从而使启动之类的事情变得非常缓慢。