Как заставить переадресацию портов работать с Jelastic для подключения к REPL запущенного веб-приложения Clojure?

Я развернул простое веб-приложение Clojure для Jelastic в контейнере Tomcat. Приложение Clojure запускает REPL на порту 7001. У меня установлен и работает Jelastic SSH Gate. Я подключаюсь по SSH к узлу tomcat с переадресацией портов, запустив это в терминале на моей локальной машине (где XXX — числа):

ssh -L 7001:localhost:7001 [email protected] -p 3022 -N -vv

Затем на моей локальной машине я запускаю

lein repl :connect 7001

На локальной машине вижу:

Connecting to nREPL at 127.0.0.1:7001
ConnectException Connection refused (Connection refused)

В окне терминала узла tomcat я вижу

debug1: Connection to port 7001 forwarding to localhost port 7001 requested.
debug2: fd 10 setting TCP_NODELAY
debug1: channel 2: new [direct-tcpip]
channel 2: open failed: connect failed: Connection refused
debug2: channel 2: zombie
debug2: channel 2: garbage collecting
debug1: channel 2: free: direct-tcpip: listening port 7001 for localhost port 7001, connect from 127.0.0.1 port 57311 to 127.0.0.1 port 7001, nchannels 3

Что я делаю неправильно? Это как-то связано с тем, как Jelastic управляет портами?

======================

Обновлено: на самом деле переадресация портов работает нормально

Проблема была с приложением.

Для справки, вот как проверить, работает ли перенаправление портов на Jelastic. На узле Jelastic не установлен netcat, поэтому вы не можете просто запустить netcat -l 7001. Однако у него установлен Perl, поэтому вы можете написать Perl-скрипт для создания сокета прослушивателя, а затем запустить этот скрипт на сервере Jelastic: (EDIT 2019_04_06: вместо использования perl-скрипта ниже просто используйте python -m SimpleHTTPServer 7001 - см. комментарии)

use IO::Socket::INET;
 
# auto-flush on socket
$| = 1;
 
# creating a listening socket
my $socket = new IO::Socket::INET (
    LocalHost => '0.0.0.0',
    LocalPort => '7001',
    Proto => 'tcp',
    Listen => 5,
    Reuse => 1
);
die "cannot create socket $!\n" unless $socket;
print "server waiting for client connection on port 7777\n";
 
while(1)
{
    # waiting for a new client connection
    my $client_socket = $socket->accept();
 
    # get information about a newly connected client
    my $client_address = $client_socket->peerhost();
    my $client_port = $client_socket->peerport();
    print "connection from $client_address:$client_port\n";
 
    # read up to 1024 characters from the connected client
    my $data = "";
    $client_socket->recv($data, 1024);
    print "received data: $data\n";
 
    # write response data to the connected client
    $data = "ok";
    $client_socket->send($data);
 
    # notify client that response has been sent
    shutdown($client_socket, 1);
}
 
$socket->close();

(скрипт от здесь). Используйте nano, чтобы записать вышеуказанное в скрипт listener.pl на узле Jelastic, затем запустите perl listener.pl на этом узле.

На вашей локальной машине запустите

ssh -L 7001:localhost:7001 [email protected] -p 3022

Затем на локальной машине попробуйте curl localhost:7001 и в терминале узла Jelastic вы должны увидеть что-то вроде

received data: GET / HTTP/1.1
Host: localhost:7777
User-Agent: curl/7.54.0
Accept: */*

Если проблема не в Clojure, вам следует удалить тег clojure.

Spenser Truex 31.03.2019 07:12

Честная оценка. Удален тег.

toby-one 01.04.2019 21:06

@toby-one Мы проверили переадресацию портов так, как вы использовали, и у нас это работает. Может быть связано с локальными проблемами или проблемами приложения. Вы можете попробовать Конечные точки и, если не поможет, напрямую напишите нам

Jelastic 02.04.2019 11:20

Вы правы @Jelastic, это работает. Я добавил примечание к моему вопросу, объясняющее, что он работает, а также с примечаниями о том, как проверить, что он работает. Если вы знаете более простой способ проверить соединение, чем тот, который я описал, это было бы здорово — мне пришлось использовать скрипт perl вместо netcat, потому что команда nc не была переработана на узле Jelastic.

toby-one 03.04.2019 22:23

@toby-one Вы можете использовать предустановленный SimpleHTTPServer. Запустите «python -m SimpleHTTPServer 7001» внутри необходимого каталога. Надеюсь это поможет.

Jelastic 05.04.2019 09:33
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
321
0

Другие вопросы по теме