Nginx Http Auth Basic简单网页认证

 

有些资料我们需要把一些东西放在外网,但又不希望被不相关的人访问。这种场景需要一种简单的认证,查了一下nginx的 ngx_http_auth_basic_module,刚好可以实现这个功能。

nginx编译时默认已经包含这个模块,我们只需要做一下简单的配置即可实现http认证。

Example:

location / {
    auth_basic           "closed site";
    auth_basic_user_file conf/htpasswd;
}
  • auth_basic 认证开关,默认是off(即关闭认证)。除了off以外的都是启用auth。
  • auth_basic_user_file 账户密码文件,可以通过htpasswd生成。

htpasswd

htpasswd可以用于生成用户信息

htpasswd [-cimBdpsDv][-C cost] passwordfile username

htpasswd -c -m htpasswd.conf bigbyto
# New password: 
# Re-type new password: 
# Adding password for user bigbyto

把这个配置文件的目录填写到nginx的配置文件即可。

/assets/images/nginx/http_base_auth.png

访问限制

为了防止暴力破解,我们可以用nginx的ngx_http_limit_req_module模块进行访问限制

limit_req_zone $binary_remote_addr zone=limiter:10m rate=20r/s;
server {
    ....
    location / {
      auth_basic           "closed site";
      auth_basic_user_file conf/htpasswd;
      limit_req zone=limiter burst=1 nodelay;
    }
}

上面表示同一ip地址1秒最多只能访问20次,超过限制会立即返回错误。详细配置可以参考ngx_http_limit_req_module

参考链接:
https://nginx.org/en/docs/http/ngx_http_auth_basic_module.html https://nginx.org/en/docs/http/ngx_http_limit_req_module.html