
Я использовал Shared хостинг для размещения своего сайта. Я хочу развернуть приложение PHP WebSocket, созданное с помощью Ratchet PHP. Поэтому я хочу, чтобы оно прослушивало порт 9000.
Когда я запустил команду php server.php
в своем доступе SSH, он показывает, что сервер запущен и прослушивает domain.com:9000. Но в моем приложении чата это занимает некоторое время, а затем выдает:
Firefox не может установить соединение с сервером по адресу ws://domain.com:9000/
Также я проверил, telnet domain.com 9000
какие результаты
Не удалось открыть соединение с хостом на порту 9000: подключение не удалось.
Я связался со службой поддержки по этому поводу, они говорят
Ваш порт 9000 открыт для исходящих подключений.
Как проверить, открыт ли мой порт? А также, если открыт, почему он не прослушивает соединения, установленные веб-браузером как клиент-сервер?
решение1
Ваш порт 9000 открыт для исходящих подключений.
Но это не то, что вы пытаетесь сделать. Вы пытаетесь сделатьвходящийсоединение с сервером, а не исходящее соединение с сервера.
Как проверить, открыт ли мой порт?
Обратитесь к хостинг-провайдеру и дайте ясно понять, что вы хотите настроитьслушательна порту 9000 в вашей учетной записи общего хостинга, а не для создания исходящих соединений.
На общем сервере хостинг-провайдер может вообще не разрешать входящие соединения или потребовать использовать определенный диапазон портов.
(Между тем, на частном/выделенном сервере единственными ограничениями являются те, которые вы установили самостоятельно на брандмауэре сервера, поэтому вам следует проверить правила брандмауэра — iptables, ufw, firewalld и т. д.)
решение2
Если у вас есть доступ по SSH в системе Linux, вы можете запросить правила брандмауэра с помощью iptables:
sudo iptables -S | grep ACCEPT
Если правило брандмауэра было изменено с помощью firewall-cmd
, вы можете запросить правила с помощью следующей команды:
sudo firewall-cmd --list-all
Для получения полной «карты» брандмауэра (полезно, если вам нужно понять, как настроены различные цепочки), вы можете выполнить следующую команду:
sudo iptables -L
решение3
Вот мой bash-скрипт для проверки открытых портов!
log_file=log_file
ip_list=("192.168.111.1" "192.168.111.2" "192.168.111.3")
#ip_list=$(cat ip_addr.txt) #put all ip in the text file
for ip in "${ip_list[@]}"
do
nc -z -w5 "$ip" 22
if [ $? -eq 0 ]; then
echo "$ip port 22 is open " >> $log_file
else
echo "SSH port 22 is not open on $ip"
fi
done
Чтобы проверить, открыт ли порт, используйте nc
команду check the port.