Home > front end >  nginx: understanding “=” modifier in location
nginx: understanding “=” modifier in location

Time:06-06

I am trying to add special header for the index.html file following the documentation here: http://nginx.org/en/docs/http/ngx_http_core_module.html#location. I want to provide X-foo: index when requested without any path i.e. requested with /.

I used “=” modifier and tried with this config first:

events {}

http {
    server {
        listen 80;


        root /tmp/web;
        index index.html;

        location = / {
            add_header X-foo "index";
        }

        location / {
            add_header X-foo "other";
        }
    }
}

The problem is, I got X-foo: other for both of / and /foo.html. If I put a return 200 inside the first location block, I get X-foo: index header but without any content.

Now if I specify index.html in the path and specify the config like:

location = /index.html {
   add_header X-foo "index";
}

I get X-foo: index for the / request. Seems like on receiving of / nginx is rerouting the request internally to /index.html again. Is my understanding correct or there is something I am missing while using the “=” modifier?

CodePudding user response:

That is exactly what Nginx does.

The index module internally rewrites the URI from / to /index.html then restarts the search for a matching location to process the request.

The location that finally processes the request is the one that provides the add_header content, not the location that receives the initial request.

  • Related