Apache HTTP 到 HTTPS 代理重定向多个地址

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 条目。这个想法是,当用户使用不同的端口或不同的域时,它应该将他们重定向到不同的应用程序端口。

我尝试在这里搜索并尝试了多种设置,但无法让它以这种方式工作。

答案1

您可以VirtualHost为同一个端口定义多个,只需为每个端口设置不同的 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 来区分它们。

相关内容