Host multiple Rack apps on one server with multiple ports (using Apache and Passenger)

apache-2.2phusion-passengerrubyruby-on-railsruby-rack

I've search online and been reading documentation for Apache, Passenger, Rack, etc, but have yet to find a solution to my problem.

I have several Rack (ruby)-based apps, located in

/home/web/sites/app1
/home/web/sites/app2
/home/web/sites/app3

app1 is a Sintra app, app2 is Padrino and app3 is Rails.

I would like to run these apps under different ports (assuming server IP is 50.60.70.101):

50.60.70.101:4567 -> app1
50.60.70.101:3000 -> app2
50.60.70.101:80   -> app3

What is the correct way to configure Apache's virtual host file to achieve this?

I have 3 files in /etc/apache2/sites-available/ with this type of configuration (with changed IPs):

<VirtualHost *:4567>
    RackEnv         production

    DocumentRoot    /home/web/sites/app1/public
    <Directory      /home/web/sites/app1/public>
        Order   allow,deny
        Allow   from all
        Options -MultiViews
        #AllowOverride All
    </Directory>
</VirtualHost>

But I cannot access app1 at 50.60.70.101:4567 (app3 does work on port 80, though).

Best Answer

You'll need to explicitly tell Apache to listen on those ports with the Listen directive; have a look at Binding to Addresses and Ports.

Related Topic