使用NGINX进行动态路由

时间:2015-04-03 01:06:50

标签: nginx

我是NGINX的业余爱好者,我想将NGINX设置为我的网络服务器的反向代理。 我想知道NGINX这些东西如下所列:

当浏览器发送带URL:http://nginxproxy.com/client/1.2.3.4/的请求时,此请求应传递给IP 1.2.3.4 http://1.2.3.4/的客户端,浏览器仍应显示URL nginxproxy / client / 1.2.3.4 / 同样的:

  • nginxproxy.com/client/2.3.4.5 - > //2.3.4.5
  • nginxproxy.com/client/2.3.4.6 - > //2.3.4.6

所有其他不会模式化的请求应该来到我的默认服务器myserver。

我可以使用NGINX吗?

经过研究,我尝试了以下配置: 但不幸的是,它没有用。地址已在浏览器的地址栏中更改为http:/1.2.3.4,而不是按预期更改为http:/nginxproxy.com/client/1.2.3.4。

server {
    listen       80;

    location ~ ^/client {       
        rewrite ^/client/?(.*) /$2 break;
        proxy_pass $scheme://$1;             
    }
    location / {
        proxy_pass http://myserver.com;
    }
}

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

server {
    listen  80;

    location /client/ {
        rewrite ^/client/(?<site>[^/]+)/? $scheme://$site;
    }

    location / {
        proxy_pass $scheme://myserver.com;
    }
}

答案 1 :(得分:1)

进行更多研究并基于@Cole输入,这是我的答案:

location ~ ^/client/(?<site>[^/]+)/? {
    rewrite ^.*\/client\/(?<site>[^\/]+)\/?(.*) /$2 break; #passing all the remaining request URIs after <site> group to client server
    proxy_pass $scheme://$site;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host/client/$site; #this help to keep the address as it is on the browser's address bar
    proxy_set_header X-Forwarded-Proto $scheme;             
}

location / {
    proxy_pass $scheme://myserver.com
}