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