Apache-2.4

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

  • January 6, 2020

我需要你的幫助。

我在 Linux 機器上執行了 2 個版本的應用程序。版本 1 在 localhost 埠 5000 上執行,版本 2 在 localhost 埠 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 允許在同一埠上創建兩個 VirtualHost,並通過已設置的 ServerName 來區分它們。

引用自:https://serverfault.com/questions/997704