使用nginx给网站添加身份认证

使用nginx给网站添加身份认证

basic auth

默认情况下nginx已经安装了ngx_http_auth_basic_module模块,如果不需要这个模块,可以加上 --without-http_auth_basic_module 。

nginx basic auth指令

语法: auth_basic string | off;
默认值: auth_basic off;
配置段: http, server, location, limit_except

默认表示不开启认证,后面如果跟上字符,这些字符会在弹窗中显示。

语法: auth_basic_user_file file;
默认值: —
配置段: http, server, location, limit_except

用户密码文件,文件内容类似如下:

username:passwd:comment
用户名:密码:注释
  1. 使用htpasswd工具加密密码

    sudo apt install apache2-utils
    sudo htpasswd /usr/local/nginx/conf/htpasswd username //输入两遍密码
  2. 修改nginx配置
    sudo vim /usr/local/nginx/conf/nginx.conf
    在http段添加:
        auth_basic "nginx basic http auth test for auth.test.com";
        auth_basic_user_file /usr/local/nginx/conf/htpasswd;
        autoindex_exact_size off;
        autoindex_localtime on;
        autoindex on;
  3. 重启nginx服务
    sudo nginx -t
    sudo nginx -s reload
  4. 去浏览器验证现在访问域名下的资源都需要先登陆认证才可以

ngx_http_auth_request_module 第三方认证

编译 Nginx 时需要添加该模块 --with-http_auth_request_module
该模块可以将客户端输入的用户名、密码 username:password 通过 Base64 编码后写入 Request Headers 中
例如:wang:wang -> Authorization:Basic d2FuZzp3YW5n=
然后通过第三方程序解码后跟数据库中用户名、密码进行比较,Nginx 服务器通过 header 的返回状态判断是否认证通过。

  • 编辑nginx配置文件
server {
    listen 80;
    server_name local.server.com;

    auth_request /auth;

    location / {
        root   html;
        index  index.html;
    }

    location /auth {
        proxy_pass http://auth.server.com/HttpBasicAuthenticate.php;
        proxy_pass_request_body off;
        proxy_set_header Content-Length "";
        proxy_set_header X-Original-URI $request_uri;
    }
}

# auth_request /auth; # 启用认证
# proxy_pass http://auth.server.com/HttpBasicAuthenticate.php; # 认证服务器地址
# 参考地址:http://nginx.org/en/docs/http/ngx_http_auth_request_module.html
  • 添加第三方认证服务器

    vim /usr/local/nginx/conf/vhost/auth.conf  # 这是第三方认证服务器,认证逻辑使用的 PHP 代码
    
    server {
        listen       80;
        server_name  auth.server.com;
        root /usr/local/nginx/auth;
    
        location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx-1.10.2/html$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
  • 添加认证程序
    vim /usr/local/nginx/auth/HttpBasicAuthenticate.php
    
    <?php
    if(isset($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'])){
        $username = $_SERVER['PHP_AUTH_USER'];
        $password = $_SERVER['PHP_AUTH_PW'];
    
        if ($username == 'wang' && $password == '123456'){
            return true;
        }
    }
    
    header('WWW-Authenticate: Basic realm="Git Server"');
    header('HTTP/1.0 401 Unauthorized');
  • 用户访问 local.server.com 弹出框中输入的用户名、密码保存在 $_SERVER 变量中
    中间 if 段,只做演示用,工作中应该是拿用户输入的用户名、密码跟数据库中的数据做比较
    用户访问 local.server.com 就会去 auth.servere.com 做用户认证,认证通过后继续访问 local.server.com

原文地址:https://www.cnblogs.com/super-lulu/p/11741591.html

时间: 2024-10-06 16:19:20

使用nginx给网站添加身份认证的相关文章

使用nginx 的反向代理 给 kibana加上basic的身份认证

第一步准备工作 准备用户名密码: 更改host文件 第二步,安装nginx ubuntu安装Nginx之后的文件结构大致为:所有的配置文件都在/etc/nginx下,并且每个虚拟主机已经安排在了/etc/nginx/sites-available下启动程序文件在/usr/sbin/nginx日志放在了/var/log/nginx中,分别是access.log和error.log并已经在/etc/init.d/下创建了启动脚本nginx默认的虚拟主机的目录设置在了/usr/share/nginx/

SharePoint 2013 配置基于表单的身份认证

前 言 这里简单介绍一下为SharePoint 2013 配置基于表单的身份认证,简单的说,就是用Net提供的工具创建数据库,然后配置SharePoint 管理中心.STS服务.Web应用程序的三处web.config即可.下面,让我们以图文的方式了解创建的具体过程吧. 使用微软提供的工具,创建数据库,找到Framework64下的aspnet_regsql,如下图: 这里我发现C:\Windows\Microsoft.NET\Framework64的v2.0.50727路径下和v4.0.303

简单的ASP.NET Forms身份认证

读了几篇牛人的此方面的文章,自己也动手做了一下,就想有必要总结一下.当然我的文章质量自然不能与人家相比,只是写给从没有接触过这个知识点的朋友. 网站的身份认证我以前只知道session,偶然发现一些牛人提倡用Forms方式,微软官方也推荐这种方法.详见使用Session作为身份识别的问题 ASP.NET的身份认证方式是在web.config文件中configuration->system.web->authentication指定,如 [html] view plain copy print?

WebAPI 身份认证解决方案——Phenix.NET企业应用软件快速开发平台.使用指南.21.WebAPI服务(一)

21   WebAPI服务 ASP.NET Web API,是微软在.NET Framework 4.5上推出的轻量级网络服务框架,虽然作为ASP.NET MVC 4的一部分,但却是一套全新的.独立的服务平台开发框架,可支持多种(包括移动)客户端的访问,非常适合于网络平台应用的开发. Phenixヾ在ASP.NET Web API服务框架.及其自身业务框架(封装CSLA)基础上,为跨平台应用系统的实现提供了全面的数据服务,并为服务访问提供了身份认证.权限验证等辅助功能. 21.1   启动服务

Nginx对某个目录或整个网站进行登录认证的方法

比如要对 网站目录下的 test 文件夹 进行加密认证 首先需要在opt 的主目录中 /opt/ 创建一个新文件 htpasswd 此文件的书写格式是 用户名:密码 每行一个账户 并且 密码必须使用函数 crypt(3) 加密 官方档说 可以用 Apache 的 htpasswd 工具来创建密码文件 [[email protected] /]# htpasswd -bash: htpasswd: command not found [[email protected] /]# 如果上述提示则需要

nginx配置网站所有目录下文件http认证

要实现网站所有目录均通过验证才能访问,可将nginx配置文件加为如下内容: location ^~ / { auth_basic "Authorized users only"; auth_basic_user_file wttxAuth.conf; } 这样访问网站及网站下所有文件均出现提示验证了. 注意,加上认证之后该目录下的PHP将不会被解析,会出现下载提示,如果想可以解析PHP可以将上面的配置改为: location ^~ / { location ~ .*.(php|php5

IE11下Forms身份认证无法保存Cookie的问题

ASP.NET中使用Forms身份认证常见的做法如下: 1. 网站根目录下的Web.config添加authentication节点 <authentication mode="Forms"> <forms name="MyAuth" loginUrl="manager/Login.aspx" defaultUrl="manager/default.aspx" protection="All&quo

基于http协议的api接口对于客户端的身份认证方式以及安全措施[转]

基于http协议的api接口对于客户端的身份认证方式以及安全措施 由于http是无状态的,所以正常情况下在浏览器浏览网页,服务器都是通过访问者的cookie(cookie中存储的jsessionid)来辨别客户端的身份的,当客户端进行登录服务器也会将登录信息存放在服务器并与客户端的cookie中的jsessionid关联起来,这样客户端再次访问我们就可以识别用户身份了. 但是对于api服务器,我们不能让访问者先登录再进行访问这样不安全,也不友好.所以一般情况我们都是需要客户端提供一个key(每个

nginx 设置网站目录访问验证方法【转载】

为网站目录设置访问验证之后我们就是进入此页面都需要输入验证密码才可以,下面我来介绍nginx中配置目录访问验证码方法总结. 1.创建类htpasswd文件 执行:  代码如下 复制代码 wget -c soft.vpser.net/lnmp/ext/htpasswd.sh;bash htpasswd.sh 按提示输入用户名.密码.及认证文件名.脚本会自动生成认证文件.记录下脚本返回的文件路径.如:/usr/local/nginx/conf/vpser.net.auth. 2.为Nginx添加au