Я пытаюсь запустить свой сайт nodejs на Oracle Cloud Compute VPS (навсегда бесплатно) с Ubuntu 18.04. (В данном случае очень важно, что это сервер Oracle). Я могу скрутить localhost (затем он возвращает HTML), но я не могу получить к нему доступ через общедоступный IP-адрес со своего компьютера.
Чтобы обойти sudo для порта 80, я применил:
sudo apt-get install libcap2-bin
sudo setcap 'cap_net_bind_service=+ep' `which node`
Он работает внутри:
pm2 start bin/www
│ id │ name │ mode │ ↺ │ status │ cpu │ memory │
├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤
│ 0 │ www │ fork │ 496 │ online │ 0% │ 15.5mb |
pm2 log
не возвращает ошибок.
sudo netstat -tulpn | grep 80
возвращает:
tcp6 0 0 :::80 :::* LISTEN 26444/node /opt/por
Если вы думаете, что нет, он работает на ipv6, вы должны добавить listen (port, 0.0.0.0) в nodejs, я пробовал, затем он возвращает это ниже и по-прежнему имеет ту же проблему:
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 26487/node /opt/por
curl localhost
возвращает мою домашнюю страницу html. Доступ к нему через общедоступный IP-адрес в браузере моего компьютера является проблемой, поэтому проблема где-то в брандмауэре, созданном Oracle.
Я обнаружил, что Oracle установила некоторые правила iptables. Некоторые люди просто говорят: отключите их все, но я считаю это немного рискованным для безопасности. Поэтому я хочу открыть только нужный мне порт (порт 80). Поэтому я пробовал почти все команды, которые мог найти для этого (приведенные ниже и многие другие, которые я не могу вспомнить).
sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
iptables -I INPUT 5 -i ens3 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
sudo netfilter-persistent save
Мои текущие таблицы iptables доступны по адресу: sudo iptables -L -n -v https://pastebin.com/ibqWUqjA
Таблицы IP-адресов NAT доступны по адресу: sudo iptables -t nat -L -n -v https://pastebin.com/QGxdTsJ1 < / а>
Должен сказать, я не специалист по нетворкингу. Я просто знаю, как настроить базовый сервер NodeJs на сервере, отличном от Oracle Cloud (мой малиновый пирог дома, с конфигурациями в моем модеме). Так что я не имел дела с iptables и продвинутыми облачными средами в такой степени. Я попытался прочитать тему iptables, просмотрев видео, и среду Oracle на: https://docs.oracle.com/en-us/iaas/Content/Network/Tasks/managingpublicIPs.htm Однако я должен сказать, что это довольно большая информационная перегрузка. По ссылке написано:
- Экземпляр должен находиться в общедоступной подсети. (проверить)
- Экземпляр должен иметь общедоступный IP-адрес. (также проверьте)
- VCN экземпляра должен иметь интернет-шлюз. (А что? Я не могу понять, как это проверить или сделать это. Даже после дополнительного чтения).
- В общедоступной подсети должны быть настроены таблицы маршрутизации и списки безопасности. (Думаю, я пробовал ??)
В одном сообщении stackoverflow, которое я обнаружил с точно такой же проблемой, говорится: я использую облако Oracle. Я проверю настройки брандмауэра вне сервера. ... Спасибо. Проблема заключалась в настройке брандмауэра самого сервера Oracle. Проблема решена (Nodejs в Linux недоступен вне сервера) Но он делает не скажу где :(. Я много искал это, но не нашел варианта.
Может ли кто-нибудь указать мне правильное направление?