Skip to content

use shared memory#13

Open
Lex-2008 wants to merge 1 commit into
masonicboom:masterfrom
Lex-2008:use-shmem
Open

use shared memory#13
Lex-2008 wants to merge 1 commit into
masonicboom:masterfrom
Lex-2008:use-shmem

Conversation

@Lex-2008

@Lex-2008 Lex-2008 commented Jan 7, 2025

Copy link
Copy Markdown

Issue was that different worker processes had different value of "nonce", thus producing different ipscrub value for same IP.

Consider this nginx.conf:

load_module modules/ngx_ipscrub_module.so;
events {
  accept_mutex on;
}
worker_processes 2;
daemon off;
http {
  server {
listen 8000 default_server reuseport;
location / { return 200 "hello from $pid $remote_addr_ipscrub\n"; }
  }
}

interesting parts here are accept_mutex on and worker_processes 2 - these two options mean that nginx will start two worker processes, and they will accept connections by turn. For some reason, I also had to add reuseport to listen for this to work, too.

If you run nginx with above config and run curl in a loop, you would get output like this:

$ while true; do curl localhost:8000/; done
hello from 533073 1xGVi2
hello from 533072 +G8Qbi
hello from 533073 1xGVi2
hello from 533072 +G8Qbi
hello from 533072 +G8Qbi
hello from 533072 +G8Qbi
hello from 533073 1xGVi2
hello from 533072 +G8Qbi
^C

Probably that's not what you wanted :)

This commit fixes it by using shared memory.
As another benefit, nonce now also "survives" nginx reconfiguration events.

Issue was that different worker processes had different value of
"nonce", thus producing different ipscrub value for same IP.

Consider this nginx.conf:

    load_module modules/ngx_ipscrub_module.so;
    events {
      accept_mutex on;
    }
    worker_processes 2;
    daemon off;
    http {
      server {
	listen 8000 default_server reuseport;
	location / { return 200 "hello from $pid $remote_addr_ipscrub\n"; }
      }
    }

interesting parts here are `accept_mutex on` and `worker_processes 2` - these
two options mean that nginx will start two worker processes, and they will
accept connections by turn. For some reason, I also had to add `reuseport` to
`listen` for this to work, too.

If you run nginx with above config and run curl in a loop, you would get output
like this:

$ while true; do curl localhost:8000/; done
hello from 533073 1xGVi2
hello from 533072 +G8Qbi
hello from 533073 1xGVi2
hello from 533072 +G8Qbi
hello from 533072 +G8Qbi
hello from 533072 +G8Qbi
hello from 533073 1xGVi2
hello from 533072 +G8Qbi
^C

Probably that's not what you wanted :)

This commit fixes it by using shared memory.
As another benefit, nonce now also "survives" nginx reconfiguration events.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant