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

мод прокси не работает на apache

Я пытаюсь установить модуль Mod_Proxy Apache на WHM / CPanel CeEntOS Linux Server. Вот системная информация:

CentOS release 5.6 (Final)
Server version: Apache/2.2.21 (Unix)
Cpanel::Easy::Apache v3.7.2 rev9999

Цель моей установки состоит в том, чтобы, когда я нахожусь на сайте abc.com, когда я нажимаю ссылку на сайт auto.efg.com (давайте представим, что его IP-адрес 192.168.0.101), браузер загружал приложение на auto.efg. com при сохранении abc.com в адресной строке браузера.

Итак, я последовал этому руководству:

http://www.hackersgarage.com/install-mod_proxy-apache-module-on-whmcpanel-ceentos-linux-server.html

И когда я закончил следовать ему, я смог сделать это:

root@ip-xxx-xxx-xxx [/tmp/httpd-2.2.21/modules/proxy]# ls -l           
/usr/local/apache/modules/mod_proxy*

-rwxr-xr-x 1 root root 88708 Jan  5 08:22 /usr/local/apache/modules/mod_proxy.so*
-rwxr-xr-x 1 root root 49654 Jan  5 08:23 /usr/local/apache/modules/mod_proxy_connect.so*
-rwxr-xr-x 1 root root 73196 Jan  5 08:23 /usr/local/apache/modules/mod_proxy_http.so*

Теперь, после того как я выполнил эти инструкции и попытался перезапустить сервер, я получил следующую ошибку:

/etc/init.d/httpd restart
httpd: Syntax error on line 35 of /usr/local/apache/conf/httpd.conf: module proxy_module is built-in and can't be loaded

Видите ли, это произошло потому, что я загрузил модуль для proxy_module ,. proxy_http_module в httpd.conf, поэтому я закомментировал их в /usr/local/apache/conf/httpd.conf:

# LoadModule proxy_module   modules/mod_proxy.so
# LoadModule proxy_http_module  modules/mod_proxy_http.so
# LoadModule proxy_connect_module modules/mod_proxy_connect.so

Теперь эта ошибка исчезла.

И настройки моего виртуального хоста выглядят так:

<VirtualHost 50.63.53.79:80>
    ServerName abc.com
    ServerAlias www.abc.com
    DocumentRoot /home/eagl0028/public_html
    ServerAdmin webmaster@abc.com
    ## User eagl0028 # Needed for Cpanel::ApacheConf
    <IfModule mod_suphp.c>
      suPHP_UserGroup eagl0028 eagl0028
    </IfModule>
    <IfModule !mod_disable_suexec.c>
      SuexecUserGroup eagl0028 eagl0028
    </IfModule>
    ProxyRequests Off
    <Proxy *>
      Order deny,allow
      Allow from all
    </Proxy>
    ProxyPreserveHost On
    ProxyPass / http://192.168.0.101/
    ProxyPassReverse / http://192.168.0.101/
    CustomLog /usr/local/apache/domlogs/abc.com-bytes_log "%{%s}t %I .\n%{%s}t %O ."
    CustomLog /usr/local/apache/domlogs/abc.com combined
    ScriptAlias /cgi-bin/ /home/eagl0028/public_html/cgi-bin/
</VirtualHost>

Однако когда я бегу:

 service httpd stop
 service httpd start

А затем отправьте сообщение по относительному URL:

<form accept-charset="UTF-8" action="/users/sign_in" class="user_new" id="user_new" method="post">

Я ожидаю, что он отправит сообщение на 192.168.0.101, но этого не произошло. Я проверяю журналы сервера 192.168.0.101 и не вижу никаких признаков поступающего запроса. Все, что происходит, это ошибка 404 not found с URL-адресом вверху abc.com/users/sign_in

Ваш VirtualHost имеет пару IP-адрес + порт 50.63.53.79:80. Это может показаться очевидным советом, но если сервер имеет несколько IP-адресов или портов, которые он прослушивает, убедитесь, что ваш браузер действительно использует этот IP-адрес и порт. Если POST попадает в порт 443 или аналогичный, этот виртуальный хост не будет использоваться. Это могло бы объяснить, почему в журнале ничего не отображается. Проверьте журнал основного сервера, чтобы узнать, попал ли туда ваш запрос. Если вы запускаете свой тест из локальной сети и он попадает на IP-адрес локальной сети, это обязательно сработает.

Подобное поведение может быть вызвано, если у вас есть эта конфигурация в включаемом файле, который фактически не используется.

В обоих случаях запуск двоичного файла httpd вручную с -S параметр (убедитесь, что вы включили все необходимые параметры из текущего процесса apache, который вы видите в таблице процессов) покажет вам все определенные виртуальные хосты и поможет вам определить отсутствующие или другой адрес + порт пары, которые могут ловить трафик.

Вы можете настроить виртуальный хост для прослушивания всех IP-адресов, используя * вместо IP-адреса.

<VirtualHost *:80>

Вы также можете явно настроить несколько IP-адресов.

<VirtualHost 50.63.53.79:80 192.168.0.101:80>

В href из http://auto.efg.com/users/sign_in/ отправляет ваш браузер от прокси-сервера - это не задача Apache, чтобы убедиться, что каждая ссылка на странице поддерживает связь вашего браузера с прокси. (Есть некоторые сторонние модули которые изменяют URL-адреса на странице в пути, но они не будут работать ни с чем, кроме ссылок в плоском HTML)

Можете ли вы изменить ссылку, чтобы оставить схему и хост без изменений?

<a href="/users/sign_in/">clicky</a>