2014-12-09 2 views
0

первый раз, когда я пытаюсь установить nginx. У меня есть следующая проблема, которую я бы хотел решить.Маршрутизированный трафик с печеньем Nginx

У меня есть две версии бэкенда v1 и v2.

Пользователь направляется на "/" v2 (proxy_pass '127.0.0.1:3000;')

движения Tru "/" (JavaScript + розетки) имеет быть направлен к тому же серверу «127.0.0.1:3000 ;» посмотрев на печенье.

Heres моя проблема куки не существует, и, следовательно, 404 будут возвращены

Любое предложение?

map $cookie_version $site_version { 
    default  ""; 
    "v1" "version=v1;Domain=localhost;Path=/"; 
    "v2" "version=v2;Domain=localhost;Path=/"; 
} 

server {  
    listen 8081; 
    server_name localhost; 

location/{ 
    if ($cookie_version ~* "v1") { 
     proxy_pass http://127.0.0.1:8080; 
    }  
    if ($cookie_version ~* "v2") { 
     proxy_pass http://127.0.0.1:3000; 
    } 
} 

location /v1 { 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection "upgrade"; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header Host $host; 
    proxy_http_version 1.1; 

    set $cookie_version "v1"; 
    add_header Set-Cookie $site_version; 

    rewrite ^/v1(.*) /$1 break; 

    proxy_pass http://127.0.0.1:8080; 
} 
location /v2 { 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection "upgrade"; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header Host $host; 
    proxy_http_version 1.1; 

    set $cookie_version "v2"; 
    add_header Set-Cookie $site_version; 

    rewrite ^/v2(.*) /$1 break; 

    proxy_pass http://127.0.0.1:3000; 
} 
} 

ответ

0

Прежде всего, прочитайте почему, если это зло http://wiki.nginx.org/IfIsEvil. Вместо этого используйте map. Мое предложение:

map $cookie_version $mybackend { 
    default "127.0.0.1:3000"; 
    "v1" "127.0.0.1:8080"; 
    "v2" "127.0.0.1:3000"; 
} 
... 
location/{ 
    proxy_pass http://$mybackend; 
} 
... 
location ~ ^/(?<cver>v[12])/ { 
    ... 
    add_header Set-Cookie "version=$cver;Domain=localhost;Path=/"; 
    rewrite ^/v[12]/(.*)$ /$1 redirect; 
} 
+0

ах, спасибо ... Но я не сохраняю cookie по какой-то причине, я не понимаю. Есть идеи? – Karl

+0

Получаете ли вы этот сервер формы cookie? Проверьте с помощью инструментов разработчика браузера. Возможно, вам неприятно, потому что домен localhost, попробуйте что-то вроде localhost.com (отредактируйте файл 'hosts' для него) –

+0

Спасибо, что сделал это! – Karl

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