Я пытаюсь установить модуль 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>