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

Apache HTTP на прокси HTTPS Перенаправление нескольких адресов

Мне нужна ваша помощь.

У меня на машине 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. Идея состоит в том, что когда пользователи используют другой порт или другой домен, он должен перенаправить их на другой порт приложения.

Я пробовал искать здесь, пробовал несколько настроек и не могу заставить его работать таким образом.

Вы можете определить несколько VirtualHosts для одного и того же порта, вам просто нужно установить разные директивы 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.