如何通过 https 隧道传输两个 URL(不同端口)?

如何通过 https 隧道传输两个 URL(不同端口)?

我有一个在 1337 上运行的 http 服务器。

另一个 http 服务器在 4040 上运行。

要求:我正尝试使用 https 在端口 443 上为它们建立隧道阿帕奇2

我已经成功了(我认为) 在端口 1337 上建立服务器隧道,我可以毫无问题地看到内容。

以下是我的 vhost 配置

<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)

答案1

当使用 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。

相关内容