NodeBB With Apache2, Proxy

Technical Support
  • So I am trying to get my NodeBB working with Apache2 with this URL: "http://127.0.0.1/forum" But when ever I try it it says, "/ Not Found" Here is my config.json:

    {
        "url": "http://127.0.0.1/forum",
        "port": "3000",
        "secret": "6a6e220f-ecf3-40f9-8832-55e429184458",
        "bind_address": "0.0.0.0",
        "database": "mongo",
        "mongo": {
            "host": "127.0.0.1",
            "port": "27017",
            "username": "matt",
            "password": "20matt02",
            "database": "nodebb"
        },
        "bcrypt_rounds": 12,
        "use_port": false,
        "relative_path": "/forum/"
    }
    
    

    And my 000-default.conf:

    <VirtualHost *:80>
    	# The ServerName directive sets the request scheme, hostname and port that
    	# the server uses to identify itself. This is used when creating
    	# redirection URLs. In the context of virtual hosts, the ServerName
    	# specifies what hostname must appear in the request's Host: header to
    	# match this virtual host. For the default virtual host (this file) this
    	# value is not decisive as it is used as a last resort host regardless.
    	# However, you must set it for any further virtual host explicitly.
    	#ServerName www.example.com
    
    	ServerAdmin [email protected]
    	DocumentRoot /var/www/html
    
    	# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
    	# error, crit, alert, emerg.
    	# It is also possible to configure the loglevel for particular
    	# modules, e.g.
    	#LogLevel info ssl:warn
    
    	ErrorLog ${APACHE_LOG_DIR}/error.log
    	CustomLog ${APACHE_LOG_DIR}/access.log combined
    
    	# For most configuration files from conf-available/, which are
    	# enabled or disabled at a global level, it is possible to
    	# include a line for only one particular virtual host. For example the
    	# following line enables the CGI configuration for this host only
    	# after it has been globally disabled with "a2disconf".
    	#Include conf-available/serve-cgi-bin.conf
    	
    	
    	ProxyRequests off
    	
    	<Proxy *>
    	    Order deny,allow
    	    Allow from all
    	</Proxy>
    	ProxyPass /socket.io/1/websocket ws://127.0.0.1:4567/socket.io/1/websocket
    	ProxyPassReverse /socket.io/1/websocket ws://127.0.0.1:4567/socket.io/1/websocket
    
    	ProxyPass /socket.io/ http://127.0.0.1:4567/socket.io/
    	ProxyPassReverse /socket.io/ http://127.0.0.1:4567/socket.io/
    
    	ProxyPass /forum http://127.0.0.1:3000
    	ProxyPassReverse /forum http://127.0.0.1:3000
    
    </VirtualHost>
    
    # vim: syntax=apache ts=4 sw=4 sts=4 sr noet
    
    
  • Try to add

    ServerName 127.0.0.1/forum

    in your 000-default.conf

    And change your relative_path by "/" in config.json

    Don't forget to change all the 4567 port by 3000.

  • Here's a slimmed down version of the Apache config we use at forums.fogproject.org

    <VirtualHost *:80>
            ServerName XXX.XXX.XXX.XXX
            ProxyRequests off
            <Proxy *>
                    Order deny,allow
                    Allow from all
            </Proxy>
            RewriteEngine On
            RewriteCond %{REQUEST_URI} ^/socket.io [NC]
            RewriteCond %{QUERY_STRING} transport=websocket [NC]
            RewriteRule /(.*) ws://127.0.0.1:4567/$1 [P,L]
            ProxyPassReverse /socket.io ws://127.0.0.1:4567/socket.io
            RewriteCond %{REQUEST_URI} ^/ [NC]
            RewriteRule ^/(.*)$ http://127.0.0.1:4567/$1 [P,L]
            ProxyPassReverse / http://127.0.0.1:4567/
    </VirtualHost>
    

    Just change the ServerName and any references to the 4567 port.

    • Your ServerName should read ServerName localhost
    • Make sure inside of /etc/hosts there is a line that says 127.0.0.1 localhost
    • No DocumentRoot is needed.
  • @Bilou said:

    Try to add

    ServerName 127.0.0.1/forum

    in your 000-default.conf

    And change your relative_path by "/" in config.json

    Don't forget to change all the 4567 port by 3000.

    Can you give me an example with the correct usage. I forgot to mention that none of the styles are showing up(The directory goes to like /forum/plugins/nodebb-plugin-markdown/styles/railscasts.css).

    @jbob Thank you for the example, but it was giving me an error on startup(Apache) that said, "Job for apache2.service failed. See "systemctl status apache2.service" and "journalctl -xe" for details." and I checked them, but it did not give me any details.

  • I got it working! For future people coming to this looking for an answer here are my config files:

    NodeBB config.json:

    {
        "url": "http://127.0.0.1/forum",
        "port": "3000",
        "secret": "6a6e220f-ecf3-40f9-8832-55e429184458",
        "bind_address": "0.0.0.0",
        "database": "mongo",
        "mongo": {
            "host": "127.0.0.1",
            "port": "27017",
            "username": "matt",
            "password": "20matt02",
            "database": "nodebb"
        },
        "bcrypt_rounds": 12,
        "use_port": false,
        "relative_path": "/forum"
    }
    

    and Apache2 000-default.conf:

    <VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        #ServerName www.example.com
        ServerName 127.0.0.1/forum
    
        ServerAdmin [email protected]
        DocumentRoot /var/www/html
    
        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn
    
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
    
        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
        
        
        ProxyRequests off
        
        <Proxy *>
            Order deny,allow
            Allow from all
        </Proxy>
    
        ProxyPass /forum http://127.0.0.1:3000/forum
        ProxyPassReverse /forum http://127.0.0.1:3000/forum
    
    </VirtualHost>
    
    # vim: syntax=apache ts=4 sw=4 sts=4 sr noet
    
  • @mttprvst13 It probably failed because you don't have mod_rewrite enabled.

    Do

    a2enmod rewrite
    systemctl restart apache2
    


Suggested Topics