Назад | Перейти на главную страницу

Wordpress за обратным прокси

Наша организация переделывает свой сайт. Кто-то создал новый сайт на новом сервере. Доступ к нему можно получить, поместив запись в / 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\/ для экранированной строки.