繁体   English   中英

将参数传递给Nginx网址

[英]Passing parameters to nginx url

如何在Nginx网址中传递参数。 当我点击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;
}
}

我认为您想做的是可能的,但是您必须在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>

我知道这不是您使用的语言,但希望它能帮助您入门。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM