Configuring apache as a proxy

Prerequisites to making this work: Apache 2.4.x

What if I’m on 2.2.x (Debian/Ubuntu)?

you need to manually compile and add the module “mod_proxy_wstunnel” to the Apache 2.2 branch. If you’re running Ubuntu or Debian, you’re likely on the 2.2 branch of code.

The following guide will assist with that if you’re on Debian or Ubuntu. This is what I used to backport the mod_proxy_wstunnel module to the 2.2 code base of Apache;

http://www.amoss.me.uk/2013/06/apache-2-2-websocket-proxying-ubuntu-mod_proxy_wstunnel/

NOTE: On ubuntu, if you’re missing the ./configure file

You need to first run ./buildconf. After this is complete, you will then be able to use ./configure.

automake & libtool package was needed too.

  1. apt-get install automake libtool

Enable the necessary modules

  1. sudo a2enmod proxy
  2. sudo a2enmod proxy_http
  3. sudo a2enmod proxy_wstunnel

Add the config to Apache

The next step is adding the configuration to your virtualhost.conf file, typically located in /etc/apache2/sites-available/. The below configuration assumes you’ve used 4567 (default) port for NobeBB installation. It also assumes you have the bind address set to 127.0.0.1.

  1. ProxyRequests off
  2. <Proxy *>
  3. Order deny,allow
  4. Allow from all
  5. </Proxy>
  6. ProxyPass /socket.io/1/websocket ws://127.0.0.1:4567/socket.io/1/websocket
  7. ProxyPassReverse /socket.io/1/websocket ws://127.0.0.1:4567/socket.io/1/websocket
  8. ProxyPass /socket.io/ http://127.0.0.1:4567/socket.io/
  9. ProxyPassReverse /socket.io/ http://127.0.0.1:4567/socket.io/
  10. ProxyPass / http://127.0.0.1:4567/
  11. ProxyPassReverse / http://127.0.0.1:4567/

The last thing you need to be sure of is that the config.json in the NodeBB folder has use_port: false. Otherwise some functionality will not work properly.

Example nodebb/config.json

  1. {
  2. "base_url": "http://www.yoursite.com",
  3. "port": "4567",
  4. "use_port": false,
  5. "secret": "55sb254c-62e3-4e23-9407-8655147562763",
  6. "bind_address": "127.0.0.1",
  7. "database": "redis",
  8. "redis": {
  9. "host": "127.0.0.1",
  10. "port": "6379",
  11. "password": "",
  12. "database": "0"
  13. },
  14. "bcrypt_rounds": 12,
  15. "upload_path": "/public/uploads",
  16. "relative_path": ""
  17. }

Change the domain and dont use the secret in the example above.