1. Nginx自带的登录认证

针对限制的资源,可以开启账号登陆的方式进行访问。

1.1. http_auth_basic_module

1.1.1. auth_basic

  1. Syntax: auth_basic string | off ;
  2. Default: auth_basic off ;
  3. Context: http,server,location,limit_expect

1.1.2. auth_basic_user_file

  1. Syntax: auth_basic_user_file path ;
  2. Default: Close
  3. Context: http,server,location,limit_expect

1.2. 说明

  • auth_basic中的string 是登陆的提示信息,off代表关闭继承上级的auth_basic认证
  • auth_basic_user_file 指定存放用户名和密码的文件,建议也放在配置文件中,命名为$CONF/auth_user_file
  • auth_basic_user_file 文件加密方式支持以下三种:

    • 使用htpasswd或者openssl passwd加密的密文,常用htpasswd
    • 基于MD5的密码算法(apr1)的apache变体进行散列
    • SHA-1哈希,不建议使用,仅适合从其他web服务器迁移时使用,安全性很低

      1.3. 局限性

      此方法依赖本地文件,当账号复杂后,管理效率低下。解决方法如下:
  • Nginx + LUA 实现高效验证

  • Nginx 与 LDAP 打通,利用nginx_auth_ldap模块进行操作

在实际的应用中,很少使用Nginx自带的认证系统,一般都是由Java、Python等语言实现统一的认证登陆系统,将用户名和加密后的密码存放在数据库中。Nginx自带的认证系统仅作为了解即可。

2. 案例

2.1. Nginx配置

[root@centos-81 conf.d]# cat auth.conf

  1. server {
  2. listen 80 ;
  3. server_name www.heyang.com ;
  4. root /usr/share/nginx/html;
  5. auth_basic "Please login !" ;
  6. auth_basic_user_file /etc/nginx/auth_user_file ;
  7. location / {
  8. index index.html index.htm;
  9. }
  10. location /bsfw {
  11. index index.html index.htm;
  12. auth_basic off ;
  13. }
  14. location ~ /gt[a-z]+ {
  15. proxy_pass http://www.jsmlr.gov.cn ;
  16. auth_basic off ;
  17. }
  18. error_page 500 502 503 504 /50x.html;
  19. }

预期结果: www.heyang.com 域名中除了 ~ /gt[a-z]+ 和 /bsfw 之外,全部需要验证,即使/bsfw中引用的资源。

2.2. 创建访问用户

[root@centos-81 ~]# htpasswd -c /etc/nginx/auth_user_file hy01 ## 交互式
[root@centos-81 ~]# htpasswd -b /etc/nginx/auth_user_file hy02 123456 ## 非交互式
[root@centos-81 ~]# cat /etc/nginx/auth_user_file ## 使用盐值加密后,无法简单解密
hy01:$apr1$RfzVienZ$7N2XC5Eqo7x9xLYQbMlu4.
hy02:$apr1$NBUQTps0$VrSK/MdGbk3gleb7dFRA61

2.3. 测试

未命名图片.png