2016-09-08 1 views
0

Я делаю две версии веб-сайта, один для ПК, а другой для мобильных устройств.

Версия для ПК проходит через django, которая указывает на обратное_проксирование через http://127.0.0.1:8000/.

Хотя мобильная версия обслуживает только статический путь в /path/for/mobile.

Я пробовал много способов, например, но не могу заставить его работать.

location/{ 
    if ($http_user_agent ~ Mobile) { 
     root /path/for/mobile; 
    } 
    else { 
     proxy_set_header Host $http_host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Scheme $scheme; 
     proxy_pass http://127.0.0.1:8000; 
    } 
} 
+0

В каких документах вы читали о 'else'? – Melvyn

ответ

0

После некоторой попытки, получается, что дополнительный сервер с фиксированным номером порта работает хорошо.

Оператор if влияет только на числовую переменную, которая влияет на прокси-сервер порта на другую версию любого содержимого.

server { 
    # static server 
    listen 11112; 
    root /path/to/static/html; 
} 

server { 
    # dynamic server 
    listen 11111; 
    client_max_body_size 300m; 
    location/{ 
     proxy_set_header Host $http_host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Scheme $scheme; 
     proxy_pass http://django_devaluation:8000/; 
    } 
} 

server { 
    listen 80; 
    server_name www.example.com; 
    index index.html; 

    // here do the condition separation 
    set $proxy_port 11111; 
    if ($http_user_agent ~* mobile) { 
     set $proxy_port 11112; 
    } 

    location/{ 
     proxy_set_header Host $http_host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Scheme $scheme; 
     proxy_pass http://127.0.0.1:$proxy_port; 
    } 
} 
0

Попробуйте это - если мобильный, используйте корень по умолчанию, иначе proxy_pass.

location/{ 
    set $mobile 0; 
    root /path/for/mobile; 
    if ($http_user_agent ~ Mobile) { 
     set $mobile 1; 
    } 
    if ($mobile = 0) { 
     proxy_set_header Host $http_host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Scheme $scheme; 
     proxy_pass http://127.0.0.1:8000; 
     break; 
    } 
} 
0

Единственные безопасные операции над nginx, если блоки переписываются и возвращаются.
Попробуйте что-то вроде:

if ($mobile = 0) { 
    add_header Content-Type text/plain; 
    return 200 "Desktop Version"; 
    break; 
} 

, чтобы убедиться, что $ мобильная переменная установлена ​​правильно, то:

if ($mobile = 0) { 
    rewrite^/desktopProxy/$request_uri; 
} 

location ~* ^/desktopProxy/(.*)$ { 
    ... 
    proxy_pass http://127.0.0.1:8000/$1$is_args$args; 
    break; 
} 

Я не проверял "$ 1 $ is_args $ арг" состояние, убедитесь, что перед использованием на prod.