Nginx + embedded perl, sharing variables across workers

Maxim Dounin mdounin at
Thu Apr 7 03:17:59 MSD 2011


On Wed, Apr 06, 2011 at 05:28:51PM -0400, yuri wrote:

> Hi,
> I have written a perl handler that generates a random value and needs to
> maintain the same value consistently across all other perl handlers (as
> there is 1 perl handler per nginx worker) until the workers are
> restarted;
> I've attempted to do so by issuing $r->variable('varname', $rand) to no
> avail - is it impossible to set a variable defined in nginx.conf and
> have the new setting affect any further reads of that variable from
> other workers?
> Which options do I have if I'd like to share $varname across multiple
> perl handlers?

Request variables ($r->variable) are per-request, not even 
per-worker.  Normal perl variables are per worker as worker uses 
one perl interpreter.

To share data between multiple workers use normal IPC facilities 
provided by perl (but keep in mind blocking for too long isn't 
good idea).  Something like IPC::Shareable / IPC::Mmap::Share 
should do the trick.

Maxim Dounin

More information about the nginx mailing list