英文:
How to cut nginx url
问题
我正在使用nginx来代理请求到三个服务。我需要截取请求的URL并将其代理到已更改的URL的服务上。
这里是一个示例:
example.com/blabla/admin/dashboard/... -> 代理到
localhost:8080/admin/dashboard/...
我想出于安全原因这样做,当然我可以创建子域名(blablabla.example.com/admin/dashboard),但我认为URL比子域名更安全。
我尝试了以下配置,但它只是使用原始URL进行代理:
upstream web1 {
server site1:8080;
}
upstream web3 {
server site3:8080;
}
upstream web2 {
server site2:8080;
}
server {
listen 80;
listen [::]:80;
# server_name localhost;
location /balaboba {
proxy_pass http://web1$uri;
}
location /catsruletheworld {
proxy_pass http://web2$uri;
}
location /lolkek {
proxy_pass http://web3$uri;
}
}
英文:
I am using nginx to proxy requests to three services. I need to cut request url and proxy to services with changed url.
Here example:
example.com/blabla/admin/dashboard/... -> proxy to
localhost:8080/admin/dashboard/...
I want to do it for safety reasons, of course I can make subdomain (blablabla.example.com/admin/dashboard), but I think url is safer
than subdomain.
I am tried this configuration, But it just proxy with original url:
upstream web1 {
server site1:8080;
}
upstream web3 {
server site3:8080;
}
upstream web2 {
server site2:8080;
}
server {
listen 80;
listen [::]:80;
# server_name localhost;
location /balaboba {
proxy_pass http://web1$uri;
}
location /catsruletheworld {
proxy_pass http://web2$uri;
}
location /lolkek {
proxy_pass http://web3$uri;
}
}
答案1
得分: 0
$uri
是原始的URL,所以你需要在proxy_pass
语句中明确地发送它。
在前缀location
中使用proxy_pass
可以自动实现你想要做的事情。只需在location
和proxy_pass
语句后面加上斜杠/
来替代前缀为/
。参见proxy_pass文档。
例如:
location /foo/ {
proxy_pass http://service/;
}
在上述示例中,URL http://example.com/foo/bar
将被传递到 http://service/bar
。
这仅在服务端表现良好且不生成打破所施加前缀的绝对链接时才有效。在这种情况下,子域方法可能会更安全。
英文:
$uri
is the original URL, so you are explicitly sending it in your proxy_pass
statements.
proxy_pass
within a prefix location
can automatically achieve what you are trying to do. Simply use a trailing /
on both the location
and proxy_pass
statements to substitute the prefix for /
. See proxy_pass documentation.
For example:
location /foo/ {
proxy_pass http://service/;
}
In the above, the URL http://example.com/foo/bar
will be passed to http://service/bar
This only works if the service is well behaved and does not generate absolute links that break out of the imposed prefix. In which case the subdomain approach may be safer after all.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论