Apache-2.4
Apache HTTP 到 HTTPS 代理重定向多個地址
我需要你的幫助。
我在 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 條目。這個想法是,當使用者使用不同的埠或不同的域時,它應該將他們重定向到不同的應用程序埠。
我嘗試在這裡搜尋並嘗試了多種設置,但無法使其以這種方式工作。
您可以為同一個埠定義多個
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 允許在同一埠上創建兩個 VirtualHost,並通過已設置的 ServerName 來區分它們。