2016-06-26 6 views
0

아래 2.0.0.Alpha1 웹 서버를 테스트하고 있습니다. 로컬로 실행하면 localhost:80으로 갈 때 Hello World을 반환합니다. 그런 다음 원격 서버에 웹 서버를 배포하고 remote_ip:80으로 이동하지만 응답이 반환되지 않습니다. 원격 서버에서 curl -i -X GET http://localhost:80을 실행하면 Hello World도 다시 발생합니다. 따라서 서버가 확실히 실행되고 있지만 원격 IP 주소를 통해 액세스 할 수없는 이유가 있습니다. 코드에서 원격 IP로 호스트 이름을 설정하려고하면 (.addHttpListener(80, "remote.ip")) BindException이 표시됩니다.웹 서버가 원격 주소에 바인딩되어 있지 않습니다.

import io.undertow.Undertow; 
import io.undertow.server.HttpHandler; 
import io.undertow.server.HttpServerExchange; 
import java.io.IOException; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

public class HelloWorldServer { 

    public static void main(final String[] args) { 
     try { 
      Runtime.getRuntime().exec("sudo fuser -k 80/tcp"); 
     } catch (IOException ex) { 
      Logger.getLogger(HelloWorldServer.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     Undertow server = Undertow.builder() 
       .addHttpListener(80, null) 
       .setHandler(new HttpHandler() { 
        @Override 
        public void handleRequest(final HttpServerExchange exchange) throws Exception { 
         exchange.getResponseSender().send("Hello World"); 
        } 
       }).build(); 
     server.start(); 
    } 

} 

실마리가 있습니까?

+0

단서 1 : "netstat -a"(또는 이와 동등한 것)를 사용하여 서버가 수신 대기중인 IP 및 포트를 확인하십시오. –

+0

'tcp6 0 0 127.0.0.1:80 ::: * LISTEN 2939/java ' – Hooli

+0

그래서 IP 주소를 사용하여 IPv6에서 curl을 사용하고 있습니까? ("localhost"...) –

답변

0

addHttpListener(80, null)의 두 번째 인수는 호스트입니다. 공용 IP에서 수신 대기하려면 호스트 이름이나 IP를 입력해야합니다. null을 사용하면 localhost에만 바인딩됩니다.

모든 주소에 바인딩하려는 경우 공용 IP에 바인딩하거나 0.0.0.0에 바인딩을 시도하십시오.

Undertow server = Undertow.builder() 
     .addHttpListener(80, "0.0.0.0") 
     .setHandler(new HttpHandler() { 
      @Override 
      public void handleRequest(final HttpServerExchange exchange) throws Exception { 
       exchange.getResponseSender().send("Hello World"); 
      } 
     }).build(); 
server.start();