On page: http://code.google.com/p/modwsgi/wiki/FileWrapperExtension , Graham Dumpleton recommends the following:
“Do note however that for the best performance, static files should
always be served by a web server. In the case of mod_wsgi this means
by Apache itself rather than mod_wsgi or the WSGI application.”
I’d like to pre-build a large number of static pages, then have a python program (running under apache/mod_wsgi 3.3/python3.1, daemon mode, no django involved) decide which of them to serve to each user. I’d like the python program to decide, for example, that this guy needs “12345.html” and have it tell Apache, “please serve static file ‘12345.html’ to this guy”, rather than having to use python to open the file, read the contents, turn it into a python string, and return it to mod_wsgi as “[output]”.
Is this possible? If so, how?
If not, what’s the best way to do this?
There are numerous ways one could do it.
Read up on (1) and (3) as more widely used options.
Update with instructions for (2).
Have the WSGI application return a 200 response with empty body and ‘Location’ response header with URL path to local resource hosted on same Apache server and mod_wsgi when daemon mode is being used will trigger an internal redirect to that URL.
Thus if your Apache has:
then generate your file as /some/path/foo.txt in file system and then have the ‘Location’ response header have value ‘/generated-files/foo.txt’ and it will be served up.
Note that anything under ‘/generated-files’ is publicly accessible. If you didn’t want this and wanted it to be private and so only returnable via the specific request which generated the ‘Location’ response header, you need to add mod_rewrite magic that blocks access to that URL except for an internally generated sub request. That from memory needs to be something like: