当前位置: 首页 > 知识库问答 >
问题:

作为Azure Web应用程序运行在端口80上侦听的Java应用程序。如何解决HTTP绑定错误?

郑鸿朗
2023-03-14

从运行Java应用程序时。Azure Web应用程序中的Jar文件,应用程序运行但无法绑定到端口80。

按照以下链接中的说明:https://blogs.msdn.microsoft.com/azureossds/2015/12/28/running-java-jar-file-to-serve-web-requests-on-azure-app-service-web-apps/

应用程序启动,但在尝试绑定时抛出错误:

Java语言网BindException:地址已在使用:在sun绑定。nio。ch.Net。bind0(天然方法)~(na:1.8.0\u 60)在太阳下。nio。ch.Net。在sun上绑定(Net.java:433)~[na:1.8.0\u 60]。nio。ch.Net。在sun上绑定(Net.java:425)~[na:1.8.0\u 60]。nio。ch.ServerSocketChannelImpl。在sun上绑定(ServerSocketChannelImpl.java:223)~[na:1.8.0\u 60]。nio。ch.ServerSocketAdaptor。绑定(ServerSocketAdaptor.java:74)~[na:1.8.0\u 60]

我预计这将是一个已经绑定到端口80的w3wp进程,因此不允许java应用程序绑定到同一端口。

以下是web的内容。Web应用的配置如下所示:

<?xml version="1.0" encoding="UTF-8"?>

<configuration>

<system.webServer>

<handlers>

<add name="httpPlatformHandler" path="*" verb="*"

modules="httpPlatformHandler" resourceType="Unspecified" />

</handlers>

<httpPlatform processPath="%ProgramW6432%\Java\jdk1.8.0_60\bin\java.exe"

arguments="-Djava.net.preferIPv4Stack=true -Dport.http=%HTTP_PLATFORM_PORT% -jar &quot;%HOME%\site\wwwroot\bin\demojar.jar&quot;"

stdoutLogEnabled="true"

startupRetryCount='10'>

</httpPlatform>

</system.webServer>

</configuration>

有没有办法说服Azure Web App平台允许Java应用程序绑定到端口80?

共有1个答案

芮博厚
2023-03-14

它们的键是%HTTP\u PLATFORM\u PORT%环境变量。Web App服务将此环境变量设置为期望Java应用程序侦听的端口(这就是为什么Web.config也将该值作为参数传递给Java运行时)。

您应该将Java应用程序配置为绑定到端口%HTTP_PLATFORM_PORT%,而不是侦听端口80。然后,IIS将透明地将在端口80上收到的所有请求路由到您的应用程序中。它还有助于处理端口443上的TLS终止等问题,以便应用程序也可以通过HTTPS公开。

 类似资料:
  • 问题内容: 我无法在端口80上启动应用程序。 我已经在本地计算机(使用我的IDE和本地服务器)上尝试过,没有运气。 我检查了其他类似的帖子,并确保我在具有root用户的服务器上运行jar。 这是错误: 问题答案: 在Linux上,只能由root用户打开低于1024的端口,因此默认情况下限制端口80 如果要在80端口上发布应用,则需要将请求从80端口重定向到要运行springapp(例如8080)端

  • 有人能解释一下如何在不指定端口的情况下在端口80上运行我的reactJS应用程序吗 目前它在www.mydomain.com:3001工作,但我希望它是可见的,当我去www.mydomain.com 我在创建-反应-应用文档网站上找不到解决方案,所以我在这里问。 如果我使用 我得到错误的东西已经使用端口80(我没有指定PORT=80) 谢啦

  • 问题内容: 是否可以创建具有相同路由和相同中间件的,同时侦听HTTP和HTTPS的Express服务器? 目前,我在高速上的HTTP做到这一点,有安全通道隧道HTTPS来表达,但我更喜欢一个纯粹的节点解决方案。 我可以使用以下代码来做到这一点,但是可以使用标记为私有的方法: 问题答案: 您可以通过以下方式共享实现:

  • 问题内容: 我创建并启动一个这样的应用程序: 并且可以正常工作(在端口3000上)。但是,当我将端口更改为80时,运行输出如下: 这在我的笔记本电脑上也有效,但在端口80打开的Amazon EC2实例上无效。可以找出问题所在。有小费吗? 问题答案: 您是否以root用户身份启动应用程序?因为较低的端口号需要root特权。也许sudo节点app.js可以工作吗? 但是,您不应使用root用户特权在端

  • 我正在创建我的图像的一个实例,比如 webmodule的Dockerfile公开了一个端口(例如8080)。 我现在的目标是获得映射/分配的端口号,该端口号可以通过Java从外部访问。有没有环境变量之类的? 用例:webmodule xy应该在另一个web应用程序上注册自己,并提供其IP端口,以便其他应用程序稍后可以联系webmodule xy。IP没有问题,但端口是。 我已经在GitHub上发现

  • 我克隆了spring诊所,包成功了 但当我执行jar... 识别并停止在端口8080上侦听的进程,或将此应用程序配置为在另一个端口上侦听。。。 所以我添加了命令服务器。应用程序中的端口=8090。财产。 但一切都没有改变。。。识别并停止在端口8080上侦听的进程,或将此应用程序配置为在另一个端口上侦听。。。 我能做什么??请帮助我... 我使用window和IntelliJ