【问题标题】:Nginx dynamic proxyNginx 动态代理
【发布时间】:2017-08-14 20:11:51
【问题描述】:

我正在尝试将捕获的正则表达式组作为 URI 传递。

配置:

location ~ /proxy/(.*?)$ {
   proxy_pass http://$1;
}


需要:

http://127.0.0.1:9999/proxy/example.com/test/asd.html
代理应该传递给:
http://example.com/test/asd.html


结果:

> curl http://127.0.0.1:9999/proxy/example.com/test/asd.html

<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>


错误日志为空。
我在这里想念什么?谢谢

【问题讨论】:

  • 好吧,这就是我必须为正则表达式做的事情。我拿了你的输入字符串并尝试使用 JS 正则表达式 let str = "127.0.0.1:9999/proxy/example.com/test/asd.html";让结果 = str.match(/proxy\/(.*)$/);控制台.log(结果[1]); ==> example.com/test/asd.html 所以你要么像我做的那样在代理之后转义'/'来获取example.com/test/asd.html,要么在分组中捕获它并使用proxy_pass http://$1 ; ==>请注意只有一个正斜杠
  • 看看下面的代码块是否有效..我将它粘贴在答案块中以清楚地显示代码...

标签: regex nginx nginx-location


【解决方案1】:

我尝试查找 NGINX 位置正则表达式以查看正则表达式对象的工作原理(即 // 在 JS 中),这是您应该尝试的方法

 location ~ \/proxy\/(.*?)$ {
 proxy_pass http://$1;
}

看看有没有帮助

【讨论】:

  • 现在,它仅适用于 IP 地址。如果我使用域,404 错误。如果我使用 IP 地址,例如:http://127.0.0.1:9999/proxy/1.2.3.4 代理传递给 http://1.2.3.4/proxy/1.2.3.4。有什么想法吗?
  • 我相信正则表达式部分适用于 IP 地址。我认为您应该确保将域名配置为正确的 IP 地址?有没有办法让你以某种方式打印出“proxy_pass”?
  • 我不这么认为。不过我会试试的。编辑:我在日志中看到解析器错误。新增resolver 8.8.8.8,现在可以解析域名了。但是,我仍然有问题。 1-当代理传递给域名时,它不传递主机头。 2- 发生这种情况:example.com/proxy/example.com
  • 通过捕获两个组来修复代理标头。 \/proxy\/(.*?)\/(.*?)
  • 很高兴resolver 解决了更多问题。你能从上面的评论中解释一下你的第 1 点和第 2 点吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-27
  • 1970-01-01
  • 1970-01-01
  • 2016-04-12
  • 1970-01-01
  • 2019-01-12
相关资源
最近更新 更多