如何在Windows Server 2008中将Tomcat 7运行在端口80上?

4
我已经花了两天的时间尝试让这个工作起来。
当我第一次启动Tomcat 7时,它运行在8080端口上,这是Tomcat的默认端口。因此,可以通过输入以下内容进行访问:http://localhost:8080/或mydomain.com:8080。
但我希望从8080端口移动到80端口,这样我就可以输入mydomain.com并被重定向到网页。
我已经禁用了所有可能在80端口上运行的额外服务,如IIS、MSSQL、World Wide Web Publishing等。
在server.xml文件中,我做出了以下更改: 然后当我启动服务器时,在日志中会看到以下内容(尽管服务器已经启动):
...
Dec 27, 2014 9:34:44 PM org.apache.coyote.AbstractProtocol init
SEVERE: Failed to initialize end point associated with ProtocolHandler ["http-apr-80"]
java.lang.Exception: Socket bind failed: [730048] Only one usage of each socket address (protocol/network address/port) is normally permitted.  
    at org.apache.tomcat.util.net.AprEndpoint.bind(AprEndpoint.java:453)
    at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:646)
    at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:434)
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:978)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
    at org.apache.catalina.core.StandardService.initInternal(StandardService.java:559)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
    at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:821)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:638)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:663)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:280)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:454)

Dec 27, 2014 9:34:44 PM org.apache.catalina.core.StandardService initInternal
SEVERE: Failed to initialize connector [Connector[HTTP/1.1-80]]
org.apache.catalina.LifecycleException: Failed to initialize component [Connector[HTTP/1.1-80]]
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:106)
    at org.apache.catalina.core.StandardService.initInternal(StandardService.java:559)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
    at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:821)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:638)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:663)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:280)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:454)
Caused by: org.apache.catalina.LifecycleException: Protocol handler initialization failed
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:980)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
    ... 12 more
Caused by: java.lang.Exception: Socket bind failed: [730048] Only one usage of each socket address (protocol/network address/port) is normally permitted.  
    at org.apache.tomcat.util.net.AprEndpoint.bind(AprEndpoint.java:453)
    at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:646)
    at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:434)
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:978)
    ... 13 more

Dec 27, 2014 9:34:44 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-apr-8009"]
Dec 27, 2014 9:34:44 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 3310 ms
Dec 27, 2014 9:34:44 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Dec 27, 2014 9:34:44 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.57
Dec 27, 2014 9:34:44 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory C:\Apache\tomcat\webapps\docs
Dec 27, 2014 9:34:46 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deployment of web application directory C:\Apache\tomcat\webapps\docs has finished in 1,985 ms
Dec 27, 2014 9:34:46 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory C:\Apache\tomcat\webapps\examples
Dec 27, 2014 9:34:47 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deployment of web application directory C:\Apache\tomcat\webapps\examples has finished in 1,234 ms
Dec 27, 2014 9:34:47 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory C:\Apache\tomcat\webapps\host-manager
Dec 27, 2014 9:34:48 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deployment of web application directory C:\Apache\tomcat\webapps\host-manager has finished in 453 ms
Dec 27, 2014 9:34:48 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory C:\Apache\tomcat\webapps\manager
Dec 27, 2014 9:34:48 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deployment of web application directory C:\Apache\tomcat\webapps\manager has finished in 313 ms
Dec 27, 2014 9:34:48 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory C:\Apache\tomcat\webapps\ROOT
Dec 27, 2014 9:34:48 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deployment of web application directory C:\Apache\tomcat\webapps\ROOT has finished in 156 ms
Dec 27, 2014 9:34:48 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-apr-8009"]
Dec 27, 2014 9:34:48 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 4282 ms

当我访问网址mydomain.com时,什么也看不到。

我对此非常陌生-已经阅读了很多在线文章并按照指示进行操作,但似乎没有任何作用。 我之前做过同样的步骤,它像魔法一样奏效。

现在我该怎么办? 请帮帮我。

这是我在netstat上得到的结果:

netstat result


双击Tomcat服务器,然后将服务器位置切换到用户Tomcat安装http://i.stack.imgur.com/3eDSs.png - ZEE
在Eclipse控制台旁边,您会找到服务器,只需双击Tomcat V7.....,然后您将看到此窗口http://i.stack.imgur.com/3eDSs.png。 - ZEE
但是我没有使用Eclipse.. - Saturnian
你在用什么? - ZEE
什么也没有。我已经从Apache网站下载了zip文件并安装了服务。我正在服务器上运行它,除非没有其他选择,否则不想使用Eclipse。 - Saturnian
显示剩余2条评论
1个回答

2

有其他应用正在使用80端口。进行本地端口扫描并使用netstart打印可执行路径(此视频将有所帮助:https://www.youtube.com/watch?feature=player_detailpage&v=V3nWkr7v4-E#t=7)

通常是Skype(或其他聊天或点对点文件共享应用程序)。关闭Skype(退出而不仅是注销,进程应该退出),然后启动Tomcat。然后可以重新启动Skype,它将在其他端口上正常工作。

还有防火墙条目阻止Java绑定到此端口吗?可以从防火墙规则中检查这一点-如果您使用的是默认的Windows防火墙,则会在控制面板中找到该规则。https://www.youtube.com/results?search_query=widows+firewall+java+allow这些结果或常规搜索引擎中的相同术语将告诉您允许Java的步骤。通常情况下,Windows会在您第一次运行应用程序时询问。因此,如果您拒绝了,则它会记住那个。还需要具有管理员角色(已登录/或在提示用户上)才能进行这些更改。对于一些问题,打开管理员控制台也很有帮助。右键单击cmd.exe并选择以管理员身份运行,然后回答安全提示。

这个程序可能会有所帮助,请将其保存到名为“PortCheck.java”的文件中

    class PortCheck{
    public static void main(String []args) throws Exception{
        String port = "80";
        if(args.length > 0)port = args[0];
        final int p = Integer.parseInt(port);
        Thread t = new Thread(){
            public void run(){

                try{
                    java.net.ServerSocket s = new java.net.ServerSocket(p);
                    System.out.println("\nListening on port " + p);
                    s.accept();
                }catch(Exception e){
                    System.out.println("Err " + e);
                }
            }
        };
        t.start();
        Thread.sleep(2000);
        System.out.println("Bye ");
        System.exit(0);
    }
}

编译它:

javac c:\_your_path\PortCheck.java

然后运行它:

java -cp c:\_your_path PortCheck

如果成功绑定到80端口,将告诉您:

监听端口80 再见

也可以尝试使用443端口进行类似操作。


我没有在本地计算机上运行它。我试图在Microsoft Server 2008上运行它。所以没有Skype。我已经做了你提到的所有事情。没有额外的服务在端口80上运行。只有TCP正在监听。 - Saturnian
我不理解你之前的评论“端口80 - 它只是说TCP处于LISTENING状态”,这意味着其他进程正在使用你的本地端口80?无论如何,如果你有JDK,请尝试使用Java运行上面的代码 - 需要使用javac c:\ yourpathpath \ PortCheck.java编译它。 - tgkprog
我已经添加了一张图片,以便向您展示我想要传达的内容。 - Saturnian
2
好的,我不知道它是如何工作的,但这是我所做的:1)在命令提示符中输入netstat -p TCP -ao2)taskkill /F /PID 4220(占用端口80的进程的PID)3)运行service.bat uninstall以卸载Tomcat74)运行service.bat install以重新安装Tomcat7不知何故,这起作用了!至少重复了4次后!非常感谢@tgkprog! - Saturnian
很高兴它解决了,必须是描述中的另一个进程。 - tgkprog
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接