如何在nginx url中传递参数。当我点击http://127.0.0.1:1000/samp/test1/result?num1=10&num2=30
时,它应该将我重定向到http://127.0.0.1:80/samp/test1/result?num1=10&num2=30
。这可能吗?下面是我的nginx配置文件。
upstream apache {
server 127.0.0.1:1000;
}
server {
listen 80;
server_name 127.0.0.1;
location / {
#root html;
#index index.html index.htm;
#return 503;
proxy_pass http://apache;
}
}
答案 0 :(得分:0)
我认为你想做的事情是可能的,但是你必须在apache端改变配置。
如果'apache'直接处理进入端口1000的请求,它将看到如下的URI:
http://127.0.0.1:1000/samp/test1/result?num1=10&num2=30
但是,如果它是通过nginx发送的,它看起来会更像这样:
http://apache/samp/test1/result?num1=10&num2=30
因此,您可以检查传入的URL:1000,然后在apache端重写请求转到端口80(这是默认值,因此您不需要:80
- 您可以完全没有指明端口。
如果后端真的是apache,你可以在那里使用重写规则来处理重写。
但是,如果您尚未使用端口80,则表示您没有连接到nginx - 因此nginx无法为您重写此内容。
希望它有意义!
以下是我测试的方式:
Apache方面我使用了一个快速的sinatra(ruby)应用程序打印出它看到的请求的完整URI:
require 'sinatra'
set :bind, "0.0.0.0"
set :port, 1025
get "/*" do
"<p>Hello from \"apache\"! You've just requested:
<code>#{request.url}</code></p>
"
end
然后配置nginx:
upstream apache {
server 192.168.70.1:1025;
}
server {
server_name localhost;
location / {
proxy_pass http://apache;
}
}
注意我使用了端口1025,因为端口1000是特权端口。
我使用curl生成测试请求:
$ curl 'http://192.168.70.1:1025/samp/test1/result?num1=10&num2=30'
<p>Hello from "apache"! You've just requested:
<code>http://192.168.70.1:1025/samp/test1/result?num1=10&num2=30</code></p>
$curl 'http://127.0.0.1:80/samp/test1/result?num1=10&num2=30'
<p>Hello from "apache"! You've just requested:
<code>http://apache/samp/test1/result?num1=10&num2=30</code></p>
如果我想要进行您正在描述的重定向,我可以匹配IPV4地址和端口的正则表达式并重定向:
get "/*" do
if request.url =~ %r|^http://([0-9]{1,3}\.){3}[0-9]{1,3}:1025/|
redirect "http://localhost:80/#{request.fullpath}"
else
"<p>Hello from \"apache\"! Tou've just requested:
<code>#{request.url}</code></p>
"
end
end
现在我告诉curl
关注重定向(-L),我们看到它将我重定向到“正确”路线。
$ curl -L 'http://192.168.70.1:1025/samp/test1/result?num1=10&num2=30'
<p>Hello from "apache"! Tou've just requested:
<code>http://apache/samp/test1/result?num1=10&num2=30</code></p>
我知道这不是您正在使用的语言,但我希望它能帮助您开始使用。