Nginx 配置相关内容

根据hostname进行api访问限制

根据hostname对访问api进行配置。

location /flow-service/ 
{
    if ($host = "hostname.com") 
    {
        return 403;
    }
}
  • $host:nginx自带的变量,可以获取到当前的hostname
  • 最后需要有location 那一行最后要有一个/
  • return 403,当访问该api时,会被nginx进行拦截,返回403,且显示nginx默认的403页面
  • 相等判断使用‘=’
  • 字符串使用“”框起来

配置页面访问限制

Nginx会算一个权重,因此直接进行显示配置如:

location /url

会直接算为对api的配置,直接跳转到后端

配置页面访问限制需要配置如:

location /url/url 
{
    root xxxx;
    try_files xxx;
    allow xxx;
    deny xxx;
    if (xxxx) 
    {
        return 403/404;
    }
}

多条件判断

  • Nginx中没有逻辑运算,因此需要写多个 if 而不是使用 || 或者 && 等运算符。

精确匹配与模糊匹配差别

location =/ { … } 与 location / { … } 的差别:

  • 前一个是精确匹配,只响应/请求,所有/xxx或/xxx/xxxx类的请求都不会以前缀的形式匹配到它
  • 后一个是只要以 / 为前缀的请求都会被匹配到。如:/abc , /test/abc, /test/abc/aaaa

正则匹配

  • location ~ /test/.+.jsp$ { … } :正则匹配,支持标准的正则表达式语法。
    • 波浪号(~):表示执行正则匹配,但区分大小写
    • 波浪号与星号(~*):表示执行正则匹配,但不 区分大小写
  • location ^~ / { … } : ^~意思是关闭正则匹配,当搜索到这个普通匹配模式后,将不再继续搜索正则匹配模式。

遇到的问题:

  • “proxy_pass” cannot have URI part in location given by regular expression
    原因:proxy_pass 不能写在正则表达式 / if / limit_except 中
    解决方案:在proxy_pass 后边的uri的最后添加“$1”。
    如:(仅针对API)
location ~ ^/([A-Za-z0-9]+) {
    proxy_pass http://api/urlshortener/v1/$1;
}
或者
location ~ /backend-service/(.*)/static-url {
      proxy_pass <%= ENV["DATA_SERVICE_PATH"] %>$1/static-url;
}
// $1, $2, $3等表示第几个正则表达式变量,正则表达式变量需要用()括起来。

location /backend-service/data {
    proxy_pass <%= ENV["DATA_SERVICE_PATH"] %>data;
    // ENV["DATA_SERVICE_PATH"] = http://website.xxx.xxxx.cn/
}

(<%= ENV["DATA_SERVICE_PATH"] %> 变量可以直接后续想要添加的内容)

如果是页面需要,需要在前边写一个rewrite:

location ~ /backend-service/.+./tableau-url {
      rewrite ^ .+./tableau-url $1
      proxy_pass <%= ENV["DATA_SERVICE_PATH"] %>$1;
}

你可能感兴趣的:(Nginx 配置相关内容)