Virtual Hosts with Apache+Zope
Hello there! Really nice thing our Zope. After solving some problems I would like to bring a small contribution. I send You this document and You must decide if the content is interessting enough for publishing it. Well: We use a German Linux distribution SuSE 6.2 with Apache 1.3.6. We use Zope 2.0.1 under it to serve our dynamic content and take advantage of beatiful Zope products like ZCatalog, Squishdot, TinyTable and so on. The machine is a Dual Celeron 400 on a Abit BP6-Board, software RAID 1 and 128M. The problem was to serve severe domains, some Content from Zope and some CGI stuff from Apache. No further instances of Apache or Zope are to run. First of all you have to set the aliasing - means one network device speaking to 3 or 4 IP numbers. After setting the first IP number you can add further IPŽs with an ifconfig call put at the end of the /etc/rc.d/network file, which after that is looking like this: # #Von Edin angepasst um aliasing zu erweitern # ifconfig eth0:0 192.168.1.136 broadcast 192.168.1.255 netmask 255.255.255.0 ifconfig eth0:1 192.168.1.137 broadcast 192.168.1.255 netmask 255.255.255.0 ifconfig eth0:2 192.168.1.138 broadcast 192.168.1.255 netmask 255.255.255.0 ifconfig eth0:3 192.168.1.139 broadcast 192.168.1.255 netmask 255.255.255.0 after that you should run ifconfig and get something like this: root@guzzi:/home/edin > ifconfig eth0 Link encap:Ethernet HWaddr 00:10:5A:71:E4:CE inet addr:192.168.1.135 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:93393 errors:0 dropped:0 overruns:0 frame:0 TX packets:50357 errors:0 dropped:0 overruns:0 carrier:0 collisions:26199 txqueuelen:100 Interrupt:10 Base address:0xd400 eth0:0 Link encap:Ethernet HWaddr 00:10:5A:71:E4:CE inet addr:192.168.1.136 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:10 Base address:0xd400 eth0:1 Link encap:Ethernet HWaddr 00:10:5A:71:E4:CE inet addr:192.168.1.137 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:10 Base address:0xd400 eth0:2 Link encap:Ethernet HWaddr 00:10:5A:71:E4:CE inet addr:192.168.1.138 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:10 Base address:0xd400 eth0:3 Link encap:Ethernet HWaddr 00:10:5A:71:E4:CE inet addr:192.168.1.139 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:10 Base address:0xd400 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:3924 Metric:1 RX packets:28 errors:0 dropped:0 overruns:0 frame:0 TX packets:28 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 This was the easy part. I will not explain how to set the RAID system. Not here - bit if someone wants to know how to manage that I will be glad to help. We have several WWW-Servers which we want to put on one Zope server. In addition we want to install Minivend Online-Shop-System, so we definetly need Apache. Next, I had to reconfigure Apache with all that rewrite rules and stuff. So this is what I put in my /etc/httpd/httpd.conf: This is what you have to do if you have SuSE. I donŽt know about RedHat. The problem is "Options +ExecCGI"-line. There is another Tip/HOWTO-Document explaining the solution. This is working. <Directory "/usr/local/httpd/cgi-bin"> AllowOverride None Options +ExecCGI Order allow,deny Allow from all </Directory> This is the interesting part: <VirtualHost 192.168.1.136> ServerName site1.intern.de DocumentRoot /usr/local/httpd/htdocs/site1/ ScriptAlias /cgi-bin/ /usr/local/httpd/cgi-bin/site1/ RewriteEngine on RewriteLog /var/log/rewrite.log RewriteLogLevel 0 RewriteCond %{HTTP:Authorisation} ^(.*) RewriteRule ^(.*) /usr/local/httpd/cgi-bin/site1/Zope.cgi/$1 \ [e=HTTP_CGI_AUTHORIZATION:%1,t=application/x-httpd-cgi,l] </VirtualHost> <VirtualHost 192.168.1.137> ServerName site2.intern.de DocumentRoot /usr/local/httpd/htdocs/site2/ ScriptAlias /cgi-bin/ /usr/local/httpd/cgi-bin/site2/ RewriteEngine on RewriteLog /var/log/rewrite.log RewriteLogLevel 0 RewriteCond %{HTTP:Authorisation} ^(.*) RewriteRule ^(.*) /usr/local/httpd/cgi-bin/site2/Zope.cgi/$1 \ [e=HTTP_CGI_AUTHORIZATION:%1,t=application/x-httpd-cgi,l] </VirtualHost> <VirtualHost 192.168.1.138> ServerName site3.intern.de DocumentRoot /usr/local/httpd/htdocs/site3/ ScriptAlias /cgi-bin/ /usr/local/httpd/cgi-bin/site3/ RewriteEngine on RewriteLog /var/log/rewrite.log RewriteLogLevel 0 RewriteCond %{HTTP:Authorisation} ^(.*) RewriteRule ^(.*) /usr/local/httpd/cgi-bin/site3/Zope.cgi/$1 \ [e=HTTP_CGI_AUTHORIZATION:%1,t=application/x-httpd-cgi,l] </VirtualHost> All the last lines must be one, of course. We almost made it. The problem now is to redirect the calls comming from Apache. There is probably another way with Rewrite-Rules but I found this one quite comfortable and I learned something more about Zope's variables and how to handle them. No matter what you type, you always get the root index_html. That's not the right thing. I want people if they type www.site1.de to gho directly to Zope's subfolder /site1. With few ifs you are the winner. Try putting this in your index_html: <dtml-var standard_html_header> <dtml-if "SERVER_URL=='http://site1.intern.de'"> <dtml-with site1> <dtml-call "RESPONSE.redirect('/site1/index_html')"> </dtml-with> </dtml-if> <dtml-if "SERVER_URL=='http://site2.intern.de'"> <dtml-with site2> <dtml-call "RESPONSE.redirect('/site2/index_html')"> </dtml-with> </dtml-if> <dtml-if "SERVER_URL=='http://site3.intern.de'"> <dtml-with site3> <dtml-call "RESPONSE.redirect('/site3/index_html')"> </dtml-with> </dtml-if> <dtml-var standard_html_footer> ThatŽs it. A week for me, for all other people now 5min ;). Have fun... Edin Dizdarevic edin@tfh-berlin.de edin@ipo.de edind@gmx.de
participants (1)
-
Edin Dizdarevic