2016-10-12 2 views
1

У меня есть обратный Nginx прокси-сервер, где я хочу, чтобы направить все запросы, которые приходят с использованием:перенаправления запроса Nginx URL

http://dns.com/content/xyz <—to—> http://dns.com/content/1.0/xyz

У меня есть вверх по течению:

upstream backend_api.content.com { 
     server localhost:8080 max_fails=5 fail_timeout=30; 
     keepalive 100; 
    } 

и расположение:

#Content Service 
location ~* ^/content/?(.*) { 
    set $proxy_pass "http://backend_api.content.com"; 
    rewrite ^/content/1.0(/.*)$ /content/1.0$1 break; 
    proxy_pass $proxy_pass 
    proxy_http_version 1.1; 
    proxy_set_header Connection ""; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header Host "api.stg.xxx.com"; 
    proxy_set_header X-3scale-proxy-secret-token $secret_token; 
    proxy_set_header Original-Host $http_host; 
    proxy_set_header Authorization $outbound_auth_header; 
    proxy_set_header Original-Uri $scheme://$http_host$uri; 
    post_action /out_of_band_oauth_authrep_action; 
    } 

, но кажется, что-либо с http://dns/content/xyz fa ils, и только когда я даю http://dns/content/1.0/xyz, это сработает.

ответ

1

Вы, кажется, захватываете часть URI в инструкции location ~* ^/content/?(.*), но ничего не делаете с этим.

У вас также есть оператор rewrite ^/content/1.0(/.*)$ /content/1.0$1 break;, который ничего не делает, он просто пишет тот же URI.

быстрый и грязный раствор может быть использовать два rewrite заявления, как это:

rewrite ^/content/1.0(/.*)$ /content/1.0$1 break; 
rewrite ^/content(/.*)$ /content/1.0$1 break; 

Это означает, что все, что не соответствует первой (не-) перезапись будет обрабатываться второй, и получить a /1.0 вставлен.

Лично мне это не нравится, и предпочел бы использовать два блока местоположение:

location /content/1.0 { 
    set $proxy_pass "http://backend_api.content.com"; 
    proxy_pass $proxy_pass; 
    proxy_http_version 1.1; 
    proxy_set_header ... 
    ... 
} 
location /content { 
    rewrite ^/content(/.*)$ /content/1.0$1 last; 
} 

Но проверить порядок оценки ваших других location блоков. Обратите внимание, что блоки блокировки префикса и блоки местоположения регулярного выражения имеют разные правила оценки. См. this document.

Смежные вопросы