10

I need to use redirect map with quite a lot rules (2k+ lines, file size is ~200K)

I have the following settings in nginx:

map $uri $new_uri {
        include /etc/nginx/conf.d/redirects.map;
}

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        # redirects
        if ($new_uri) {
                rewrite ^ $new_uri permanent;
        }

as described here and found here. The problem : configtest fails:

nginx: [emerg] could not build map_hash, you should increase map_hash_bucket_size: 64

I tried to increase map_hash_max_size and map_hash_bucket_size to quite crazy values:

map $uri $new_uri {
        map_hash_max_size 262144;
        map_hash_bucket_size 262144;
        include /etc/nginx/conf.d/redirects.map;
}

but still have the same error (ending exactly with '64'). I selected those values so they are bigger than the file size. I made sure I'm editing live config by adding "blabla" and see 'unknown directive'

So, how those values should be set? There's not much details in the official doc, unfortunately.

3 Answers 3

17

map_hash_max_size and map_hash_bucket_size must be in http context, i.e. outside of map directive.

map_hash_max_size 262144;
map_hash_bucket_size 262144;
map $uri $new_uri {
    include /etc/nginx/conf.d/redirects.map;
}
5
  • I set up right above the map but still got the same error. It's really weird. Nov 19, 2018 at 12:47
  • @KevinNguyen what error?
    – Alexey Ten
    Nov 19, 2018 at 13:52
  • Nginx: could not build map_hash, you should increase map_hash_bucket_size: 64. I posted my answer btw. Nov 19, 2018 at 17:27
  • It is not obvious but it also needs to appear before the map directives. Apr 23, 2019 at 18:05
  • 1
    @AlexeyTen this solution works well in with nginx 1.16 but not with nginx 1.18. Jul 1, 2021 at 15:46
2

I put it on the top of the http {} and it worked. Don't put it outside http {}

0

Add to the top of the http block in the main configuration file (/etc/nginx/nginx.conf):

map_hash_bucket_size 128;
4
  • How does your answer differ from the existing answer? Nov 18, 2018 at 21:10
  • I got the following error: nginx: "map_hash_bucket_size" directive is duplicate in /etc/nginx/conf.d/my-redirect-map.conf:2 using the above answer. This answer indicates that map_hash_max_size is not required and this global setting is better suited to be placed in the main configuration file.
    – tread
    Nov 18, 2018 at 22:10
  • Well, having it twice in your config causes that problem. Nov 18, 2018 at 22:25
  • Yip. Another reason why it is better to put this setting in the main nginx config.
    – tread
    Nov 18, 2018 at 23:37

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.