У меня есть один сервер 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 напрямую.