2017-08-14 50 views
0

我想通过捕获正则表达式组作为URI。

配置:Nginx的动态代理

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> 


错误日志是空的。
我在这里错过了什么?由于

+0

很好的东西,这是我必须为正则表达式做的事情。我把你的输入字符串,并尝试与JS正则表达式let str =“http://127.0.0.1:9999/proxy/example.com/test/asd.html”; let result = str.match(/ proxy \ /(。*)$ /); console.log(result [1]); ==> example.com/test/asd.html让你无论是越狱“/”就像我得到example.com/test/asd.html或捕获它在D组,并使用代理服务器之后proxy_pass HTTP:/ $ 1; ==>注只有一个斜线 – JBone

+0

看的以下代码块的工作。我粘贴在回答块显示代码清楚... – JBone

回答

1

我试图寻找了NGINX的位置正则表达式来看看正则表达式对象的作品(即//在JS),这里是你应该尝试

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

看看是否有帮助

+0

现在,它仅适用于IP地址。如果我使用域,404错误。如果我使用一个IP地址,例如:通过'http://127.0.0.1:9999 /代理/ 1.2.3.4'代理传递给'HTTP:// 1.2.3.4 /代理/ 1.2.3.4'。有任何想法吗? –

+0

我相信正则表达式部分是罚款,如果它的IP地址工作。我认为你应该确保域名配置为正确的IP地址?有没有办法让你打印出“proxy_pass”如何? – JBone

+0

我不这么认为。我会尽力而为。编辑:我看到日志中的解析器错误。增加了'resolver 8.8.8.8',现在它可以解析域名。但是,我仍然有问题。 1-代理传递到域名时,它不传递主机头。 2-发生这种情况:'example.com /代理/ example.com' –