Откройте порт 443 для узла веб-приложения
Я пытался запустить веб-приложение узла на порту 443, но я получаю этот вывод Ошибка: прослушать EACCES 0.0.0.0:443
Уже пробовал ufw разрешить 443/tcp, но nmap все еще не показывает 443 как открытый порт.
Также пробовал sudo iptables -A INPUT -p tcp --dport 443 -j ПРИНЯТЬ безуспешно.
Любая помощь будет оценена.
3 ответа
Спасибо @exore, я решил проблему с
sudo setcap 'cap_net_bind_service=+ep' $(readlink -f $(какой узел))
Проблема заключалась в ручной установке файла node.js. По умолчанию это происходит в последней версии Ubuntu, но я этого не знал и снова установил через терминал.
Вы можете пойти сюда для всей дискуссии.
https://gist.github.com/firstdoit/6389682
С Уважением,
EACCES означает, что запрещено прослушивать порт 443. Это потому, что вы не запускаете свое приложение от имени пользователя root. Порты ниже 1024 являются зарезервированными портами, и только root может использовать их.
Попытка изменить правила брандмауэра не имеет никакого эффекта. межсетевой экран пропускает пакеты или останавливает их. Это не позволяет кому-либо слушать какой-либо конкретный порт.
Решение: запустите ваш код с помощью sudo. но это угроза безопасности. Таким образом, ваше приложение должно переключиться на другого пользователя (или найти какой-то другой механизм, о котором я не знаю, чтобы сбросить привилегии) как можно скорее, сразу после успешного прослушивания.
Поскольку это сложно, хорошее решение
- ваше приложение прослушивает петлевой интерфейс на непривилегированном порту, например, 127.0.0.1:10443
- Вы настраиваете веб-сервер на запросы прокси от 0:443 до 127.0.0.1:10443. На ум приходит nginx, но многие другие серверы пригодны для этой задачи. Просто выберите свой любимый.
Если вы хотите использовать SSL на порте 443, как это обычно бывает, вам следует также установить сертификаты (создать самозаверяющий сертификат или купить его или еще лучше, получить бесплатный сертификат от Let's encrypt), настроить протоколы, доступные шифры и т. Д... Это тоже сложно.
Пример минимального конфигурационного файла nginx, который нуждается в улучшении и должен работать (сейчас не могу протестировать):
server {
server_name me.example.com;
listen 0.0.0.0:443 ssl;
ssl_certificate /etc/mycerts/fullchain.pem;
ssl_certificate_key /etc/mycerts/privkey.pem;
ssl_session_timeout 30m;
ssl_session_cache shared:SSL:400k;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
server_tokens off;
charset utf-8;
location / {
proxy_pass http://127.0.0.1:10443/;
}
}