.. _nginx_basic_auth: ====================== Nginx基本认证配置 ====================== NGINX支持基本身份认证(basic authentication)和身份验证子请求(authentication subrequests)。NGINX Plus专有模块使用可验证JSON Web Tokens(JWTs)可以支持身份验证标准OpenID连接的第三方身份验证程序集成。 HTTP 基本认证 =================== NGINX使用的基本认证密码和Apache是一样的,格式类似如下:: # comment name1:password1 name2:password2:comment name3:password3 每行配置有2个或3个字段,第3个字段是可选的注释;第2个字段的密码是使用C函数 ``crypt()`` 加密的密码,可以使用 ``openssl passwd`` 命令生成 - 创建一个名为 ``huatai`` 的用户,密码使用 ``openssl passwd -apr1 <密码>`` 生成,密码文件的配置可以位于 ``/etc/nginx/.htpasswd`` : .. literalinclude:: nginx_basic_auth/create_htpasswd :language: bash :caption: 创建HTTP认证文件 - 修订 ``/etc/nginx/nginx.conf`` 在 配置中 对应段落添加: .. literalinclude:: nginx_basic_auth/nginx.conf :language: bash :caption: /etc/nginx/nginx.conf 添加 HTTP Basic Authentication - 重启nginx:: systemctl restart nginx 部分目录关闭认证 ================== 上文配置饿了 ``/`` 目录访问需要密码认证,但是也可能某些目录需要开放给用户下载,例如我在 ``/download`` 目录下提供一些文件给用户直接下载无需认证: .. literalinclude:: nginx_basic_auth/nginx_auth_off.conf :language: bash :caption: ``/download`` 目录关闭 ``auth_basic`` 认证 :emphasize-lines: 6-8 这样就能够在完成认证的同时使得部分目录不需要认证就可以访问 参考 ====== - `Complete NGINX Cookbook `_ Chapter 6. Authentication - `How To Set Up Password Authentication with Nginx on Ubuntu 22.04 `_ - `htpasswd using openssl `_ - `How to override global auth_basic in nginx `_