基于环境变量的 NGINX 基本身份验证
2016-7-11 15:50:5
收藏:0
阅读:68
评论:1
我正在设置安装有 nginx-lua 的 docker 镜像。情境是在 staging 环境上进行基本身份验证,但在 production 环境中不需要。我的想法是在 nginx.conf 文件中设置一个具有 stage 名称的 ENV 变量并检查其值。
docker-compose.yml 文件的内容是(对于 staging,对于 production,STAGE 环境将是 prod):
docs-router:
build: ./nginx
environment:
- API_BASE_URI=staging.example.com
- DOCS_STATIC_URI=docs-staging.example.com
- STAGE=staging
ports:
- "8089:8089"
- "8090:8090"
nginx.conf 文件的内容是:
......
环境 API_BASE_URI;
环境 DOCS_STATIC_URI;
环境 STAGE;
......
http {
server {
listen 8089 default_server;
charset utf-8;
解析器 8.8.8.8;
访问日志关闭;
代理设置头 X-Real-IP $remote_addr;
代理设置头主机 $host;
代理设置头 X-Forwarded-For $proxy_add_x_forwarded_for;
位置 ~ ^(/.*\.(?:apib|svg))?$ {
set_by_lua_block $api_base_uri { return os.getenv("API_BASE_URI") }
set_by_lua_block $stage { return os.getenv("STAGE") }
set $unprotected "prod";
如($ stage = $ unprotected){
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
}
proxy_pass https://$api_base_uri$1;
proxy_set_header Host $api_base_uri;
}
...
}
}
但它不起作用。有什么想法,我该如何实现呢?
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
我刚刚在Serverfault上得到一些帮助,找到了一种解决方案。这并不是最好的解决方案,因为URL在
nginx.conf文件中,但它解决了我的问题:我刚刚从
docker-compose.yml文件中删除了变量:docs-router: build: ./nginx environment: - API_BASE_URI=staging.example.com - DOCS_STATIC_URI=docs-staging.example.com ports: - "8089:8089" - "8090:8090"然后我在
nginx.conf文件中映射了URL:... env API_BASE_URI; env DOCS_STATIC_URI; ... http { ## # URL protection ## map $http_host $auth_type { default "off"; stage1.example.com "Restricted"; stage2.example.com "Restricted"; } server { listen 8089 default_server; charset utf-8; resolver 8.8.8.8; access_log off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; location ~ ^(/.*\.(?:apib|svg))?$ { set_by_lua_block $api_base_uri { return os.getenv("API_BASE_URI") } auth_basic $auth_type; auth_basic_user_file /etc/nginx/.htpasswd; proxy_pass https://$api_base_uri$1; proxy_set_header Host $api_base_uri; } ... } }如果有更好/更好的解决方案,请让我知道。