2015-05-25 2 views
5

Raspberry Pi по-прежнему находится на Apache 2.2 (2.2.22-13 + deb7u4 прямо сейчас). Для использования Apache в качестве прокси для веб-узлов («ProxyPass») требуется модуль Apache mod_proxy_wstunnel.Как добавить mod_proxy_wstunnel в Apache2 2.2 на Raspberry Pi (Backport mod_proxy_wstunnel)

Модуль Apache mod_proxy_wstunnel доступен в httpd 2.4.5 и более поздних версиях.

Как добавить mod_proxy_wstunnel в Apache2 2.2 на Raspberry Pi (Backport mod_proxy_wstunnel)?

ответ

8

Скачать Apache Source, добавить патч из Виткин, компилировать Apache и добавить модуль mod_proxy_wstunnel.so для модулей Apache

Подробная информация о патче: https://gist.github.com/vitkin/6661683

Подробное описание шагов:

# Check apache version (should be 2.2.22 as of writing, if not adjust the next step) 
dpkg -s apache2 

# Checkout apache source 
svn checkout http://svn.apache.org/repos/asf/httpd/httpd/tags/2.2.22/ httpd-2.2.22 

# Get patch and apply it 
wget https://gist.github.com/vitkin/6661683/raw/873dd8b4de4ad1ff69757ffe48fc574374aedc57/apache-2.2-wstunnel.patch 
cd httpd-2.2.22 
patch -p1 -i ../apache-2.2-wstunnel.patch 

# Build Apache 
svn co http://svn.apache.org/repos/asf/apr/apr/branches/1.4.x srclib/apr 
svn co http://svn.apache.org/repos/asf/apr/apr-util/branches/1.3.x srclib/apr-util 
./buildconf # EDIT: Some commenters noted that buildconf should be run before the configure 
./configure --enable-proxy=shared --enable-proxy_wstunnel=shared 
make 

# Copy the module to apache installation 
sudo cp modules/proxy/.libs/mod_proxy_wstunnel.so /usr/lib/apache2/modules 

# Create module load file 
cd /etc/apache2/mods-available 
sudo echo "LoadModule proxy_wstunnel_module /usr/lib/apache2/modules/mod_proxy_wstunnel.so" > mod_proxy_wstunnel.load 

# Create symbolic link to load the module 
cd /etc/apache2/mods-enabled 
sudo ln -s ../mods-available/proxy_wstunnel.load proxy_wstunnel.load 

# Add ProxyPass to Site config 
cd /etc/apache2/sites-available 

# e.g. modify default site config with "sudo nano default" 
# and add the following line inside the VirtualHost element: 
# "ProxyPass /websockets/mywebsocket ws://mywebsocketserver.com/websockets/mywebsocket" 

# Restart Apache 
sudo /etc/init.d/apache2 restart 
+0

Когда я это пробовал, после «sudo service apache2 restart» я получил следующее: apache2: Ошибка синтаксиса в строке 253 из файла /etc/apache2/apache2.conf: Ошибка синтаксиса в строке 1 файла/etc/apache2/mods -enabled/mod_proxy_wstunnel.load: Не удается загрузить /usr/lib/apache2/modules/mod_proxy_wstunnel.so в сервер: /usr/lib/apache2/modules/mod_proxy_wstunnel.so: undefined symbol: ap_proxy_canonenc - и поэтому не удалось выполнить «configtest». Есть идеи? –

+1

Решением было то, что вам нужно скопировать не только mod_proxy_wstunnel, но и mod_proxy, как показано здесь: https://www.amoss.me.uk/2013/06/apache-2-2-websocket-proxying-ubuntu-mod_proxy_wstunnel/ –

+0

В моем raspbian apache версии 2.4.10, но mod_proxy_wstunnel все еще недоступен. согласно документации apache, она должна быть там. Любая идея почему? – alexmogavero

4

Я последовал эти шаги для CentOS 2.2, предполагая, что для малины Pi это должно быть похоже на похожие строки. Я потратил много времени на то, чтобы понять это, и для этого имеется очень мало документации. Дайте мне знать, если это поможет, иначе я могу помочь вам устранить проблему. Также надеюсь, что это поможет будущим читателям.

Для компиляции mod_proxy_tunnel.so,

  1. yum install httpd-devel

  2. Скачать mod_proxy_tunnel.c и скомпилировать его с помощью apxs -i -a -c mod_proxy_tunnel.c

Затем загрузите выше скомпилированного модуля в /etc/httpd/modules:

  1. Скопируйте mod_proxy_wstunnel.so в /etc/httpd/modules (Составитель сверху)

  2. Для того, чтобы загрузить модуль во время запуска сервера, используйте LoadModule директиву в HTTPD конф файле /etc/httpd/conf/httpd.conf

    Добавьте следующую строку со всеми другими LoadModule линия

    LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so 
    
  3. Чтобы перезапустить Apache Используйте service httpd restart

  4. Чтобы проверить загруженные модули апача после перезапуска использования httpd -M

  5. После модуля установлен, добавьте эти две строки в /etc/httpd/conf/httpd.conf:

    ProxyPass /websockets/mywebsocket ws://mywebsocketserver.com//websockets/mywebsocket retry=4 
    ProxyPassReverse /websockets/mywebsocket ws://mywebsocketserver.com//websockets/mywebsocket retry=4 
    

Примечание: Убедитесь, что эти строки добавляются до случая по умолчанию /. Также перезапустите apache, чтобы быть в безопасности.

3

Мне это нужно для установки Traccar site. Я сделал apt-update/apt-upgrade.Я выполнил dpkg -s apache2, который показал, что я запускал Версия: 2.2.22-13 + deb7u7. Я начал следовать инструкциям в LearningAboutTech's answer above. В то время прошло, некоторые из процесса изменения:

  1. Я начал с APT-получить установку apache2-резьбовой DEV
  2. Я тогда искал mod_proxy_wstunnel.c, я использовал версию here, и принес его с Wget
  3. затем я использовал команду apxs2 -i -a -c mod_proxy_wstunnel.c
  4. После проверки файлов конфигурации, я увидел, что модуль был уже загружен в mods-enabled папка.
  5. Я уже добавил ProxyPass и ProxyReverse в файлы конфигурации сайта. Итак, следующая вещь была сервис apache2 перезагрузить и тест.

Тестирование сайта, он выполняется, как и ожидалось, я видел предупреждения в ошибки файла:

[предупредит] прокси: Нет обработчик протокола не был действителен для URL/API/сокет. Если вы используете версию mod_proxy DSO, убедитесь, что прокси-подмодули включены в конфигурацию с помощью LoadModule.

В какой-то момент я буду изучать это дальше - это может быть связано с тем, что я только что сделал или какой-либо другой настройкой в ​​моей настройке, но я счастлив, что мой сайт работает так, как ожидалось!

Смежные вопросы