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

时间:2022-07-22
本文章向大家介绍nginx使用反向代理访问时改写请求,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

问题

假如后端有一个系统访问方式是通过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;
    }
}

这样就可以啦