Version 26.1 by Pascal Robert on 2007/09/03 17:00

Show last authors
1 == Overview ==
2
3 In a deployment scenario on Mac OS X, Linux, or Solaris, your applications will most likely be deployed on Apache. Additionally, if you develop with WODirectConnectEnabled=false (you **should**, see the [[Direct Connect>>Web Applications-Development-Direct Connect]] section for details), you will be running your application locally through Apache as well. Apache is a very extensible web server that provides a huge number of capabilities, some of which we will detail here.
4
5 == Split Install ==
6
7 WebObjects applications are deployed in a "split install". A split install means that your application code, components, and resources are deployed in one location to be served from your WebObjects application (on OS X, ##/Library/WebObjects/Applications///YourApp//.woa##), while your ##WebServerResources## are installed in another location (on OS X, ##/Library/WebServer/Documents/WebObjects///YourApp//.woa/Contents/WebServerResources##) to be served directly by Apache. This provides the optimal performance scenario, as Apache is specifically tuned for serving static content, and it does not make sense to send requests for large binary files through WebObjects if it is not necessary.
8
9 == mod//expires // ==
10
11 To get the most performance out of Apache, you should make sure that you have mod//expires enabled. mod//expires controls the caching headers that are applied to static resource requests. Depending on your installation, Apache may default to mod//expires disabled, which would cause your end-users' browser to re-request every resource on your site on every page, even if it's a common header graphic.//
12
13 An example mod//expires configuration might look like~://
14
15 {{code value="xml"}}
16
17 <IfModule mod_expires.c>
18 ExpiresActive On
19 ExpiresDefault A60
20 ExpiresByType image/bmp A3600
21 ExpiresByType image/gif A3600
22 ExpiresByType image/ief A3600
23 ExpiresByType image/jpeg A3600
24 ExpiresByType image/png A3600
25 </IfModule>
26
27 {{/code}}
28
29 You will also need the corresponding type-extension mappings:
30
31 {{code value="xml"}}
32
33 <IfModule mod_mime.c>
34 AddType image/bmp bmp
35 AddType image/gif gif
36 AddType image/ief ief
37 AddType image/jpeg jpeg
38 AddType image/jpeg jpg
39 AddType image/jpeg jpe
40 ...
41 </IfModule>
42
43 {{/code}}
44
45 This tells Apache that when a request is made for a type image/gif, the requesting browser will be told not to request the image again for an hour (A3600 = 3600 seconds).
46
47 == mod//rewrite // ==
48
49 Anyone who has used WebObjects has likely noticed that WebObjects URLs are long ##http:~/~/yoursite.com/cgi-bin/WebObjects/AppName.woa/wa/something##. It is a common request to make these URLs nicer for end-users who are used to just requesting ##http:~/~/yoursite.com##. Fortunately Apache provides an amazingly extensive module called "mod//rewrite" that allows you to rewrite the URL requests of your site based on a series of regular expressions and rules.//
50
51 Aaron Rosenzweig has a very thorough article about [[using mod//rewrite with Apache//>>http://www.jewelryluv.com/fashion/pageWithName/ModRewrite]].
52
53 === mod//rewite with mod//webobjects ===
54
55 I ran into a problem with mod//rewrite when using mod//WebObjects where mod//WebObjects had be loaded first or it just wouldn't work properly (it would work fine with cgi-bin adaptor).//
56
57 So in http.conf, search for mod//rewrite and change it to~://
58
59 {{noformat}}
60
61 LoadModule WebObjects_module /System/Library/WebObjects/Adaptors/Apache/mod_WebObjects.so
62 LoadModule rewrite_module libexec/httpd/mod_rewrite.so
63
64 {{/noformat}}
65
66 , find again:
67
68 {{noformat}}
69
70 AddModule mod_WebObjects.c
71 AddModule mod_rewrite.c
72
73 {{/noformat}}
74
75 There's still a load module in /System/Library/WebObjects/Adaptors/Apache/apache.conf, but you can just ignore it ~-~- it produces a warning about being loaded twice.
76
77 === Mike Schrag ===
78
79 Here's an example mod//rewrite we use on one of our apps~://
80
81 {{code value="xml"}}
82
83 <IfModule mod_rewrite.c>
84 RewriteEngine On
85 RewriteRule ^/$ /page/HomePage [R]
86 RewriteCond %{QUERY_STRING} ^appNum=([-0-9]+)(.*)$
87 RewriteRule ^/page/(.*)$ /cgi-bin/WebObjects/AppName.woa/%1/wa/viewPage?pageName=$1%2 [L,PT]
88 RewriteRule ^/page/(.*)$ /cgi-bin/WebObjects/AppName.woa/wa/viewPage?pageName=$1 [L,PT,QSA]
89 </IfModule>
90
91 {{/code}}
92
93 The WOA produces URLs in the format ##http:~/~/site.com/page/HomePage?appNum=2##, which turns into ##http:~/~/site.com/cgi-bin/WebObjects/AppName.woa/2/viewPage?pageName=HomePage##.
94
95 == WebObjects Adaptor for Apache 2.2 ==
96
97 === Travis Cripps ===
98
99 A number of people have expressed interest in using the WebObjects adaptor with Apache 2.2.x. I finally gotten a chance to sit down and work on it today. I'm writing to let you know that it's available in the Project Wonder CVS repository.
100
101 The necessary changes turned out to be mostly minor updates to change calls to outdated/deprecated functions. The biggest (and non-trivial) change was for SSL support. It's been re-written to use Apache's mod//ssl module.//
102
103 I've tested with MacOS X 10.4.7, Apache 2.2.2, with and without ssl support. It works in all of my tests.
104
105 Configuration of the web server to work with the adaptor turned out to be surprisingly challenging, due to the new, very strict default access rules that ship in Apache 2.2.x httpd.conf file. Once I discovered that, it was trivial to change the setting, but it's worth mentioning here to save some people a lot of frustration.
106
107 The new default configuration is:
108
109 {{code value="xml"}}
110
111 <Directory />
112 Options FollowSymLinks
113 AllowOverride None
114 Order deny,allow
115 Deny from all
116 </Directory>
117
118 {{/code}}
119
120 Your options are to comment out the last 2 lines of that block, or to override them in a VirtualHost block. Just setting the usual Location block didn't seem to work for me.
121
122 And, of course, either change the name of the WebObjectsAlias setting from /cgi-bin/WebObjects to <foo>/WebObjects or comment out the ScriptAlias definition for the /cgi-bin/ directory.
123
124 Other than these tips, it's pretty much the standard compilation and installation, and configuration.
125
126 1. Alter the make.config file in the Adaptors directory of the Wonder repository to reflect your apache installation setup.
127 1. Run make to build the Adaptor
128 1. Curse because of that one setting you forgot. Fix it.
129 1. make clean; make
130 1. Install the mod//WebObjects module with apxs//
131 1. Configure your httpd.conf and either link or copy the WebObjects directory from the standard location (if on MacOS X) to your new htdocs directory.
132 1. apachectl configtest; apachectl graceful
133 1. Test.
134 1. Curse again. Change the httpd.conf file as necessary.
135 1. apachectl graceful. Go to 8 as necessary.
136 1. Finally! apachectl graceful
137
138 Enjoy your shiny new WO adaptor. :)
139
140 * Note: if you are getting the error
141
142 {{noformat}}
143
144 libtool: compile: unable to infer tagged configuration
145 libtool: compile: specify a tag with `--tag'
146 apxs:Error: Command failed with rc=65536
147
148 {{/noformat}}
149
150 Add to the end of your make.config the following:
151 ##CC = gcc##
152
153 Category:WebObjects