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