- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前在我的 nginx 配置文件中有以下代理传递定义:
location /pass/ {
proxy_pass http://localhost:9999/pass/;
proxy_redirect off;
proxy_set_header Host $host;
}
这按预期工作 -/pass 请求被转发到在端口 9999 上运行的应用程序。
现在,我要做的是使端口转发部分动态化,如下所示:
location /pass/<input> {
{a $port variable here that is evaluated via a script (php?)}
proxy_pass http://localhost:$port/pass/;
proxy_redirect off;
proxy_set_header Host $host;
}
对/pass/ABCD1234 的请求应转发到端口 9898,对/pass/ABCD5678 的请求应转发到端口 9797。
请注意,流程是动态的 - 因此,从 ABCD1234 到 9898 的映射应该通过某种脚本(可能是 PHP?)发生,并且基于脚本的输出(一个端口),proxy_pass 应该将请求转发给那个端口。
请在这方面提供帮助。
更新:
我不想从 URI 输入中获取 proxy_pass 端口,而是希望通过 cookie 来获取它。所以,这是更新后的代码块:
location /pass/ {
add_header X-debug-message $host always;
add_header X-debug-message $cookie_sdmport;
set $proxyurl http://127.0.0.1:$cookie_theport/pass/;
add_header X-debug-message $proxyurl;
proxy_pass $proxyurl;
proxy_redirect off;
proxy_set_header Host $host;
}
使用此代码,循环 301 重定向回浏览器。当我切换回静态端口时,它又可以工作了!奇怪的! X-debug-message 中的 $proxyurl 在浏览器上看起来是正确的。所以,想知道为什么 proxy_pass 正在执行 301!
更新 2:
最终使用以下设置进行转发:
set $targetIP 127.0.0.1;
set $targetPort $cookie_passport;
proxy_pass http://$targetIP:$targetPort$request_uri;
不确定为什么上面发布的解决方案一直在 301 旋转 - 我猜 nginx 不喜欢在 proxy_pass 参数中混合动态和静态部分
谢谢。
最佳答案
您可以使用 auth_request
模块来完成此操作。虽然它不是默认构建的,但您可以通过运行以下命令来确定您是否拥有它:
nginx -V 2>&1 | grep -qF -- --with-http_auth_request_module && echo ":)" || echo ":("
如果您看到笑脸,那么您就可以开始了。
location ~* /pass/(.*) { <- regex capture for your variable
auth_request /auth; <- location to process request
auth_request_set $proxyurl http://localhost:$upstream_http_x_port/pass/; <- set $proxyurl using value returned in x-port header of your php script
add_header x-my-variable $1; <- Pass variable from regex capture to auth location
proxy_pass $proxyurl;
}
然后是处理授权子请求的位置:
location /auth {
internal; <- make location only accessible to internal requests from Nginx
proxy_set_header x-my-variable $http_x_my_variable; <- pass variable to php
proxy_pass_request_body off; <- No point sending body to php
proxy_set_header Content-Length "";
proxy_pass http://your-php-script/file.php;
}
这个模块实际上是为了访问控制,所以如果你的 php 脚本返回响应代码 200 那么客户端将被允许访问,如果它返回 401 或 403 那么访问将被拒绝。如果您不关心这个,那么只需将它设置为始终返回 200。
做任何你需要的评估,让你的 php 返回前面定义的 header 中的端口:
header('X-Port: 9999');
现在这会为您的 proxy_pass 指令端口号设置变量,Nginx 会完成剩下的工作。
关于基于url pa的nginx动态proxy_pass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52077768/
为什么不是同一个内存地址?这是 C 语言。 int *pa; int a = 80; pa = &a; //save memory address from a to pa *p
在 C++ 中,以下两种动态对象创建之间的确切区别是什么: A* pA = new A; A* pA = new A(); 我做了一些测试,但似乎在这两种情况下,都调用了默认构造函数,并且只调用了它。
我有一些代码主要用 C 语言编写,可以在 HP-UX PA-RISC、HP-UX Itanium 和 Solaris SPARC 平台上编译。 到目前为止,我的 PA-RISC 机器已停产,这是不真实
我已经问过question关于披萨外卖店的简单容错软实时 Web 应用程序。 我在那里得到了非常好的评论和答案,但我不同意它是一个真正的网络服务。它不是一个网络服务,而是一个实时系统,用于接受客户的订
1.业务实践背景: 声明式UI开发框架(ArkUI),没有WebView组件,如何从ArkUI从发起调用Java PA从Java的PA跳转到Java的FA,使用Java FA的WebView组件?
我正在一个项目中查看 Elixir 代码,其中启动脚本是: elixir -pa _build/ -S mix run -e "MyApp" --no-deps-check --no-compile
我在使用 pyArrow 将 pandas.DF 转换为 parquet 时遇到此错误: ArrowInvalid('Error converting from Python objects to I
我正在阅读Deep Learning Book并对这个“未定义的标识符”感到困惑(图像中的 Pa,第 4 行)。它出现在第 208 页。你能告诉我 Pa() 到底是什么意思吗?只是一个提示,以便我可以
我从下面代码的输出中得到的是*(pa-1)=5:为什么这样? #include using namespace std; int main(){ int a[5]={1,2,3,4,5};
考虑下面的程序 #include using namespace std; class ClassA { public: virtual ~ClassA(){}; virtual
我是一名软件工程师,目前正在开发另一款支付应用程序(我的第三个),该应用程序必须符合 PCI PA-DSS 合规性。我正在重新检查 PA-DSS 文档,我想知道过去我是否在应用程序的安全性方面过度劳累
我的 pandas 数据框中有一个列表列以及 int、string 等列。我能够转换字符串、日期、整数和时间戳列。我想知道如何将 array() 应用于列表列。 fields = [ pa.f
是否可以从我编写的驱动程序代码中对内核空间 VA 进行简单的页面遍历转换?我正在尝试使用 virt_to_phys(),但翻译对我来说看起来不正确。还有其他 API 可以做到这一点吗? 最佳答案 vi
当编译我的模块时,我收到这个警告: # make modules CC [M] /jriskhome/repos/module/my_module.o /jriskhome/repos/modu
" in HTML?(在HTML中“
以下示例中的第一行代码是什么。我看到一个youtube用户写下面的代码,它显示在cssbattle挑战的设计。我也试过,它的作品。但我从来没有见过它在任何HTML教程之前,我在谷歌上搜索它,但它只显示
这是我的 .erlang 文件: code:add_path("/home/root/projects/myapp/ebin"). code:add_path("/home/root/projects
我已经运行 OWASP ZAP 工具来识别我使用 angular 10 和 spring-boot 开发的应用程序中的漏洞问题。我遇到了以下 URL 的Missing Anti-clickjackin
这是我的 .erlang 文件: code:add_path("/home/root/projects/myapp/ebin"). code:add_path("/home/root/projects
我已经运行 OWASP ZAP 工具来识别我使用 angular 10 和 spring-boot 开发的应用程序中的漏洞问题。我遇到了以下 URL 的Missing Anti-clickjackin
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我是一名优秀的程序员,十分优秀!