Ответ 1
Часть '/api' цели-proxy_pass - это часть URI, на которую ссылается сообщение об ошибке. Так как ifs являются псевдо-местоположениями, а proxy_pass с частью uri заменяет согласованное местоположение заданным uri, это не допускается в if. Если вы просто инвертируете это в случае логики, вы можете заставить это работать:
location /tvoice {
if ($http_user_agent ~ iPhone ) {
# return 301 is preferable to a rewrite when you're not actually rewriting anything
return 301 https://m.domain1.com$request_uri;
# if you're on an older version of nginx that doesn't support the above syntax,
# this rewrite is preferred over your original one:
# rewrite ^ https://m.domain.com$request_uri? permanent;
}
...
if ($http_user_agent !~ facebookexternalhit) {
rewrite ^/tvoice/(.*) http://mydomain.com/#!tvoice/$1 permanent;
}
proxy_pass http://mydomain.com/api;
}