Cifrões indicam variáveis. Então, se usado em algum lugar não indicando uma variável, eles devem ser escapados.
Sua configuração contém muitas variáveis, nas quais os sinais de cifrão não devem ser ignorados, por exemplo,
proxy_set_header Upgrade \$http_upgrade;
deve ser proxy_set_header Upgrade $http_upgrade;
proxy_set_header Host \$http_host;
deve ler proxy_set_header Host $http_host;
e assim por diante.
A propósito: eu não sou um wiz; -)