nginx 动态定位目录以及静态文件鉴权

动态定位目录

场景,一个公司里面有很多个项目,每个项目开发时候都有本地环境OR测试环境,在没有正式交付的时候我们没必要一个域名对应一个项目,或者自己手动去为每一个项目编写一个server
假设我们只有一个域名 jinanav.com 有项目 one,two,three 我们只需要编写一个server动态去适配目录即可
看目录结构


image.png

先配置host 便于测试

127.0.0.1 test-one.jinanav.com
127.0.0.1 test-two.jinanav.com
127.0.0.1 test-three.jinanav.com
127.0.0.1 static.jinanav.com

上NGINX配置 (简化了很多内容)

server {
    listen       80;
    server_name  ~^test-(?.*)\.jinanav\.com$;

    access_log D:/phpstudy_pro/Extensions/Nginx1.15.11/logs/access.log;
    error_log  D:/phpstudy_pro/Extensions/Nginx1.15.11/logs/error.log;

    root D:/phpstudy_pro/WWW/$subdir;
    index  index.html;  

    location ~* ^.+\.(jpg|jpeg|gif|png|bmp|css|js|swf)$ {
        access_log off;
    }
}

访问


image.png
image.png

image.png

只需要一个配置文件就可以实现动态配置,如果项目中有php go等则需要编写location规则

静态文件鉴权

配置Nginx (简化版)

server {
    listen 80;
    server_name static.jinanav.com;
    root "D:/phpstudy_pro/WWW/static";
    auth_request /auth;

    location /auth {
        proxy_pass http://127.0.0.1:8080$request_uri;
        proxy_pass_request_body off;
        proxy_set_header Content-Length "";
        proxy_set_header X-Original-URL $request_uri;
    }
}

起一个认证服务 我们简单验证token==jinanav时放行

package main

import (
    "fmt"
    "github.com/gin-gonic/gin"
)
func main() {
    r := gin.Default()
    r.GET("/*s", func(c *gin.Context) {
        path := c.Param("s")
        token := c.Query("token")
        fmt.Println(path)
        if token != "jinanav" {
            c.JSON(401, gin.H{
                "message": "invalid token",
            })
        }else{
            c.JSON(200, gin.H{
                "message": "pass",
            })
        }

    })
    r.Run(":8080")
}

go run .\main.go


image.png

我们用一个错误的token去访问


image.png

我们用一个正确的token去访问时


image.png

帅气的哈士奇出现 简易的静态文件验证实现

你可能感兴趣的:(nginx 动态定位目录以及静态文件鉴权)