Nginx 请教如何禁用出 /api/* 之外所有 url (nginx)

dexterdeng · 2012年05月03日 · 最后由 dexterdeng 回复于 2012年05月03日 · 4024 次阅读

最近在做网站的 API 开发,网站服务端只想开发/api/* 和所有静态文件(public/uploads)里。

请问在 nginx 里应该如何配置?

auth_basic "Restricted: ^_^ "; auth_basic_user_file htpasswd;

使用以上命令会 block 所有地址。不是我想要的。

location ~ ^/(users|photos|locatinos|blabla|).* { #所有都列出来 auth_basic "Restricted: ^_^ "; auth_basic_user_file htpasswd; } 使用以上方式,只能对所列出的 url patten 起作用。任然会有很多 url 会遗漏掉。

我想禁用除 (api|uploads) 之外的所有地址,这个命令该如何写呢?谢谢指点。

nginx 的路径匹配是用的 perl 的正则库处理的,采用自上而下的方式逐条匹配,这里有一份 Nginx 的正则表达式文档,可供楼主参考: http://www.howtocn.org/nginx:pcre

很简单,在 top level 启用 auth_basic,然后针对 api 和 uploads 再设置 auth_basic off. 示例:

server {
  # 省略无关配置
  # .....

  auth_basic "SHOW YOUR IDENTITY!!";
  auth_basic_user_file /path/to/htpasswd;

  # 可选:显示自定义的 401 页面
  error_page 401 /401.html;
  location = /401.html {
      auth_basic off;
      root /opt/nginx/html;
  }

  location ~ ^/(api|uploads) {
    auth_basic off;
    # 省略无关配置
    # .....
  }
}


@iwinux 太谢谢你了,你真是天使。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号