Nginx请求参数解析

这篇具有很好参考价值的文章主要介绍了Nginx请求参数解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

nginx 获取参数,nginx,运维
例: $arg_token 取的就是 uri?args 中 token=xxx 的部分

$arg_PARAMETER #这个变量包含GET请求中,如果有变量PARAMETER时的值。

$args #这个变量等于请求行中(GET请求)的参数,例如foo=123&bar=blahblah;

$binary_remote_addr #二进制的客户地址。

$body_bytes_sent #响应时送出的body字节数数量。即使连接中断,这个数据也是精确的。

$content_length #请求头中的Content-length字段。

$content_type #请求头中的Content-Type字段。

$cookie_COOKIE #cookie COOKIE变量的值

$document_root #当前请求在root指令中指定的值。

$document_uri #与$uri相同。

$host #请求主机头字段,否则为服务器名称。

$hostname #Set to the machine’s hostname as returned by gethostname

$http_HEADER

$is_args #如果有$args参数,这个变量等于”?”,否则等于”",空值。

$http_user_agent #客户端agent信息

$http_cookie #客户端cookie信息

$limit_rate #这个变量可以限制连接速率。

$query_string #与$args相同。

$request_body_file #客户端请求主体信息的临时文件名。

$request_method #客户端请求的动作,通常为GET或POST。

$remote_addr #客户端的IP地址。

$remote_port #客户端的端口。

$remote_user #已经经过Auth Basic Module验证的用户名。

$request_completion #如果请求结束,设置为OK. 当请求未结束或如果该请求不是请求链串的最后一个时,为空(Empty)。

$request_method #GET或POST

$request_filename #当前请求的文件路径,由root或alias指令与URI请求生成。

$request_uri #包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。不能修改。

$scheme #HTTP方法(如http,https)。

$server_protocol #请求使用的协议,通常是HTTP/1.0或HTTP/1.1。

$server_addr #服务器地址,在完成一次系统调用后可以确定这个值。

$server_name #服务器名称:域名或IP 那部分。     // 例: set $auth_request_uri "http://$server_name:8090/system/user/auth?$args";

$server_port #请求到达服务器的端口号。

$uri #不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。该值有可能和$request_uri 不一致。$request_uri是浏览器发过来的值。该值是rewrite后的值。例如做了internal redirects后。

使用auth_request做权限控制

背景:生产环境对于图片使用 标签来显示图片,或使用 element-ui 的 标签进行图片预览;

但是直接访问 url: http://192.168.0.225:8002/file/20231011/%E7%B3%BB%E7%BB%9F%E7%AE%A1%E7%90%86%E5%B7%A5%E4%BD%9C%E7%AB%99_531011143641805.pdf
浏览器会下载文件
或 直接 <img src = http://192.168.0.225:8002/file/20231011/wu2_531011104758539.png"。

所有人在外网都可以访问,不安全。不会经过java 后端接口的 @SaCheckLogin 鉴权。
所以,要么不直接访问 ,而是通过后端接口返回。 要么在nginx 层加一个权限校验, lua 鉴权或 通过 nginx 自带的模块 --with-http_auth_request_module

为了省事,采用了 nginx的 模块方式:
所以,前端开发人员就需要在图片加载过程中携带验证的信息。如 token,用于身份验证、权限控制等方面。通过在图片的 URL 后面(get请求方式),或请求头中携带 token 信息,从而实现图片信息的安全传输。
同时 后端增加一个单纯的鉴权接口:
/system/user/auth

    @SaCheckLogin
    @GetMapping("/auth")
    public String info() throws Exception {
        try {
            return LoginHelper.getUsername();
        }catch (Exception e){
            throw new Exception("用户未登录!"+e.getMessage());
        }
    }

浏览器访问图片链接,然后根据request中的token信息判断此用户是否登录态 若是则返回 response.setStatus(200)
若不是登录态,则400.

技术:采用Nginx自带的auth_request模块(网上也有一些其他的方法比如安装redis模块,在nginx里直接查询redis,这里我们不做介绍)。

开启auth_request

需要重新编译nginx源码,把auth_request加入到nginx中,(1.5.4以上,默认包含auth_request,需要编译的时候开启)

配置校验参数

log_format  pro '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                              '"$http_referer" "$http_user_agent" $request_time req_body:"$request_body"'
                      '"$http_user_agent" "$http_x_forwarded_for"';
server {
    listen 8002;

    server_name 192.168.0.225 localhost api.ltkj.com;

    # root /data/wwwroot/static.ltkj.com/project;
    # 重定向到error401 时用
    proxy_intercept_errors on;

    #禁止访问的文件或目录
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
    {
        return 404;
    }
  // 处理文件
    location ^~ /file/ {
        # expires      30d;
        set $auth_request_uri "http://$server_name:8090/system/user/auth?$args";

        auth_request /auth;
        auth_request_set $user $upstream_http_x_forwarded_user;
        proxy_set_header X-Forwarded-User $user;

        error_page 401 500 = /error401;
        root /data/wwwroot/static.ltkj.com/project;
    }
// 处理图片
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
                                # img 标签 header中设置 token方式 未成功,待测试
                                add_header Access-Control-Allow-Origin *;
                                add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
                                add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';

         auth_request /auth;
         error_page 401 500 = /error401;
         auth_request_set $user $upstream_http_x_forwarded_user;
         proxy_set_header X-Forwarded-User $user;
         set $auth_request_uri "http://$server_name:8090/system/user/auth?$args";

         root /data/wwwroot/static.ltkj.com/project;
    }

    location /auth {
        # 表示该路径仅仅为nginx内部访问,一旦出了这个配置文件,则失效
        internal;
        # 自己系统的认证路径
        # proxy_pass http://localhost:8090/system/user/auth;
        proxy_pass $auth_request_uri ;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Original-URI $request_uri;
        proxy_set_header X-Original-METHOD $request_method;

        error_page 401 500  = /error401;
    }
        # 认证失败后的处理
    location = /error401 {
        # 强制浏览器不使用缓存,防止缓存带来的还能访问系统
        # 如果认证失败,跳转到自己系统的登录页面
        return 302 http://192.168.0.225:8001/index;
    }


    access_log  /data/logs/nginx/project_manager/access.log pro;
    error_log  /data/logs/nginx/project_manager/error.log ;
}

灵魂代码!灵魂代码!灵魂代码!

set $auth_request_uri "http://192.168.0.225:8090/system/user/auth?$args";

我的项目需求是对图片做权限校验,图片展示是直接在img标签里面展示的,因此,没法做请求头的设置,需要在链接后面携带校验信息。如:http://127.0.0.1/api/image/123.jpg?token=xxx

这时候校验信息,而网上大部分是没有这段代码的set $auth_request_uri "http://192.168.40.14:8080/image/auth?$query_string"; 导致参数无法传递到r后端校验地址(如果是设置请求头里的,可以获取到)。

校验成功就将127.0.0.1/api/image/123.jpg?token=xxx转发到 minio地址:9000/123.jpg。

校验失败后台设置响应状态401或403,将转发到authError.png这张图片上。

测试url

  • http://192.168.0.225:8002/pic/20230825/530825093805902100.jpg 跳转到登录页 or 首页
  • http://192.168.0.225:8002/pic/20230825/530825093805902100.jpg?Authorization=Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOiJzeXNfdXNlcjoxIiwicm5TdHIiOiJ0dEtOdkE5VTNwQkllWmgxV1h5OUZETWVoUzZINk5MbCIsInVzZXJJZCI6MX0.6_FQyAqTrRsWR4HdhD2qmFeqAOrHJ6cVguCzaW2JlC0 成功预览
  • http://192.168.0.225:8002/file/20231011/系统管理工作站_531011143641805.pdf
  • http://192.168.0.225:8002/file/20231011/系统管理工作站_531011143641805.pdf?Authorization=Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOiJzeXNfdXNlcjoxIiwicm5TdHIiOiJ0dEtOdkE5VTNwQkllWmgxV1h5OUZETWVoUzZINk5MbCIsInVzZXJJZCI6MX0.6_FQyAqTrRsWR4HdhD2qmFeqAOrHJ6cVguCzaW2JlC0

————————————————

上面是把token加在url 后面 ?token=“xxx” ,这种方式 get方式。

下面 尝试入到 header中

探索前端图片如何携带token进行验证
vue中给img的src添加token文章来源地址https://www.toymoban.com/news/detail-777397.html

到了这里,关于Nginx请求参数解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Nginx 重定向后请求参数丢失问题及解决方案

    在日常开发和运维中,我们经常会遇到需要使用 Nginx 进行反向代理的场景。但在配置 proxy_pass 时,有时候可能会遇到请求参数丢失的问题。在这篇文章中,我们将会详细探讨这个问题并给出几种解决方案。 假设我们有一个基础的 Nginx 反向代理配置,如下: 当我们通过 Ngin

    2024年02月05日
    浏览(70)
  • 关于SpringBoot、Nginx 请求参数包含 [] 特殊符号 返回400状态

    问题来源: 使用RESTful风格发送带有特殊符号(如:点、大括号等)的请求,当使用Nginx做地址映射时会返回报\\\"HTTP Status 400-Bad Request\\\"的错误,这个时候我们需要对Nginx的映射方式做一下调整。 Nginx调整完发现跳转后又报了同样的错误,是因为SpringBoot也需要做兼容 如果请求地址是

    2024年02月15日
    浏览(43)
  • nginx中根据请求参数的不同将请求转发到不同的服务(map模块的使用)

    需求 :有一个文本翻译的接口,需要根据原语、目标语、以及apikey的不同转发到不同的服务; 实现 :可以使用Nginx的map模块来实现基于请求参数的转发。具体实现步骤如下: 在Nginx配置文件中定义一个map块,用于根基请求参数判断对应的转发地址, $arg_apikey 是获取请求参数

    2024年02月16日
    浏览(50)
  • nestjs:nginx反向代理服务器后如何获取请求的ip地址

    问题:         如题 参考:         nodejs+nginx获取真实ip-腾讯云开发者社区-腾讯云         「转」从限流谈到伪造 IP nginx remote_addr          解决办法: 1.设置nginx         对于代理部分,对http header添加Host、X-Real-IP、X-Forwarded-For(最重要)          2.nestjs使用

    2024年02月13日
    浏览(56)
  • 从零开始用Rust编写nginx,命令行参数的设计与解析及说明

    wmproxy 已用 Rust 实现 http/https 代理,  socks5 代理, 反向代理, 静态文件服务器,四层TCP/UDP转发,七层负载均衡,内网穿透,后续将实现 websocket 代理等,会将实现过程分享出来,感兴趣的可以一起造个轮子 国内: https://gitee.com/tickbh/wmproxy github: https://github.com/tickbh/wmproxy 设计目标

    2024年01月25日
    浏览(36)
  • 【linux】Nginx企业级优化:恶意域名解析优化、禁止IP访问网站、HTTP请求方法优化

    鱼弦:公众号:红尘灯塔,CSDN内容合伙人、CSDN新星导师、51CTO(Top红人+专家博主) 、github开源爱好者(go-zero源码二次开发、游戏后端架构 https://github.com/Peakchen) 恶意域名解析优化: 恶意域名解析优化是指通过配置Nginx,阻止恶意域名对服务器的访问,以提高服务器的安全性

    2024年04月26日
    浏览(38)
  • 【Nginx运维】Nginx升级打补丁

    升级nginx的过程主要需要以下步骤: 1.备份当前nginx版本及其配置文件。 2.下载新版本的nginx安装包。(如nginx-1.20.1.tar.gz) 3.解压缩安装包,并进入该目录。 4.使用configure脚本配置编译选项。 5.执行make命令进行编译。 make 6.停止旧版本的nginx服务,启动新版本nginx服务。 7.验证

    2024年02月12日
    浏览(36)
  • 【运维】Nginx添加/替换/更新ssl证书

    xxx.com.key xxx.com.pem 添加或替换红圈里的内容为对应的证书文件目录    打开对应的网站   https://xxx.com

    2024年02月11日
    浏览(67)
  • 【运维安全】运维界葵花宝典:Nginx配置与优化秘籍

    必要的原理介绍 ● Nginx 里有一个master进程和多个worker进程.master进程并不处理网络请求,主要负责调度工作进程: 加载配置,启动工作进程及非停升级.worker进程负责处理网络请求与响应. ● master进程主要用来管理worker进程,具体包括如下4个主要功能: 接收来自外界的信号 向各wo

    2024年02月21日
    浏览(46)
  • 【运维知识进阶篇】集群架构-Nginx性能优化

    Nginx花了好多篇文章介绍了,今天谈谈它的优化。我们从优化考虑的方面,压力测试工具ab,具体的优化点三个方面去介绍,话不多说,直接开始! 目录 优化考虑方面 压力测试工具 性能优化 一、影响性能的指标 二、系统性能优化 1、更改文件句柄 2、Time_wait状态重用 三、代

    2024年02月06日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包