Мне нужна ваша помощь.
У меня на машине Linux работает 2 версии приложения. Версия 1 работает на локальном порту 5000, версия 2 работает на локальном порту 5001.
Мне нужно, чтобы пользователи имели доступ к любой из версий приложения в зависимости от URL-адреса, который они используют.
Мой существующий Apache httpd.conf выглядит следующим образом:
Когда пользователи вводят http: /my.company.com, он перенаправляет их на HTTPS-порт 443, а порт 443 - на localhost 5000. Это работает.
<VirtualHost *:80>
ServerName my.company.com
Redirect / https://my.company.com/
</VirtualHost>
<VirtualHost *:443>
ServerName my.company.com/
TimeOut 600
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / http://localhost:5000/
ProxyPassReverse / http://localhost:5000/
SSLEngine on
SSLOptions +StrictRequire
SSLCertificateFile /etc/pki/tls/certs/my.company.crt
SSLCertificateKeyFile /etc/pki/tls/private/my.company.key
</VirtualHost>
Теперь мне нужно сделать так, чтобы пользователи вводили http://my.company.com:15000 он перенаправляет их на какой-то порт HTTPS, который перенаправляет на localhost 5001, где мое приложение прослушивает.
Если есть другой способ сделать это, например, использовать другое доменное имя, например my-v2.company.com, он также будет работать. Я могу создать новую запись DNS. Идея состоит в том, что когда пользователи используют другой порт или другой домен, он должен перенаправить их на другой порт приложения.
Я пробовал искать здесь, пробовал несколько настроек и не могу заставить его работать таким образом.
Вы можете определить несколько VirtualHost
s для одного и того же порта, вам просто нужно установить разные директивы ServerName для каждого.
Если вы хотите, чтобы my.company.com был приложением на порту 5000, а my-v2.company.com был приложением на порту 5001, я бы посоветовал вам использовать такую конфигурацию:
# Enable name-based routing on port 80 and port 443
NameVirtualHost *:80
NameVirtualHost *:443
# Redirect HTTP -> HTTPS on my.company.com
<VirtualHost *:80>
ServerName my.company.com
Redirect / https://my.company.com/
</VirtualHost>
# Redirect HTTP -> HTTPS on my-v2.company.com
<VirtualHost *:80>
ServerName my-v2.company.com
Redirect / https://my-v2.company.com/
</VirtualHost>
# Serve the application on port 5000 to https://my.company.com
<VirtualHost *:443>
ServerName my.company.com
TimeOut 600
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / http://localhost:5000/
ProxyPassReverse / http://localhost:5000/
SSLEngine on
SSLOptions +StrictRequire
SSLCertificateFile /etc/pki/tls/certs/my.company.crt
SSLCertificateKeyFile /etc/pki/tls/private/my.company.key
</VirtualHost>
# Serve the application on port 5001 to https://my-v2.company.com
<VirtualHost *:443>
ServerName my-v2.company.com
TimeOut 600
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / http://localhost:5001/
ProxyPassReverse / http://localhost:5001/
SSLEngine on
SSLOptions +StrictRequire
SSLCertificateFile /etc/pki/tls/certs/my-v2.company.crt
SSLCertificateKeyFile /etc/pki/tls/private/my-v2.company.key
</VirtualHost>
Настоящее волшебство в этом ответе - это первые две строки, которые говорят Apache разрешить создание двух VirtualHosts на одном и том же порту и различать их по заданному ServerName.