Подтвердить что ты не робот

Не удается открыть порт 8080 на Google Compute Engine, на котором запущен Debian

Я пытаюсь запустить простой http-сервер Python, который отображает "hello world" на порту 8080, используя микроэкземпляр. У меня также есть 4 экземпляра Торнадо, бегущих за Nginx. Подключение к Nginx/Tornado через порт 80 не является проблемой.

Я добавил порт 8080 в настройки брандмауэра и убедился, что порт 8080 открыт и прослушивает сервер, но независимо от того, что я делаю, мое соединение всегда отклоняется. Я попытался подключиться с помощью браузеров, telnet и wget, и в каждом подключении отказано.

Вот вывод команды netstat -an | grep "LISTEN " netstat -an | grep "LISTEN "

tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:8001            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:8002            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:8003            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp6       0      0 :::8000                 :::*                    LISTEN
tcp6       0      0 :::8001                 :::*                    LISTEN
tcp6       0      0 :::8002                 :::*                    LISTEN
tcp6       0      0 :::8003                 :::*                    LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN

Вот мой список iptables

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http-alt

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Вот скрипт Python, который я использую:

#!/usr/bin/python
from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer

PORT_NUMBER = 8080

#This class will handles any incoming request from
#the browser
class myHandler(BaseHTTPRequestHandler):

   #Handler for the GET requests
   def do_GET(self):
      self.send_response(200)
      self.send_header('Content-type','text/html')
      self.end_headers()
      # Send the html message
      self.wfile.write("Hello World!")
      return

try:
   #Create a web server and define the handler to manage the
   #incoming request
   server = HTTPServer(('', PORT_NUMBER), myHandler)
   print 'Started httpserver on port ' , PORT_NUMBER

   #Wait forever for incoming htto requests
   server.serve_forever()

except KeyboardInterrupt:
   print '^C received, shutting down the web server'
   server.socket.close()
4b9b3361

Ответ 1

Имеется ли в вашей сети соответствующее правило брандмауэра? Следуйте следующим шагам, чтобы создать его.

  • Перейдите в Консоли разработчиков и нажмите на соответствующий проект.

  • Нажмите "Вычислить"

  • Нажмите "Сети"

  • Нажмите на название соответствующей сети. Вы можете видеть, в какой сети ваш экземпляр нажимает на "экземпляры виртуальной машины" в разделе "Вычислительный двигатель" или с помощью команды:

    gcloud compute instances describe <instance> | grep "network:" | awk -F/ '{print $(NF)}'

  • В разделе правил брандмауэра нажмите "Создать новый"

  • Введите имя правила брандмауэра и в поле "Протоколы и порты": tcp: 8080

  • Сохранить правило

После этого вы сможете получить доступ к своему HTTP-серверу.

В противном случае вы можете попытаться выяснить, получает ли ваш компьютер пакеты SYN TCP в этом порту с помощью команды: sudo tcpdump -i eth0 port 8080

Надеюсь, что это поможет

Ответ 2

В GCE Web Console > Сети > Правила брандмауэрa > отредактируйте свое ПРАВИЛО, удалите TARGET TAGS и примените.

GL

Ответ 3

Не уверен, что пошло не так, но я удалил свой экземпляр и сеть, а затем создал новые. Новый экземпляр и сеть, похоже, работают нормально, поэтому я могу только предположить, что что-то пошло не так, когда вы играете со старой сетью, поскольку новая, похоже, не имеет такой же проблемы.

Ответ 4

возможно, что-то не так, когда вы создали сетевое правило. Когда описывается сетевое правило и создается связанный с ним MetaTag, убедитесь, что экземпляры виртуальных машин содержат один и тот же MetaTag, поэтому требуемый трафик будет перенаправлен на компьютер.

Ответ 5

обязательно добавьте правильный порт. в ответе выше указано "tcp: 80", но это не сработает, если ваш сервер работает на другом порту. вероятно, причина, по которой она не работает для других.

Ответ 6

В основном для тех, кто ищет пошаговое наглядное руководство: следуйте этой минутной видеозаписи. https://www.youtube.com/watch?v=JmjqPpQdtW8