我试图在包含iframe的页面中调试问题。为父页面提供服务的网站是我正在处理的代码,我可以轻松地在本地运行,但iframe的内容来自我无法访问的代码。有一些保护阻止跨域iframing,这在生产中不会成为问题,因为它们会在同一个域上运行。但是,我需要在本地调试一些东西,所以我使用Apache代理网站。
此外,我所使用的内部网络使用Apache必须考虑的代理。
到目前为止我的apache配置:(注意我完全厌倦了apache配置)
RewriteEngine on
RewriteRule ^/(.+)\.aspx(.*)$ https://www.example.com/$1.aspx$2 [PT,L]
RewriteRule ^/(.+)\.aspx$ https://www.example.com/$1.aspx [PT,L]
RewriteRule ^/static/(.+)$ https://www.example.com/static/$1 [PT,L]
RewriteCond %{SERVER_PORT} !^8080$
RewriteRule ^(.*) http://%{SERVER_NAME}:8080%{REQUEST_URI} [P,L]
#SSLProxyEngine On
ProxyRequests On
ProxyRemote http://www.example.com http://pac.group.intranet:8080
ProxyRemote https://www.example.com http://pac.group.intranet:8080
aspx
和/static/
内容是我尝试在此处代理的其他网站。我自己的网站在端口8080上运行。
我目前在看起来完全正常的请求上获得Invalid URI in request
。在某些时候它似乎接受了我的请求,然后它抱怨了SSL,所以我添加了SSLProxyEngine On
。它目前处于关闭状态,不会产生SSL错误,因此很明显问题就出现在此之前。
我添加SSLProxyEngine On
之后,除了我还没有为其他网站代理静态资源之外,它基本上有效。所以我添加了/static/
行,然后我遇到了当前的问题。
我已经花了太多时间在这上面,我只是无法弄明白。我找不到任何明确的示例或教程来解释如何执行此操作。这似乎是一件显而易见的事情,但我无法让它发挥作用。但删除它现在不会解决它。基本上,Apache似乎完全无法预测。我不太了解这一点,以了解原因。
知道造成这个问题的原因是什么以及如何最终让它发挥作用?
我在Windows上使用XAMPP 3.2.1。
记录详细信息:
[Thu Jun 19 14:25:38.879301 2014] [ssl:warn] [pid 3248:tid 220] AH01909: RSA certificate configured for www.example.com:443 does NOT include an ID which matches the server name
[Thu Jun 19 14:25:38.924310 2014] [core:warn] [pid 3248:tid 220] AH00098: pid file C:/Workset/tools/xampp/apache/logs/httpd.pid overwritten -- Unclean shutdown of previous Apache run?
[Thu Jun 19 14:25:39.262377 2014] [ssl:warn] [pid 3248:tid 220] AH01909: RSA certificate configured for www.example.com:443 does NOT include an ID which matches the server name
[Thu Jun 19 14:25:39.309387 2014] [mpm_winnt:notice] [pid 3248:tid 220] AH00455: Apache/2.4.4 (Win32) OpenSSL/0.9.8y PHP/5.4.19 configured -- resuming normal operations
[Thu Jun 19 14:25:39.309387 2014] [mpm_winnt:notice] [pid 3248:tid 220] AH00456: Server built: Feb 23 2013 13:07:34
[Thu Jun 19 14:25:39.309387 2014] [core:notice] [pid 3248:tid 220] AH00094: Command line: 'c:\\workset\\tools\\xampp\\apache\\bin\\httpd.exe -d C:/Workset/tools/xampp/apache'
[Thu Jun 19 14:25:39.310387 2014] [mpm_winnt:notice] [pid 3248:tid 220] AH00418: Parent: Created child process 7668
[Thu Jun 19 14:25:40.066538 2014] [ssl:warn] [pid 7668:tid 232] AH01909: RSA certificate configured for www.example.com:443 does NOT include an ID which matches the server name
[Thu Jun 19 14:25:40.441613 2014] [ssl:warn] [pid 7668:tid 232] AH01909: RSA certificate configured for www.example.com:443 does NOT include an ID which matches the server name
[Thu Jun 19 14:25:40.489623 2014] [mpm_winnt:notice] [pid 7668:tid 232] AH00354: Child: Starting 150 worker threads.
[Thu Jun 19 14:25:43.904305 2014] [core:error] [pid 7668:tid 1680] [client ::1:56999] AH00126: Invalid URI in request GET /foo/search/welcome.aspx?ask=bar HTTP/1.1
[Thu Jun 19 14:26:00.705665 2014] [core:error] [pid 7668:tid 1680] [client ::1:57001] AH00126: Invalid URI in request GET /foo/search/welcome.aspx?ask=bar HTTP/1.1
答案 0 :(得分:1)
我终于开始工作了,我在这里为后人分享解决方案:
ProxyPassMatch ^(/.+)\.aspx(.*)$ https://www.example.com$0
ProxyPass /static https://www.example.com/
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
SSLProxyEngine On
ProxyRequests On
ProxyRemote http://www.example.com http://pac.group.intranet:8080
ProxyRemote https://www.example.com http://pac.group.intranet:808
实际上,这种方式更加清洁。不依赖于重写规则并且使用ProxyPassMatch
作为regexp基本上是解决方案的核心。