Forum OpenACS Q&A: Virtual hosting in ten minutes or less

It doesn't require recompiling Aolserver, or anything really that complicated, and lets you share an IP address among multiple servers. You don't even need another instance of Aolserver. Just the main server needs to have OpenACS on it.

The only downside is that you get the port numbers in the address.

Try it with http://rubick.com

You get redirected to http://rubick.com:8002

Here's how it works:

- you have a main server that does the redirects (this has to have OpenACS on it). Let's call this abc.com
- go to /admin/
- set up a package mounted at any old directory. Let's say /redirect
- go to Host-Node Map on the admin page
- set up def.com to go to the /redirect directory
- unmount the application in the redirect directory
- create a /redirect directory under /www/redirect
- inside this directory, put an index.vuh file.

Copy this inside it:

--------------

ad_page_contract {
  redirect

  @author Jade Rubick
  @creation-date 2003-04-24

  Helpful .vuh example at
  http://www.arsdigita.com/bboard/q-and-a-fetch-msg?msg_id=000JTn
} {
}

set path [ad_conn path_info]

set page_body "http://def.com:8002/$path"
ad_returnredirect $page_body

Substitute your port in for 8002.

Anyone see any security problems with this?

Collapse
Posted by Jade Rubick on
The only problem I'm seeming to have is that I can't seem to map www.rubick.com to the rubick directory. I get this:

Database operation "dml" failed
    while executing
"ns_pg_bind dml nsdb0 {


    insert into host_node_map
    (host, node_id)
    values
    (:host, :root)

    }"
    ("uplevel" body line 1)
    invoked from within
"uplevel $ulevel [list ns_pg_bind $type $db $sql"
    invoked from within
"db_exec dml $db $full_statement_name $sql"
    ("uplevel" body line 2)
    invoked from within
"uplevel 1 $code_block "
    invoked from within
"db_with_handle db {
            db_exec dml $db $full_statement_name $sql
        }"
    (procedure "db_dml" line 37)
    invoked from within
"db_dml host_node_insert {
    insert into host_node_map
    (host, node_id)
    values
    (:host, :root)
}"
    ("uplevel" body line 14)
    invoked from within
"uplevel {
          ad_page_contract {
    @author Mark Dettinger (mailto:mdettinger@arsdigita.com)
    @creation-date 2000-10-24
    @cvs-id $Id: add.tcl,v 1.1..."
    (procedure "code::tcl::/web/safe4all/packages/acs-subsite/www/admin/host..." line 2)
    invoked from within
"code::tcl::$__adp_stub"
    invoked from within
"if { [file exists $__adp_stub.tcl] } {

      # ensure that data source preparation procedure exists and is up-to-date
      adp_init tcl $__adp_stub
..."
    ("uplevel" body line 3)
    invoked from within
"uplevel {

    if { [file exists $__adp_stub.tcl] } {

      # ensure that data source preparation procedure exists and is up-to-date
      adp_init t..."
    (procedure "adp_prepare" line 2)
    invoked from within
"adp_prepare "
    (procedure "template::adp_parse" line 30)
    invoked from within
"template::adp_parse [file root [ad_conn file]] {}"
    (procedure "adp_parse_ad_conn_file" line 7)
    invoked from within
"$handler"
    ("uplevel" body line 2)
    invoked from within
"uplevel $code"
    invoked from within
"ad_try {
        $handler
      } ad_script_abort val {
        # do nothing
      }"
    invoked from within
"rp_serve_concrete_file [ad_conn file]"
    (procedure "rp_serve_abstract_file" line 60)
    invoked from within
"rp_serve_abstract_file "$root/$path""
    ("uplevel" body line 2)
    invoked from within
"uplevel $code"
    invoked from within
"ad_try {
        rp_serve_abstract_file "$root/$path"
        set tcl_url2file([ad_conn url]) [ad_conn file]
        set tcl_url2path_info([ad_conn url]) [ad_conn path_inf..."

Any suggestions?