ProxyPass中从httpredirect到https

这是场景:

我有一个只能通过一个url访问的linux服务器(因为服务器是虚拟机中的虚拟机):

url: http : //foo.bar.com

我有几个networking应用程序可以这样访问:

foo.bar.com/java_app =>安装在tomcat中的java wep应用程序

foo.bar.com/webpage =>安装在apache服务器上的网页

  • Linux服务器有一个apache2服务器,它允许我使用几个configuration文件来创build虚拟主机来完成上一个问题:

注意:myhost => localhost

ProxyPreserverHost On <VirtualHost *:80> ServerName foo.bar.com DocumentRoot /var/www/webpage JkMountCopy On SSLProxyEngine On ProxyPass /java_app http://myhost:8080/java_app ProxyPassReseverse /java_app http://myhost:8080/java_app #This uses the DocumentRoot ProxyPass /webpage http://myhost:80/ ProxyPassReseverse /webpage http://myhost:80/ </VirtualHost> 

问题是我有另外一个node.js里的软件可以通过这个URL访问:

  https://myhost:8061. (a webpage too). 

解决scheme可能是添加这些行:

  ProxyPass /ssl_app https://myhost:8061/ ProxyPassReseverse /ssl_app https://myhost:8061/ 

但是这个失败了。 问题是,网页(JS,CSS,其他文件)的文件(来源)没有正确加载,相应的Web应用程序也是如此。 (火狐)

例如在“foo.bar.com/ssl_app”里面,我可以看到源代码的URL,这些必须是这样的:

foo.bar.com/ssl_app/js/one.js foo.bar.com/ssl_app/js/two.js foo.bar.com/ssl_app/css/css.js

不过我这样获得:

foo.bar.com/js/one.js foo.bar.com/js/two.js foo.bar.com/css/css.js

(redirectfoo.bar.com/ssl_app => foo.bar.com/)

显然,networking应用程序不起作用。

因此,如果我直接把foo.bar.com/css/css.js文件显示正确。

日志详情:

 *** File does not exist: /var/www/webpage/lib, refere http://foo.bar.com/ssl_app 

我认为这是为DocumentRoot(/ var / www / webpage /),但我怎样才能创build一个新的VirtualHost具有相同的ServerName?

任何人都可以说我能看到在Apacheconfiguration?

谢谢。

您似乎认为ProxyPassReverse也会修改后端提供的内容中的URL。 这是不正确的。 ProxyPassReverse将仅在您的后端服务器(您的“ssl_app”)发送redirect时使用。 内容本身没有感动。

你有几个select:

  • 修改你的“ssl_app”,以便为它的资源使用正确的基本URL。 这是最好的解决scheme。
  • 在将其转发给客户端之前,使用mod_proxy_html修改后端服务的html。

您可能需要启用

 SSLProxyEngine On 

通过HTTP请求代理SSL。

请参阅: 使用SSL的Apache ProxyPass

问题是我的“ssl_app”是一个使用websockets的web应用程序。 Apache不支持networking套接字,所以我需要search一种方式来“redirect”与WebSockets(与https://github.com/kawasima/mod_proxy_websocket )的应用程序或更改与Nginx的HTTP服务器(Nginx兼容WebSockets )。