我想设置一个基于位置而不是侦听端口或 server_name 的 nginx 代理。
upstream cluster
{
server cluster1:8080;
server cluster2:8080;
}
server
{
listen 80;
server_name mydomain.com;
location /hbase
{
proxy_pass http://cluster;
proxy_set_header X-Real-IP $remote_addr;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
}
}
我知道这可能是我想念的非常简单的事情。基本上路由似乎工作,但它实际上最终调用“http://cluster1:8080/hbase”,当它应该只是将流量路由到没有 hbase 部分的服务器时。
重写规则会起作用,但我似乎找不到在 nginx 中重写的方法;我可以让它重定向,但我希望实际端口对外界不可见。
这非常有效,但我只想允许端口 80 上的流量。
upstream cluster
{
server cluster1:8080;
server cluster2:8080;
}
server
{
listen 555;
server_name mydomain.com;
location /
{
proxy_pass http://cluster;
proxy_set_header X-Real-IP $remote_addr;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
}
}
有没有办法使用正则表达式从转发的请求中删除 hbase?
回答:
location /hbase
{
rewrite ^/hbase$|^/hbase/$|^/hbase/(.*)$ /$1 break;
proxy_pass http://cluster;
}