HTTP & HTTPS Apache 重定向到內部 IP 虛擬機
這是我的基本設置:
路由器將埠的 80 和 443 轉發到執行 apache 的 Ubuntu Server 14.04。效果很好。
在 Ubuntu 伺服器上執行多個虛擬機 (QEMU/KVM)。虛擬機處於橋接模式,因此它們有自己的內部 IP 地址。
我想將子域的所有流量重定向到虛擬機進行處理。
前任:
sub1.example.com -> VM1
sub2.example.com -> VM2
sub3.example.com -> VM3
我希望將 ssl 請求轉發給 VM 進行處理。
目前,無論我嘗試什麼,我都會收到重定向循環或 ssl 錯誤。我可以讓非 ssl 工作,但我不確定如何設置 Ubuntu 伺服器來處理和轉發 HTTP 和 HTTPS 請求。
編輯:
這是我目前的虛擬主機文件:
<VirtualHost *:80> ServerName sub1.example.com ProxyPreserveHost On ProxyPass / http://192.168.1.78/ ProxyPassReverse / http://192.168.1.78/ </VirtualHost> <VirtualHost *:443> ServerName sub1.exmaple.com ProxyPreserveHost On ProxyPass / http://192.168.1.78/ ProxyPassReverse / http://192.168.1.78/ </VirtualHost>
我知道這是不正確的,但不知道該怎麼做。主伺服器將接收來自http://sub1.example.com和https://sub1.example.com的請求
編輯2:
我忘了提到我有這個為非 SSL 工作:
<VirtualHost *:80> ServerName zab.example.com # this forwards to my zabbix VM ProxyPreserveHost on ProxyPass / http://192.168.1.64/ ProxyPassReverse / http://192.168.1.64/ </VirtualHost>
這將接收對 zab.example.com 的傳入請求,並將它們轉發到位於 192.168.1.64 的 Zabbix VM。因此埠 80 重定向到 VM 執行良好。
謝謝你的幫助!
編輯3:
我仍然缺少一些東西(再次,我是新手:))
這是我所有的虛擬主機:
WAN -> 192.168.1.66(主伺服器)
<VirtualHost *:80> ServerName file.example.com redirect permanent / https://file.example.com/ </VirtualHost> <VirtualHost *:443> ServerName file.example.com SSLEngine On SSLCertificateFile /home/js/Seafile/file_ws_ee.crt SSLCertificateKeyFile /home/js/Seafile/file.example.com.key SSLCertificateChainFile /home/js/Seafile/GeoTrustDVSSLCAG4.cer SSLProxyEngine On ProxyPreserveHost off ProxyRequests off ProxyPass / http://file.example.com/ ProxyPassReverse / http://file.example.com/ </VirtualHost>
內部 VM 192.168.1.78(執行 Seafile)
<VirtualHost *:80> ServerName file.example.com redirect permanent / https://file.example.com/ </VirtualHost> <VirtualHost *:443> ServerName file.example.com DocumentRoot /var/www Alias /media /home/js/Seafile/seafile-server-latest/seahub/media SSLEngine On SSLCertificateFile /home/js/Seafile/file_ws_ee.crt SSLCertificateKeyFile /home/js/Seafile/file.example.com.key SSLCertificateChainFile /home/js/Seafile/GeoTrustDVSSLCAG4.cer RewriteEngine On <Location /media> Require all granted </Location> # # seafile fileserver # ProxyPass /seafhttp http://127.0.0.1:8082 ProxyPassReverse /seafhttp http://127.0.0.1:8082 RewriteRule ^/seafhttp - [QSA,L] # # seahub # RewriteRule ^/(media.*)$ /$1 [QSA,L,PT] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /seahub.fcgi/$1 [QSA,L,E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] </VirtualHost>
執行 wget file.example.com 會導致:
HTTP request sent, awaiting response... 301 Moved Permanently Location: https://file.example.com/ [following] 20 redirections exceeded.
想法?
試圖讓 apache 將 SSL 傳遞給另一個服務 SSL 的伺服器比它的價值更麻煩。你最好讓它在主 apache 伺服器上處理。這樣更容易。這是我為五個子域之一所做的範例。我已經刪除了與您的問題無關的任何額外配置選項。
<VirtualHost *:80> ServerAdmin example@gmail.com ServerName sentinel.example.net ServerAlias sentinel RewriteEngine On RewriteRule ^(.*) https://%{HTTP_HOST}/$1 </VirtualHost> <VirtualHost *:443> # SSL SSLEngine On SSLCertificateFile /etc/pki/tls//web/sentinel.pem SSLCertificateKeyFile /etc/pki/tls/web/sentinel.key SSLCertificateChainFile /etc/pki/tls/startssl/startssl.pem # Basics ServerAdmin example@gmail.com ServerName sentinel.example.net ServerAlias sentinel # Proxy ProxyPreserveHost Off ProxyRequests off SSLProxyEngine On ProxyPass / http://sentinel.example.net/ timeout=60 ProxyPassReverse / http://sentinel.example.net/ timeout=60 </VirtualHost>