我有一个在 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。