Назад | Перейти на главную страницу

Как скрыть указанный порт из URL-адреса?

У меня есть один сервер example.com, и у меня есть еще один example.com:10001.
Когда пользователи пытаются достичь example.com:10001 они заканчивают example.com:10001/index.php/login так и должно быть.

Есть ли правило перезаписи, чтобы скрыть 10001 порт так выглядит example.com/index.php/login?

Краткий ответ: нет. Браузер - это то, что скрывает порт от пользователей; когда вы используете http, он автоматически принимает порт 80, а когда вы используете https, он принимает порт 443, скрывая эти порты от пользователя. При использовании любого нестандартного порта большинство браузеров отображают этот порт как часть адреса.

Однако, если я правильно понимаю вашу проблему, есть несколько способов разместить несколько сайтов на одном IP. Вместо использования другого порта вы можете использовать субдомен (myothersite.example.com) или путь ниже example.com, например example.com/mysite2.

Детали этого комментария предполагают, что example.com A указывает на общедоступный IP-адрес, а серверы находятся за NAT с переадресацией портов на два сервера:

Проблема в том, что сайт, использующий порт 10001 размещен на другом сервере. В example.com является 172.31.1.10 и example.com:10001 является 172.31.1.11.

Ты мог бы иметь

  • обратный прокси на вашем 172.31.1.10:80, проксирование запросов на 172.31.1.11:10001. Поскольку сервером является Apache 2.4, правильная документация: Модуль Apache mod_proxy.

  • новый прокси-сервер слушает внешний example.com:80 с обратными прокси для обоих 172.31.1.10:80 и 172.31.1.11:10001 (или любой другой внутренний порт этого другого сервера). Nginx станет для этого эффективной альтернативой. Документация: Обратный прокси NGINX.

В обоих случаях обратный прокси-сервер необходимо настроить как подпапку или поддомен.

Если я понимаю ваш вопрос, вы можете сделать это с помощью флага [P] модуля mod_rewrite:

RewriteRule "/(.*)" http://example.com":10001/$1" [P]

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