[英]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.