Tomcat 7:对等方或软件重置连接导致连接中止

Posted

技术标签:

【中文标题】Tomcat 7:对等方或软件重置连接导致连接中止【英文标题】:Tomcat 7: Connection reset by peer or Software caused connection abort 【发布时间】:2014-12-08 23:47:21 【问题描述】:

我在尝试部署 Java 应用程序时遇到问题。

Cannot invoke Tomcat manager: Connection reset by peer: socket write error

Cannot invoke Tomcat manager: Software caused connection abort: socket write error

pom.xml 我有这个:

<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <url>http://localhost:8085/manager/html</url>
        <server>tomcat7</server>
        <path>/java_web</path>
        <username>admin</username>
        <password>admin</password>
    </configuration>
</plugin>

tomcat-users.xml 我有这个:

 <tomcat-users>
     <role rolename="admin"/>
     <role rolename="manager-script"/>
     <role rolename="manager-gui"/>
     <role rolename="manager-jmx"/>
     <user username="admin" password="admin" roles="manager-gui,admin,manager-jmx,manager-script" />
 </tomcat-users>

Maven/conf/settings.xml 我有:

<server>
    <id>tomcat7</id>
    <username>admin</username>
    <password>admin</password>
</server>

当我想去的时候

http://localhost:8085/manager/html/deploy?path=%2Fjava_web&update=true

并输入用户名和密码(admin admin)我有错误:

403 Access Denied
You are not authorized to view this page.

但我输入了 tomcat-users.xml 用户 admin 具有 manager-gui 角色。 我正在使用 Tomcat 7.0.56 和 Jenkins。还可以使用命令:clean 和 tomcat7-redeploy。 需要帮助以了解问题所在:C

【问题讨论】:

【参考方案1】:

如果你反复尝试在tomcat-users.xml文件中设置用户,但错误仍然存​​在,请考虑同时检查Tomcat安装的权限和用户运行服务。

我遇到了同样的错误(“Connection reset by peer: socket write error”),直到我意识到我首先使用管理员/root 用户启动了 Tomcat 服务器,然后我正在尝试使用另一个没有管理权限的用户启动该服务器。事实证明,在这些情况下,Tomcat 能够启动,但从逻辑上讲,它无法写入“webapps”目录以进行远程部署,出现类似于用户未正确配置时发生的错误(症状相同但不同问题)。

我在使用 Windows Server 时遇到了这个问题,但我想 Linux 和 MacOS 可能会发生类似的情况。我把它留在这里“为了后代”,以防它可能对其他人有用。

【讨论】:

【参考方案2】:

在我的情况下,设置看起来不错,但是我已经将相同的 webapp 上传到了 tomcat 并且没有指定

<update>true</update>

在 pom.xml 中的 tomcat 插件中

【讨论】:

参见 Melody Feng 的回答。 投反对票。这是一个编译错误。 cvc-complex-type.2.4.a:发现以元素“更新”开头的无效内容。 '"maven.apache.org/POM/4.0.0":extensions, "maven.apache.org/POM/4.0.0":executions, "http://maven.apache.org/POM/4.0.0":dependencies, "maven.apache.org/POM/4.0.0":goals, "maven.apache.org/POM/4.0.0":inherited' 之一是预期的。跨度> @PhilipRego 可能应该在 部分中指定,这就是您收到此错误的原因。目前无法确定。【参考方案3】:
mvn tomcat7:redeploy

按照documentation 的建议试试这个:

(更新参数设置为 true 的部署目标的别名。)

【讨论】:

从 2.1 开始提供【参考方案4】:
        <plugin>
            <!-- tomcat deploy plugin -->
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>tomcat-maven-plugin</artifactId>
            <configuration>
                <url>http://localhost:8080/manager/text</url>
                <server>TomcatServer</server>
                <username>XXXX</username>
                <password>XXXX</password>
                <path>/XXXX</path>
            </configuration>
        </plugin>

这对我有用:)

环境 -> Windowd 8.1 + Maven 3 + Tomcat 8.1.15 + JDK 1.8 另外,我不得不使用 tomcat:redeploy

另外,通过 -> Preferences->Maven->User Settings 更新您的 maven 设置以指向您的 maven settings.xml 文件。 在 maven settings.xml 中添加服务器的值(服务器部分并在那里添加 tomcat 服务器详细信息)。在这里使用它(对我来说 id 是 TomcatServer )

一些步骤是从这里采取的:- http://kosalads.blogspot.de/2014/03/maven-deploy-war-in-tomcat-7.html

【讨论】:

【参考方案5】:

我加了

<server>
    <id>tomcat7</id>
    <username>admin</username>
    <password>admin</password>
</server> 

user/.m2/settings.xml

我也没有更改 pom.xml、tomcat-users.xml 和 Maven/conf/settings.xml,现在一切正常。

【讨论】:

我认为你的问题是你的 tomcat Maven 配置中的服务器配置。它与用户名/密码设置冲突。在 pom.xml 文件中,您应该删除 tomcat7 部分并保留用户名和密码,或者删除用户名和密码并保留 tomcat7. settings.xml 的位置可能不同,例如也可以是:D:\apache-maven-3.3.9\conf\settings.xml 谢谢,这太完美了! maven 的 settings.xml 的服务器 id 对应于 pom.xml 的 tomcat7-maven-plugin 服务器 id 中的服务器 id,或者其他方式:-) 所以你可以定义许多服务器并将凭据保存在一个地方,但从许多 pom 中引用.xml 到此。【参考方案6】:

不应授予具有 manager-gui 角色的用户 manager-script 或 manager-jmx 角色。

所以,用户 admin 应该删除角色“manager-gui”

【讨论】:

这是我的“连接被重置”问题的原因。管理员用户被分配了不正确的 manager-gui 角色。我添加了一个新的经理脚本角色和一个新用户,我的问题就解决了。 为什么不呢?为什么他们不应该同时拥有 manager-gui 和 manager-script?

以上是关于Tomcat 7:对等方或软件重置连接导致连接中止的主要内容,如果未能解决你的问题,请参考以下文章

java.net.SocketException:软件导致连接中止:recv 失败,出现 java.net.SocketException:连接重置 [重复]

javax.net.ssl.SSLException:SSL 握手中止连接由对等方重置,同时调用 web 服务 Android

使用tomcat7-maven-plugin进行Tomcat部署失败,并显示错误“无法调用Tomcat管理器:通过对等方重置连接:套接字写入错误”

SSL握手中止:ssl = 0x55ad47e080:系统调用期间的I / O错误,对等方重置连接

IOException:javax.net.ssl.SSLHandshakeException:SSL 握手中止:ssl=0xafdb8e00:系统调用期间的 I/O 错误,对等方重置连接

nginx tomcat7 错误:-“从上游读取响应标头时,recv() 失败(104:对等连接重置)”