将参数传递给nginx url

时间:2014-03-05 04:23:33

标签: node.js nginx url-redirection

如何在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;
}
}

1 个答案:

答案 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>

我知道这不是您正在使用的语言,但我希望它能帮助您开始使用。