nginx在代理页面中重写url

时间:2016-10-06 06:47:29

标签: nginx url-rewriting proxy

我通过nginx代理运行的页面遇到了一些问题。 这个页面调用其他内部服务器,我想用nginx重写这些URL。

我已经为以下内容运行了代理传递:

foo.site.internal - > foo.site.nl(公共) 网站内部,需要一些其他服务,如: foo2.site.internal:1400 / JSON / API /呼叫/ BLA

目前foo.site.nl正试图通过一些javescript使用来接收这些调用。但这是不可能的,因为最终用户无法连接到foo2.site.internal

所以我创建了一个反向代理: foo2.site.internal:1400运行于:foo.site.nl:1400,所以我想在不改变后端站点配置的情况下完成的是:

将页面中的foo2.site.internal:1400 / json / api / call / bla重写为foo.site.nl:1400/json/api/call/bla

使用nginx可以做到这一点吗?

我当前的配置:

server {
   listen 443 ssl;
   ssl_certificate /etc/nginx/ssl/site.nl.cert;
   ssl_certificate_key /etc/nginx/ssl/site.nl.key;

  server_name foo.site.nl;

  location / {
    proxy_intercept_errors on;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://foo.site.internal/;
  }
}

server {
  listen      14000 default_server;
  server_name foo.site.nl;
  location / {
    proxy_pass       http://foo2.site.internal:14000;
    proxy_set_header Host foo2.site.internal:14000;
  }
}

1 个答案:

答案 0 :(得分:0)

您可以使用此配置:

server {
   listen 443 ssl;
   ssl_certificate /etc/nginx/ssl/site.nl.cert;
   ssl_certificate_key /etc/nginx/ssl/site.nl.key;

  server_name foo.site.nl;

  location / {
    proxy_intercept_errors on;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://foo.site.internal/;
  }
}

server {
  listen      14000 default_server;
  server_name foo.site.nl;
  location / {
    try_files $uri $uri/ /index.php?$args;
    proxy_pass       http://foo2.site.internal:14000;
    proxy_set_header Host foo2.site.internal:14000;
  }
}