34

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?

Pothi Kalimuthu
  • 5,734
  • 2
  • 24
  • 37
Oliver Salzburg
  • 4,505
  • 16
  • 53
  • 80

3 Answers3

39

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
  • 97,248
  • 13
  • 177
  • 225
  • 8
    It's not always about nitpicking. Configuration file might be generated by a third-party software. Which might be provided with a template and variables to be interpolated. The software can't be sure what the variables can contain, so ideally it should know how to quote any string. – x-yuri Jan 26 '19 at 14:16
  • e.g. `try_files $uri $uri/ /index.php$request_uri;` vs `try_files '$uri' '$uri/' '/index.php$request_uri';`. In the former, Nginx variables get expanded, in the latter - processed as plain string. `'/index.php'$request_uri;` might make sense, perhaps, too. Related: https://gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html – Faither Sep 12 '22 at 12:42
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,642
  • 2
  • 11
  • 20
  • 3
    What are the list of special characters. Is there documentation on this and how to escape them. I've seen both single and double quotes on the same lines... – Pork 'n' Bunny Sep 12 '17 at 15:23
2

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
Ed Randall
  • 168
  • 6