Есть ли способ предотвратить это, и только сделать https://control.example.com:2054/ , не позволяя https://example.com:2054/ получить доступ?
Да. Самый простой способ - использовать Nginx в качестве обратного прокси. Базовый обзор использования Nginx в этом качестве можно найти здесь.
Короче говоря, вы хотите настроить два серверных блока, как показано ниже:
# Block access to example.com:2054, assuming Nginx is servicing that port.
#
server {
listen 2054;
server_name example.com;
# 404 - Not Found is returned, but 403 - Forbidden is another option
location / {
return 404;
}
}
# another (unblocked) virtual host on the same port e.g. control.example.com:2054
#
server {
listen 2054;
server_name control.example.com;
# Proxy our web data
location / {
proxy_pass http://10.0.0.10:3005;
}
}
В этом примере предполагается, что используются два разных порта, поскольку с этой настройкой легко работать. Порт, к которому вы хотите получить публичный доступ к службе, должен быть перенаправлен, а внутренний (фактический) порт службы - нет. IP-адрес proxy_pass
должен (очевидно) быть IP-адресом ПК, на котором запущена служба, к которой вы хотите получить доступ.
Если вышеприведенное решение вам не подходит, учтите, что вы можете что-то сделать с iptables или аналогичным.