«Недопустимый URI в запросе» пытается проксировать содержимое iframe для локальной отладки

#apache #proxy

#apache #прокси

Вопрос:

Я пытаюсь отладить проблему на странице, содержащей iframe. Сайт, обслуживающий родительскую страницу, — это код, над которым я работаю, который я могу легко запустить локально, но содержимое iframe происходит из кода, к которому у меня нет доступа. Существует некоторая защита, блокирующая междоменное создание iframe, что не будет проблемой в производстве, потому что там они будут работать в одном домене. Однако мне нужно что-то отлаживать локально, поэтому я использую 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, похоже, действует совершенно непредсказуемо. Я не понимаю этого достаточно хорошо, чтобы понять, почему.

Есть идеи, что вызывает эту проблему и как, наконец, заставить ее работать?

Я использую XAMPP 3.2.1 в Windows.

Сведения о журнале:

 [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
  

Комментарии:

1. Показывает ли ваш журнал ошибок apache что-нибудь говорящее? Я не уверен, что там даже сообщается об ошибках уровня apache, подумал, что это первое, на что я бы посмотрел, если бы у меня возникла проблема.

2. Если ваш проект находится в стадии разработки, используйте http. Возможно, что-то, что вы делаете, или что-то, что выполняет загруженный контент, требует https, а другая часть предоставляет http.

3. В журнале ошибок apache говорится [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:

Я наконец-то заработал, и я делюсь решением здесь для потомков:

 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 для регулярного выражения — это, по сути, ядро решения.