как сделать сервер причала доступным из локальной сети?

Я пытаюсь получить доступ к веб-приложению (развернутому в jetty8 на моей машине (A)) с другой машины (B) в локальной сети, используя 192.168.0.6:8080 (IP-адрес A), но оно не работает. В то время как я могу получить доступ к приложениям, размещенным на AppServ на машине B, с A, обычно используя 192.168.0.5 (IP-адрес B).

Я могу нормально получить доступ к приложению на локальном хосте: 8080 на машине A.

Могу заверить, что проблем с сетью нет, но пристань по какой-то причине недоступна по сети. Есть ли какая-либо конкретная конфигурация для доступа через локальную сеть?

Мое приложение - это проект Maven, и я запускаю его из eclipse, а настройки находятся как в web.xml, так и в pom.xml.


person Sami    schedule 04.08.2012    source источник
comment
как именно запустить причал? внутри eclipse или с помощью mvn jetty:run?   -  person Stefan Ferstl    schedule 04.08.2012
comment
@StefanFerstl Я добавил mvn jetty:run в конфигурацию запуска eclipse. Так что я могу запустить проект из eclipse, а eclipse запустит причал. тогда я могу получить доступ к приложению локально на localhost:8080/appName   -  person Sami    schedule 04.08.2012
comment
На какой ОС вы работаете? Есть ли у вас какие-либо настройки брандмауэра, которые могут препятствовать видимости портов?   -  person Edmon    schedule 04.08.2012
comment
@Edmon У меня Windows7 .. Я отключил брандмауэр Windows, но это не сработало.   -  person Sami    schedule 04.08.2012
comment
Я не смог воспроизвести вашу проблему на Win7. Не могли бы вы посмотреть в Центре управления сетями и общим доступом, действительно ли отключен брандмауэр?   -  person Stefan Ferstl    schedule 06.08.2012
comment
@StefanFerstl да, он выключен.   -  person Sami    schedule 06.08.2012
comment
Я также получаю ту же проблему со встроенным причалом. У нас есть приложение (со встроенным причалом), работающее на сервере Ubuntu (облачная виртуальная машина). Мы можем получить доступ к приложению с той же виртуальной машины, используя localhost:8080. Но когда я пытаюсь получить к нему доступ через Интернет, используя общедоступный IP-адрес системы, это не работает. Моя сеть и брандмауэр настроены правильно, так как я могу получить доступ к другим приложениям, развернутым в tomcat, на том же компьютере. Я также тестировал порт 8080 в Tomcat.   -  person spideringweb    schedule 23.05.2016


Ответы (3)


Следующий ответ предназначен для Jetty 8 и старше (команды и имена классов Jetty 9+ отличаются)

Убедитесь, что вы проверили, какие интерфейсы вы слушаете.

Пример (из логов)

2012-08-10 14:52:26.470:INFO:oejs.AbstractConnector:Started [email protected]:8080

Это говорит о том, что сервер прослушивает только 127.0.0.1 (localhost). Вы можете либо просмотреть журналы, либо просто выполнить быстрый тест на компьютере A. Откройте веб-браузер и проверьте оба этих URL-адреса.

  • http://localhost:8080/
  • http://192.168.0.6:8080/

Если он отвечает на оба URL-адреса, вероятно, вы правильно настроили его и вам нужно решить проблемы с брандмауэром. Если это работает для одного, но не для другого, то вы слушаете только 1 интерфейс.

Чтобы причал прослушивал все интерфейсы, используйте специальный IP 0.0.0.0

$ java -Djetty.host=0.0.0.0 -jar start.jar
2012-08-10 14:53:25.338:INFO:oejs.AbstractConnector:Started [email protected]:8080

На данный момент jetty прослушивает все интерфейсы на вашем компьютере.

Примечание: вы также можете отредактировать файл etc/jetty.xml и установить постоянный хост.

      <New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
        <Set name="host">0.0.0.0</Set>
      ...
person Joakim Erdfelt    schedule 10.08.2012
comment
Я мог получить доступ только к http://localhost:8080. Я использовал mvn jetty:run -Djetty.host=0.0.0.0 для запуска причала, он запустился и получил журнал, о котором вы упомянули [email protected]:8080. Но по-прежнему не могу получить доступ к http://192.168.0.6:8080. Что еще может быть причиной проблемы?.. Я пробовал локально. - person Sami; 14.08.2012
comment
Если вы не можете получить доступ к 192.168.0.6:8080 и у вас есть вывод [email protected]:8080, тогда у вас нет 192.168.0.6 в качестве сетевого интерфейса на этой машине. Попробуйте запустить тест из java, чтобы увидеть, может ли он найти этот сетевой интерфейс. docs.oracle.com/javase/tutorial/networking/nifs/listing. html - person Joakim Erdfelt; 14.08.2012
comment
Я запустил этот код, и это часть того, что я получил: Display name: Intel(R) Centrino(R) Advanced-N 6205 Name: net5 InetAddress: /192.168.0.6 InetAddress: /fe80:0:0:0:c739:e32:3450:159f%19 - person Sami; 15.08.2012
comment
Как вы настраиваете это, когда Jetty запускается автоматически из eclipse? (запускать как веб-приложение) - person Nilzor; 20.02.2013
comment
Примечание. В Android Studio с Google App Engine необходимо отредактировать файл ‹yourBackend›.iml. Измените строку <option name="HTTP_ADDRESS" value="localhost" /> на <option name="HTTP_ADDRESS" value="0.0.0.0" /> - person fklappan; 08.02.2016

20.07.2020

В дополнение к ответу @JoakimErdfelt на Jetty 9.4.12.v20180830 (и выше) вы можете настроить хост программно как:

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;

    Server server = new Server();       

    ServerConnector httpConnector = new ServerConnector(server);
        httpConnector.setHost("0.0.0.0"); // <--------- !
        httpConnector.setPort(12345);
        httpConnector.setIdleTimeout(5000);
        server.addConnector(httpConnector);
person Z3d4s    schedule 20.07.2020

Итак, я наткнулся на это, и после дня отладки странного поведения я обнаружил, что Jetty транслирует только себя на IPv6, и, пропуская IPv4, порт v4 был выделен другому приложению.

Мое решение? Перейти в другой порт...

person Matt Hilliard    schedule 09.09.2014
comment
Это не решение проблемы, опубликованной в вопросе, поскольку спрашивающий четко указывает, что Jetty доступен с локального хоста через IPv4. - person lxg; 10.09.2014
comment
Нет, он не знает. Он заявляет, что может получить доступ к нему с локального хоста: 8080 на машине A, которая может быть (и обычно является) псевдонимом для обоих подмножеств IPv4 (127.0.0.1) и IPv6 (:: 1) одновременно. Тот факт, что многие клиенты и причалы будут каскадно переходить от одного к другому, не сообщая вам, какой из них используется или какой неисправен, сильно влияет на проблему. Скорее всего, его адрес 127.0.0.1:8080 на A заблокирован, а адрес ::1:8080 — нет, и причал использует последний. - person Matt Hilliard; 10.09.2014
comment
Хорошо, это звучит правдоподобно. - person lxg; 10.09.2014