Our rewrite rules were becoming difficult to manage here, so we decided
to instead use a python script and config file to easily edit and add
rewrite rules.  However, when we implemented this change, we saw what
appears to be a synchronization issue.  I'll try to sum up what we have
in code.

 

Using rewritemap and rewritelock, we made the following changes to our
conf file:

 

In httpd.conf:

RewriteLock /tmp/rewritelockfile.lock

 

In vhost:

RewriteEngine On

RewriteLogLevel 1

RewriteLog  /weblog/httpd/logfile

 

RewriteMap rewritepy prg:/bin/rewriter.py

RewriteRule .* ${rewritepy:%{THE_REQUEST} [L]

 

For the sake of not including too much python code, we will sum up
/bin/rewriter.py as having:

 

while True:

request = sys.stdin.readline()

results = get_redirect(request)

sys.stdout.write(results + "\n")

sys.stdout.flush()

 

In a low traffic environment, there is no problem, but when many users
are hitting this at the same time, we see users getting each other's
redirects.  For example, user 1 asks for page a and user 2 asks for page
b, but user 1 gets page b and user 2 gets page a.  

 

We have tested quite a bit with creating the file ahead of time using
varying permissions to see if any errors or warnings appeared in the
error log but saw nothing.  We set the permissions obviously wrong on
several occasions, but apache didn't seem to notice or care.

 

We have also run strace against the process and cannot see where apache
even attempts to create or access the file when a request is made.

 

We have tested with various versions of apache:

 

Centos 4.7/Apache/2.0.52/httpd-2.0.52-41.ent.centos4

Centos 5/Server version: Apache/2.2.3/httpd-2.2.3-11.el5_1.centos.3

Ubuntu 8.04/Apache/2.2.8(Ubuntu)/apache2.2-common 2.2.8-1ubuntu0.3

 

And we see the same results each time ... does not appear to access the
file.

 

We can confirm that rewrite itself is working and also can see the extra
semaphore being created via ipcs when we have RewriteLock turned on.

 

It was our understanding that the RewriteLock was supposed to prevent
synchronization issues such as this.  

 

Any help would be appreciated.

Reply via email to