我需要你的帮助。
我在 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 来区分它们。