欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

使用反向代理访问nginx时重写请求

最编程 2024-07-16 12:35:15
...

问题

假如后端有一个系统访问方式是通过IP加端口的形式访问的,如:10.1.1.12:3000/hello,现在我们想把该资源放到公网上,通过域名的形式访问,在访问之前,需要使用nginx做一层反向代理,而做映射时只需把nginx代理服务器的80端口映射出去即可。

实现

upstream hello {
    server 10.1.1.12:3000 weight=2 max_fails=3 fail_timeout=100s;
}
server {
    listen 80;
    server_name hello.test.com;
    access_log /var/log/nginx/hello.log main;
    
  location /hello {
        proxy_pass http://hello;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarder-For $proxy_add_x_forwarded_for;
        proxy_next_upstream http_502 http_504 error timeout invalid_header;
    }
}

这样是没有问题的,可以代理到后端真实的服务器,但是访问方式为:

<code>hello.test.com/hello</code>

需要在访问时添加请求的地址,比较麻烦,那么如何让Nginx自动添加地址呢?

这里使用rewrite来进行重写请求,示例如下:

upstream hello {
    server 10.1.1.12:3000 weight=2 max_fails=3 fail_timeout=100s;
}
server {
    listen 80;
    server_name hello.test.com;
    access_log /var/log/nginx/hello.log main;

    location =/ {
        rewrite / /hello;
    }

    location / {
        proxy_pass http://hello;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarder-For $proxy_add_x_forwarded_for;
        proxy_next_upstream http_502 http_504 error timeout invalid_header;
    }
}

这样就可以啦

推荐阅读