2016-06-26 9 views
0

Я тестирую веб-сервер подкласса 2.0.0.Alpha1. Когда я запускаю его локально, он работает и возвращает Hello World, когда я иду на localhost:80. Затем я развертываю веб-сервер на удаленном сервере и перехожу на 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

Так вы используете curl на IPv6, используя этот IP-адрес? (Это «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();