Не удается получить доступ к веб-серверу Express, работающему на сервере Ubuntu, из внешнего мира - PullRequest
0 голосов
/ 28 августа 2018

Это, вероятно, одна из самых распространенных проблем в StackOverflow, но я попробовал все, что я знаю, чтобы попробовать.

Я только что купил свое первое доменное имя с намерением запустить веб-сайт на Linode. Мой публичный IP-адрес Linode 45.79.142.131. Просто чтобы проверить, что все работает, я настроил простой веб-сервер Express, который обслуживает простой Hello, World. Код сервера:

const express = require('express')
const app = express()

app.get('/', (req, res) => res.send('Hello World!'))

app.listen(80, () => console.log('Example app listening on port 80!'))

Чтобы разрешить Express связывать порт 80 (примечание: я не буду делать это для реального развертывания; это просто грязный тест), я использую следующую команду:

$ sudo node server-80.js 
Example app listening on port 80!

Если я использую curl локально на сервере, я получаю ответ:

$ curl 45.79.142.131:80
Hello World!

Однако, если я использую веб-браузер или свернусь извне, сервер не дает ответ.

$ curl 45.79.142.131:80
curl: (7) Failed to connect to 45.79.142.131 port 80: Operation timed out

Моим первым предположением было, что брандмауэр блокирует мой внешний запрос. Я использую ufw для управления брандмауэром. Я использовал `` для разрешения запросов на порт 80. Я также разрешил ssh, https и фиктивный порт 3000. Я также перезагрузил брандмауэр, используя sudo ufw reload.

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere                  
80/tcp                     ALLOW       Anywhere                  
443/tcp                    ALLOW       Anywhere                  
3000/tcp                   ALLOW       Anywhere                  
22/tcp (v6)                ALLOW       Anywhere (v6)             
80/tcp (v6)                ALLOW       Anywhere (v6)             
443/tcp (v6)               ALLOW       Anywhere (v6)             
3000/tcp (v6)              ALLOW       Anywhere (v6)  

Запуск nmap локально на сервере обеспечивает следующий вывод:

$ nmap localhost -Pn

Starting Nmap 7.60 ( https://nmap.org ) at 2018-08-27 22:12 EDT
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00027s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 998 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 0.13 seconds

Казалось бы, порт 80 открыт. Однако, если я запускаю nmap извне (то есть на моем Mac), я не вижу порт 80 открытым.

$ nmap 45.79.142.131 -Pn
Starting Nmap 7.70 ( https://nmap.org ) at 2018-08-27 22:14 EDT
Nmap scan report for li1241-131.members.linode.com (45.79.142.131)
Host is up (0.096s latency).
Not shown: 999 filtered ports
PORT   STATE SERVICE
22/tcp open  ssh

Nmap done: 1 IP address (1 host up) scanned in 47.51 seconds

Я в растерянности. Я действительно не знаю, что здесь происходит. Что еще более странно, так это то, что если я запускаю свой веб-сервер Express на порту 3000 (и sudo ufw allow 3000/tcp), все работает безупречно. Я могу получить ответ от веб-сервера. В порте 80 есть что-то конкретное, что идет не так. Похоже, что брандмауэр блокирует мои запросы, но я специально добавил исключение для порта 80.

Если есть какие-либо журналы или дополнительная информация, которая поможет в диагностике проблемы, я с радостью поделюсь этим.

1 Ответ

0 голосов
/ 28 августа 2018

Я бездумно сбросил свой iptables после установки ufw для запрета входящего трафика по умолчанию. Это убило мое ssh соединение. Я полностью перестроил свой экземпляр Ubuntu с нуля. Когда пришло время настроить мой брандмауэр на ufw, я разрешил только ssh и http/tcp. К счастью, все работает, как и ожидалось! Я могу получить доступ к своему фиктивному веб-серверу через порт 80.

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

...