在 nginx 中配置重写规则

configuring rewrite rules in nginx

我在端口 80 上有 ngnix 网络服务器 运行。我在 9000 端口上有一个 Nodejs 运行。我需要将来自我的 nginx 的请求重写到端口 3000 上 运行 的应用程序服务器。

我尝试使用以下选项进行配置,但它正在重定向到浏览器而不是转发到应用服务器。当有 /hosts.json 的请求时,需要将其重定向到 http://appserver.corp.cn.com:3000/hosts/hosts.json。请让我知道哪里出错了。

server {
listen       80;
server_name  localhost;
access_log  /var/log/nginx/localhost.access.log;
location / {
             rewrite ^/hosts.json http://appserver.corp.cn.com:3000/hosts.json permanent;
             rewrite ^/hosts/bu.json http://appserver.corp.cn.com:3000/hosts/bu.json permanent;
             proxy_pass http://localhost:9000;
             proxy_http_version 1.1;
             proxy_set_header Upgrade $http_upgrade;
             proxy_set_header Connection 'upgrade';
             proxy_set_header Host $host;
             proxy_cache_bypass $http_upgrade;
    }
}

我需要为下面的 url 模式设置 proxy_pass

location  ~ ^/hosts/bu/(.*)/app/(.*)$ {
  proxy_pass   http://appserver.cnma.com:3000/hosts/bu//app/;
}

您想根据 URI 代理到不同的服务器。有一种自然的方法,就是在适当的 location 中输出不同的 proxy_pass 指令:

server {
  ...

  proxy_http_version 1.1;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection 'upgrade';
  proxy_set_header Host $host;
  proxy_cache_bypass $http_upgrade;

  location / {
    proxy_pass http://localhost:9000;
  }

  location /hosts.json {
    proxy_pass http://appserver.corp.cn.com:3000;
  }

  location /hosts/bu.json {
    proxy_pass http://appserver.corp.cn.com:3000;
  }

  location /hosts/bu/ {
    proxy_pass http://appserver.corp.cn.com:3000;
  }
}