40

I've seen people use excessive quotes:

add_header 'Access-Control-Allow-Origin' '*';

I've seen people use no quotes:

add_header Access-Control-Allow-Origin *;

Both work fine as far as I know, so when do you actually have to use quotes?

3 Answers3

42

The exact answer is "never". You can either quote or \-escape some special characters like " " or ";" in strings (characters that would make the meaning of a statement ambiguous), so

add_header X-MyHeader "Test String;"; 

would work like

add_header X-MyHeader Test\ String\;;

In reality: Just use quotes :)


Edit: As some people love to nitpick: The not necessarily complete list of characters that can make a statement ambiguous is according to my understanding of the nginx config syntax:

<space> " ' { } ; $ \ 

and it might be necessary to escape $ and \ even in quoted strings to avoid variable expansion.

Unfortunately, I can't find a complete and authoritative list of such characters in the docs.

Sven
  • 100,763
8

Quotes are required for values which are containing space(s) and/or some other special characters, otherwise nginx will not recognize them. In your current example quotes make no difference, but anyway quoting values is a good practice/rule of thumb

user1700494
  • 1,662
3

One snippet from the documentation for 'if':

If a regular expression includes the “}” or “;” characters, the whole expressions should be enclosed in single or double quotes.

There is also mention of escaping the source (left-side match) values in a map:

If a source value matches one of the names of special parameters described below, it should be prefixed with the “\” symbol...

  • default value ...
  • hostnames ...
  • include file ...
  • volatile