Nginx 根据 UA 进行逻辑判断,以及 if 的使用

http://agentzh.blogspot.hk/2011/03/how-nginx-location-if-works.html

如上文所述,Nginx 的 if 行为极度诡异,因此应用一个很复杂的 if 会把人搞疯的同时达不到想要的效果。

于是,最好的办法就是借用不同的端口设置不同的 server 段,然后仅用 if 来设置一个反向代理的端口值,然后转移过去。

至于 UA 的判断,使用 $http_user_agent 变量进行正则判断即可。

举个栗子:

server {
    listen 80;
    server_name jiebao100.com;
    rewrite ^/(.*)$ http://www.jiebao100.com/$1 permanent;
}

server {
    # wap static server
    listen 11112;
    root /var/django/devaluation-front/dist;
    location / {
        try_files $uri $uri/ /index.html =404;
    }
}

server {
    # web dynamic django server
    listen 11111;
    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.jiebao100.com;

    client_max_body_size 50m;

    root /var/django/devaluation-front;

    index index.html;

    set $proxy_port 11111;
    #set $proxy_page http://django_devaluation:8000/;
    if ($http_user_agent ~* mobile) {
        set $proxy_port 11112;
    }

    location /docs {
        alias /var/django/devaluation-back/docs/_build/html;
    }

    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;
    }

    location ~ ^/(api|admin|api-auth)(/|$) {
        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:11111;
    }

    location ~ ^/(assets|media) {
        root /var/django/devaluation-back;
        expires 30d;
    }

}

【转载请附】愿以此功德,回向 >>

原文链接:https://www.huangwenchao.com.cn/2016/09/nginx-ua-if.html【Nginx 根据 UA 进行逻辑判断,以及 if 的使用】

发表评论

电子邮件地址不会被公开。 必填项已用*标注