动态定位目录
场景,一个公司里面有很多个项目,每个项目开发时候都有本地环境OR测试环境,在没有正式交付的时候我们没必要一个域名对应一个项目,或者自己手动去为每一个项目编写一个server
假设我们只有一个域名 jinanav.com 有项目 one,two,three 我们只需要编写一个server动态去适配目录即可
看目录结构
先配置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-(?<subdir>.*)\.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;
}
}
访问
只需要一个配置文件就可以实现动态配置,如果项目中有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
我们用一个错误的token去访问
我们用一个正确的token去访问时
帅气的哈士奇出现 简易的静态文件验证实现