сервер экспресс-демонстрации не получает запрос на порт 80 - PullRequest
0 голосов
/ 15 октября 2019

Я пытаюсь создать Node-сервер с экспрессом. Я сделал следующее:

npm init
npm i express

и скопировал этот пример кода из Express:

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

app.get('/', function (req, res) {
  res.send('Hello World!')
})

app.listen(80, function () {
  console.log('Example app listening on port 80!')
})

На локальном хосте это работает. На моем VPS из OVH я получил эту проблему , которую я решил:

setcap 'cap_net_bind_service=+ep' $(which node)

У меня также есть следующая конфигурация брандмауэра:

# Vider les tables actuelles
iptables -t filter -F

# Vider les règles personnelles
iptables -t filter -X

# Interdire toute connexion entrante et sortante
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP

# ---

# Ne pas casser les connexions etablies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# Autoriser loopback
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT

# ICMP (Ping)
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT

# ---

# SSH In
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT

# SSH Out
iptables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT

# DNS In/Out
iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT

# NTP Out
iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT

# HTTP + HTTPS Out
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT

# HTTP + HTTPS In
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT

# FTP Out
iptables -t filter -A OUTPUT -p tcp --dport 20:21 -j ACCEPT

# FTP In
modprobe ip_conntrack_ftp # ligne facultative avec les serveurs OVH
iptables -t filter -A INPUT -p tcp --dport 20:21 -j ACCEPT
iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

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

Но netstat -tulpn | grep LISTEN говорит мне, что узелпрослушивание порта 80 ...

Если я все делаю на порту 3000, все работает нормально ...

У меня есть Node версия 12.11.1.

У меня абсолютноПонятия не имею, что делать дальше, чтобы понять проблему ...

1 Ответ

0 голосов
/ 15 октября 2019

Порт 80 является портом по умолчанию для HTTP-запросов, поэтому при попытке получить доступ к веб-сайту через порт 80 может возникнуть конфликтная проблема, учитывая, что этот порт уже может использоваться.

Существует множество причин, по которым веб-сервер не запускается через порт 80. Одна из них заключается в том, что в случае компрометации процесса вашего узла у него будет доступ к командам sudo на вашем сервере. Как правило, вы не должны запускать что-либо как root на порту 80, однако использование обратного прокси-сервера и nginx могут использовать порт 80, если они имеют правильный стартовый код для привязки к порту с использованием пониженных разрешений.

Если вы создаете демонстрационное приложение, держитесь подальше от запуска экспресс-сервера на порте 80 или на порту 443, чтобы поддерживать лучшие практики. Порт 3000 будет в порядке, и все должно быть в порядке.

Не уверен, где вы нашли пример кода, но в экспресс-документации рекомендуется использовать порт 3000 в примере hello world.

https://expressjs.com/en/starter/hello-world.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...