Наша организация переделывает свой сайт. Кто-то создал новый сайт на новом сервере. Доступ к нему можно получить, поместив запись в / etc / hosts. И отлично работает при таком доступе.
Но поскольку большинство вовлеченных людей плохо разбираются в компьютерах, я решил установить обратный прокси.
У меня нет доступа ни к сайту, ни к серверу, на котором он находится. У меня там установлена учетная запись редактора Wordpress.
Я поместил запись в / etc / hosts моего частного сервера и настроил обратный прокси со следующей конфигурацией, на моем сервере запущен apache-2.2 в стабильной версии Debian:
<VirtualHost *:80>
ServerName xxx.xxx.xxx.xxx
ProxyRequests off
ProxyPass /some/prefix/ http://site.example.com/
ProxyPassReverse /some/prefix/ http://site.example.com/
ProxyHTMLURLMap http://site.example.com/ http://xxx.xxx.xxx.xxx/some/prefix/
<Location /some/prefix/>
SetOutputFilter INFLATE;proxy-html;DEFLATE
ProxyHTMLURLMap http://site.example.com/ /some/prefix/
</Location>
ProxyPassReverseCookieDomain site.example.com xxx.xxx.xxx.xxx
ProxyPassReverseCookiePath / /some/prefix/
ProxyHTMLExtended On
</VirtualHost>
Почти все работает. Я не могу делать новые сообщения (текстовый редактор не загружается должным образом). Режим разработчика Iceweasel (Firefox) говорит:
(...)
[00:13:33.365] GET http://xxx.xxx.xxx.xxx/some/prefix/wp-includes/js/tinymce/langs/pl.js?wp-mce-4107-20141130 [HTTP/1.1 404 Not Found 399ms]
(...)
[00:13:33.648] Failed to load: http://xxx.xxx.xxx.xxx/some/prefix/wp-includes/js/tinymce/langs/pl.js
[00:13:46.733] POST http://xxx.xxx.xxx.xxx/wp-admin/admin-ajax.php [HTTP/1.1 404 Not Found 102ms]
Я пропустил не ошибки. Мне кажется, что Apache что-то не переписывает. Любые идеи?
Вот мой рабочий конфиг для вашего случая.
<VirtualHost *:80>
ServerName proxy.example.net
ProxyRequests off
ProxyPass /some/prefix/ http://backend.example.net/
ProxyPassReverse /some/prefix/ http://backend.example.net/
<Location /some/prefix/>
ProxyHTMLEnable On
ProxyHTMLExtended On
ProxyHTMLLinks a href
ProxyHTMLLinks area href
ProxyHTMLLinks link href
ProxyHTMLLinks img src longdesc usemap
ProxyHTMLLinks object classid codebase data usemap
ProxyHTMLLinks q cite
ProxyHTMLLinks blockquote cite
ProxyHTMLLinks ins cite
ProxyHTMLLinks del cite
ProxyHTMLLinks form action
ProxyHTMLLinks input src usemap
ProxyHTMLLinks head profile
ProxyHTMLLinks base href
ProxyHTMLLinks script src for
ProxyHTMLLinks iframe src
RequestHeader unset Accept-Encoding
ProxyHTMLURLMap /wp-admin/ /some/prefix/wp-admin/
ProxyHTMLURLMap \/wp-admin\/ \/some\/prefix\/wp-admin\/
ProxyHTMLURLMap http://backend.example.net/ http://proxy.example.net/some/prefix/
</Location>
ProxyPassReverseCookieDomain backend.example.net proxy.example.net
ProxyPassReverseCookiePath / /some/prefix/
# LogLevel warn proxy_html:trace3
ErrorLog ${APACHE_LOG_DIR}/errorprox.log
CustomLog ${APACHE_LOG_DIR}/accessprox.log combined
</VirtualHost>
Некоторые объяснения
Я должен установить ProxyHTMLLinks
потому что в журнале apache ниже есть некоторые ошибки. Конфигурация была скопирована из это сообщение в блоге.
[Вс, 21 декабря, 23:02: 49.053825 2014] [proxy_html: trace1] [pid 3368: tid 140385487116032] mod_proxy_html.c (823): [client 36.71.243.192:56711] Ссылки не настроены: фильтру proxy-html ничего не нужно делать
Параметр RequestHeader unset Accept-Encoding
был использован для подстановки параметра SetOutputFilter INFLATE;proxy-html;DEFLATE
. В результате трафик между прокси и реальным WordPress не был сжат. Видеть эта страница для подробностей.
URL wp-admin/admin-ajax.php
был определен и вызван javascript. Параметр ProxyHTMLExtended On
должен делать эту работу.
URL wp-admin/admin-ajax.php
определен без домена (вы можете увидеть его, щелкнув Просмотр исходного кода страницы в Firefox). Это вызвало параметр http://site.example.com/ /some/prefix/
не соответствует этой строке. Итак, я установил новый параметр
ProxyHTMLURLMap /wp-admin/ /some/prefix/wp-admin/
для обычной струны.ProxyHTMLURLMap \/wp-admin\/ \/some\/prefix\/wp-admin\/
для экранированной строки.