nginx实现静态文件的token认证过程

 更新时间:2024年06月19日 16:39:39   作者:星华先生  
这篇文章主要介绍了nginx实现静态文件的token认证过程,

nginx实现静态文件的token认证

说下思路

  • 1.用户请求携带token请求nginx
  • 2.nginx反问后台服务token是否有效
  • 3.token有效就返回静态资源 无效就返回权限不够

普通的nginx无法编写lua脚本

我们采用openresty版本可以编写lua脚本

lua包需要下载lua-resty-http工具包,地址lua-resty-http,解压后将.lua文件放到 lualib\resty目录下就行。

编写nginx的config的配置 server替换

 server {
        listen       80;
        server_name  localhost;
 
        #charset koi8-r;
 
        #access_log  logs/host.access.log  main;
 
        location / {
            root   html;
            index  index.html index.htm;
        }
 
        #error_page  404              /404.html;
 
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
 
	location / {
		rewrite_by_lua_block {
			-- local cjson = require "cjson"
			-- local http = require "resty.http"
			local httpc = http.new()
			local ngx = ngx
			local headers = ngx.req.get_headers()
			-- get请求参数中T就是token
			local token = headers["token"]
			local request_method = ngx.var.request_method
			local args = nil
			if "GET" == request_method then
				args = ngx.req.get_uri_args()
			elseif "POST" == request_method then
				ngx.req.read_body()
				args = ngx.req.get_post_args()
			end
				
			token = args["token"];
			if not token then
				ngx.header['Content-Type'] = 'text/plain; charset=utf-8';
				ngx.status = ngx.HTTP_FORBIDDEN
				ngx.say("You do not have permission to view the picture.")
				ngx.exit(200)
			end
			-- 字符串拼接
			-- 你要实现token鉴权的服务,header和参数都给你实现了,根据实际需要选择
			local url = "http://127.0.0.1:8080/image/checkToken?token="..token;
				
			local res, err = httpc:request_uri(url, {method="GET", headers={["token"]=token}})
				
			if not res then 
				ngx.header['Content-Type'] = 'text/plain; charset=utf-8';
				ngx.say(cjson.encode({message = "Error getting response",status = ngx.HTTP_INTERNAL_SERVER_ERROR }));					
				ngx.exit(200)
			end
			if res.body == '0' then 
				ngx.header['Content-Type'] = 'text/plain; charset=utf-8';
				ngx.say("You do not have permission to view the picture.");					
				ngx.exit(200)
			end	
			
			}
			root D:\\project;
			
		}
 
 
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
 
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}
 
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }

nginx对特定静态资源访问添加认证

由于nginx上存放了一些私密静态文件,未防止被其他人获取下载地址后私自下载,nginx可针对特定文件目录进行安全认证,输入用户名和密码通过后才能访问,以下为设置过程:

1.安装httpd

httpd里面有一个htpassword工具,用来创建认证文件

yum -y  install httpd

2.配置nginx

vim /etc/nginx/nginx.conf

添加如下配置:

location /qwert {
    root /usr/share/nginx/html; #虚拟主机网站根目录
    index index.html index.htm; #虚拟主机首页
    auth_basic "secret"; #虚拟主机认证命名
    auth_basic_user_file /usr/local/nginx/passwd.db; #虚拟主机用户名密码认证数据库
}

3.使用htpasswd命令生成用户名及对应密码数据库文件

htpasswd -c /usr/local/nginx/passwd.db admin // admin为认证用户名

4.重新加载nginx配置文件

nginx -s reload

5.浏览器访问

http://192.168.11.20/qwert/

如图:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Nginx离线安装的保姆级教程

    Nginx离线安装的保姆级教程

    为了确保gcc-c++和Nginx的正确安装,建议使用yum工具在线下载rpm包,避免手动下载安装时出现依赖缺失的问题,本文就来介绍一下如何离线安装,感兴趣的可以了解一下
    2024-09-09
  • Nginx开源可视化配置工具NginxConfig使用教程

    Nginx开源可视化配置工具NginxConfig使用教程

    这篇文章主要为大家介绍了Nginx开源可视化配置工具NginxConfig使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Nginx七层负载均衡的实现示例

    Nginx七层负载均衡的实现示例

    七层负载均衡它是在应用层,那么它可以完成很多应用方面的协议请求,本文主要介绍了Nginx七层负载均衡的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-04-04
  • Nginx Mirror模块的具体使用

    Nginx Mirror模块的具体使用

    本文主要介绍了Nginx Mirror模块的具体使用,Nginx mirror 模块主要用于镜像客户请求到一组后端服务器,下面就来具体介绍一下,感兴趣的可以了解一下
    2024-05-05
  • Linux下用Nginx作Perl程序服务器及其中Perl模块的配置

    Linux下用Nginx作Perl程序服务器及其中Perl模块的配置

    这篇文章主要介绍了Linux下用Nginx作Perl程序服务器及其中Perl模块的配置,文中使用到了FastCGI中间件进行连接,需要的朋友可以参考下
    2016-02-02
  • docker运行Nginx及配置方法

    docker运行Nginx及配置方法

    这篇文章主要介绍了docker运行Nginx及配置方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-07-07
  • shell脚本实战之部署nginx脚本实例

    shell脚本实战之部署nginx脚本实例

    最近自己编写的Linux一键部署脚本,可以一键部署Nginx,分享给大家,这篇文章主要给大家介绍了关于shell脚本实战之部署nginx脚本的相关资料,需要的朋友可以参考下
    2022-12-12
  • nginx实现请求转发

    nginx实现请求转发

    本文给大家分享的是使用nginx实现代理(请求转发)的教程及简单示例,非常实用,有需要的小伙伴可以参考下
    2017-07-07
  • Windows下用Nginx配置https服务器及反向代理的问题

    Windows下用Nginx配置https服务器及反向代理的问题

    这篇文章主要介绍了Windows下用Nginx配置https服务器及反向代理的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • 如何修改Nginx版本名称伪装任意web server

    如何修改Nginx版本名称伪装任意web server

    这篇文章主要介绍了修改Nginx版本名称伪装任意web server的方法,非常不错,具有参考借鉴价值,感兴趣的朋友一起学习吧
    2016-08-08

最新评论