map uri fastcgi_pass
Валентин Бартенев
vbart at nginx.com
Wed Sep 17 08:47:05 UTC 2014
On Wednesday 17 September 2014 04:25:08 Nikolay wrote:
> Здравствуйте, есть задача: перенаправить запрос c uri вида
> /some/path/03_dfsakfa на бекенд server03.domain.tld с номером 03(берется из
> uri).
> Все остальные запросы надо отправлять на upstream fpm.
>
> OS Debian 7.6
> nginx version: nginx/1.2.1
>
> При перезапуске nginx получаю ошибку:
> Restarting nginx: nginx: [emerg] invalid number of the map parameters in
> /etc/nginx/nginx.conf
>
> Подскажите, что я делаю неправильно, где ошибка?
>
> nginx.conf
>
> http {
> ...
> ...
> upstream fpm {
> server 1.1.1.1:9001;
> server 2.2.2.2:9001;
> }
>
> map $uri $back {
> default "fpm";
> ~*"/some/path/(?<key>^\d{2})$(.+)$" server$key\.domain\.tld;
>
> }
[..]
Только в этом месте их сразу три:
1. /some/path/(?<key>^\d{2})$(.+)$
- не похоже на правильное регулярное выражение.
Вероятно хотелось этого:
^/some/path/(?<key>\d{2})_.+$
2. Чтобы экранировать строку с { } - необходимо её всю
брать в кавычки:
"~*^/some/path/(?<key>\d{2})_.+$"
а не только часть.
3. Внутри блока map во второй части может находится
только одна переменная, а не строка:
server$key\.domain\.tld
Читайте http://nginx.org/r/map/ru
А самое главное, это чрезвычайно странный способ решения проблемы.
Правильнее будет как-то так:
location ~* "^/some/path/(?<key>\d{2})_.+$" {
fastcgi_pass server$key\.domain\.tld;
...
}
--
Валентин Бартенев
Подробная информация о списке рассылки nginx-ru