(摘) Nginx学习及收集

声明:内容源自网络,版权归原作者所有。若有侵权请在网页聊天中联系我

nginx大名,继续学习。

nginx实现多语言跳转不同的url

server {
        listen       80;
        server_name www.text.com;

        location / {

            if ($http_accept_language ~* ^zh)       {
                set $lang zh_CN;
                rewrite (.*)  https://www.baidu.com$1 permanent;
                break;
            }

            if ($http_accept_language ~* ^ko)       {
                set $lang ko_KR;
                rewrite (.*)  https://www.aliyun.com$1 permanent;
                break;
            }
            if ($http_accept_language ~* ^en)       {
                set $lang en_US;
                rewrite (.*)  https://www.google.com$1 permanent;
                break;
            }
        }

}

测试

curl -I http://www.text.com -H "Accept-Language:ko"
curl -I http://www.text.com -H "Accept-Language:zh"
curl -I http://www.text.com -H "Accept-Language:en"

nginx map使用方法

map指令使用ngx_http_map_module模块提供的。默认情况下,nginx有加载这个模块

ngx_http_map_module模块可以创建变量,这些变量的值与另外的变量值相关联。允许分类或者同时映射多个值到多个不同值并储存到一个变量中,map指令用来创建变量,但是仅在变量被接受的时候执行视图映射操作,对于处理没有引用变量的请求时,这个模块并没有性能上的缺失。

还是从实例来学习

http {
    map $http_user_agent $agent {
        ~curl curl;
        ~*chrome chrome;
    }
    server {
        listen      8080;
        server_name test.a.com;
        
        location /hello {
            default_type text/plain;
            echo http_user_agent: $http_user_agent;
            echo agent: agent:$agent;
        }
    }
}

curl http://127.0.0.1:8080/hello

通过curl和chrome浏览器将看到不同的agent返回

匹配请求url的参数

map $args $foo {
    default 0;
    debug   1;
}

$args是nginx内置变量,就是获取请求url的参数。

如果$args匹配到debug,那么$foo的值会被设置为1。如果没匹配到,则使用缺省0。

支持正则表达式,~开头表示对大小写敏感。以~*开头表示对大小写不敏感。

map $uri $value {
    /abc                       /index.php;
    ~^/teacher/(?<suffix>.*)$  /boy/;
    ~/fz(/.*)                  /index.php?fz=1;                           
}

以下示例实现访问域名时,跳转到指定端口。hp.conf中定义了域名与端口的匹配值。

http{
...
map $http_host $pp {
    include hp.conf;
}
server {
	listen 80;
	server_name $http_host;
	location / {
		proxy_pass http://127.0.0.1:$pp;
	}
}
...
}
 

相关文章