Nginx动态位置取决于使用的设备

时间:2017-02-17 03:22:15

标签: nginx

我要做的是指定用户通过手机或网络访问我们网站的位置。这是我在启用站点的文件上的配置: 请注意评论由SHARP启动的线

map $http_user_agent $is_desktop {
    default 0;
    ~*linux.*android|windows\s+(?:ce|phone) 0; # exceptions to the rule
    ~*spider|crawl|slurp|bot 1; # bots
    ~*windows|linux|os\s+x\s*[\d\._]+|solaris|bsd 1; # OSes
}

map $is_desktop $is_mobile {
    1 0;
    0 1;
}

server {

    listen 80;
    server_name example.com;
    charset utf-8;
    if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})") {
        set $year $1;
        set $month $2;
        set $day $3;
    }
    access_log /usr/logs/nginx/lion/lion.$year-$month-$day.log;

    if ($is_mobile) {
        location / {
            root /usr/src/app1
    }

    if ($is_desktop) {
        location / {
            root /usr/src/app2;
        }
    }

    error_page  405     =200 $uri;
}

请注意,域名不会更改,子域名将不会被使用

这就像使用不同的前端代码集在域上呈现一样,具体取决于所使用的设备。有可能吗?

1 个答案:

答案 0 :(得分:1)

您可以使用device-detection等社区模块编译nginx。

或者您可以将以下内容与if语句一起使用。

## Testing a user agent using a method that reverts the logic of the
## UA detection. Inspired by notnotmobile.appspot.com.
map $http_user_agent $is_desktop {
    default 0;
    ~*linux.*android|windows\s+(?:ce|phone) 0; # exceptions to the rule
    ~*spider|crawl|slurp|bot 1; # bots
    ~*windows|linux|os\s+x\s*[\d\._]+|solaris|bsd 1; # OSes
}

## Revert the logic.
map $is_desktop $is_mobile {
    1 0;
    0 1;
}

请注意,您应该添加缺少的代理字符串,并定期更新。

如果示例:

location / {
    if ($is_mobile) {
        root /usr/src/lion;
    }
    if ($is_desktop) {
        root /usr/src/marty;
    }
}

完整配置:

map $http_user_agent $is_desktop {
    default 0;
    ~*linux.*android|windows\s+(?:ce|phone) 0; # exceptions to the rule
    ~*spider|crawl|slurp|bot 1; # bots
    ~*windows|linux|os\s+x\s*[\d\._]+|solaris|bsd 1; # OSes
}

map $is_desktop $is_mobile {
    1 0;
    0 1;
}

server {

    listen 80;
    server_name example.com;
    charset utf-8;
    if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})") {
        set $year $1;
        set $month $2;
        set $day $3;
    }
    access_log /usr/logs/nginx/lion/lion.$year-$month-$day.log;

    location / {

        if ($is_mobile) {

            root /usr/src/app1;
            break;

        }

        if ($is_desktop) {

            root /usr/src/app2;

        }
    }
    error_page  405     =200 $uri;
}