Apache-2.2

如何通過https隧道兩個url(不同的埠)?

  • August 4, 2016

我有一台在 1337 上執行的 http 伺服器。

另一個執行在 4040 上的 http 伺服器。

要求:我正在嘗試使用apache2通過埠 443 上的 https 對它們進行隧道傳輸

我已經成功(我認為)在埠 1337 上為伺服器建立隧道,我可以毫無問題地看到內容。

以下是我的虛擬主機配置

<IfModule mod_ssl.c>
<VirtualHost _default_:443>
   ServerAdmin webmaster@localhost
   ServerName 127.0.0.1
   DocumentRoot /var/www/html



   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined


   SSLEngine on


   SSLCertificateFile  /etc/apache2/ssl/apache.crt
   SSLCertificateKeyFile /etc/apache2/ssl/apache.key
   ProxyPreserveHost On

   ProxyPass /parse http://localhost:1337/

   ProxyPassReverse / http://localhost:1337/


   <FilesMatch "\.(cgi|shtml|phtml|php)$">
           SSLOptions +StdEnvVars
   </FilesMatch>
   <Directory /usr/lib/cgi-bin>
           SSLOptions +StdEnvVars
   </Directory>

   BrowserMatch "MSIE [2-6]" \
           nokeepalive ssl-unclean-shutdown \
           downgrade-1.0 force-response-1.0

   BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

</VirtualHost>

現在我也想添加 4040,所以它是安全的,但是當我添加另一個

proxyPass /dashboard http://127.0.0.1:4040/

問題它不能正常工作。它只呈現頁面標題和圖示。

我可能做錯了整個反向代理的事情,感謝任何解釋!

(作業系統:Ubuntu 14.04)

使用 proxypass 時,您需要來回匹配斜杠,也就是說,如果您不以斜杠結尾,並且要轉發的源 URI 不應該以 / 目標結尾,依此類推。

唯一的例外是http://localhost:1337等價於http://localhost:1337/所以你永遠不應該這樣做:( ProxyPass /parse http://localhost:1337或以其他方式期待意外)

所以做你的ProxyPass的正確方法是:

ProxyPass /parse/ http://localhost:1337/
ProxyPass /dashboard/ http://127.0.0.1:4040/

這主要是為什麼您的 proxypass 指令現在工作不規律。考慮到您應該考慮的其他因素,主要取決於“後端”響應,但要正確進行基本轉發,請始終記住匹配斜杠。

旁注:如果您需要 /parse 在這種情況下工作,您可以重定向到正確的路徑:RedirectMatch ^/parse /parse/或您需要的任何 URI。

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