nginx之反向代理与端口转发
反向代理
- 反向代理是指客户端不直接访问服务端,而是通过反向代理服务器来访问服务端资源。反向代理服务器负责转发客户端请求,并将响应结果返回给客户端。通常情况下,反向代理服务器的IP地址对于客户端来说是可见的,而服务端的IP地址则是不可见的。
- 反向代理通常用于隐藏服务端的真实IP地址,提高系统的安全性和稳定性。同时,反向代理还可以实现负载均衡、缓存加速等功能。
- proxy_pass 作用是nginx的反向代理,用的是nginx的 Proxy 模块
- 以下示例 Nginx 监听
80
端口,当客户端请求 example.com
域名时,会将请求转发到 nacos8848
(即服务端),并在HTTP头中添加Host和X-Real-IP信息。
http {
upstream nacos8848{
ip_hash;
server 10.30.4.151:8848 max_fails=5 fail_timeout=300s weight=5;
server 10.30.4.152:8848 max_fails=5 fail_timeout=300s weight=5;
}
server {
listen 80;
index index.html index.htm;
server_name example.com;
location / {
proxy_pass http://nacos8848;
proxy_read_timeout 360;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
端口转发
- 端口转发是指将来自一个端口的数据包转发到另一个端口。通常情况下,在网络中应用层协议只监听一种端口,因此需要端口转发来实现不同应用程序之间的互访。
- 以下示例通过 Nginx 将 HTTP 请求转发到 java 服务器的
8100
端口上
http {
upstream java8100{
ip_hash;
server 10.30.3.201:8100 max_fails=5 fail_timeout=300s weight=5;
server 10.30.3.202:8100 max_fails=5 fail_timeout=300s weight=5;
}
server {
listen 8100;
proxy_pass java8100;
proxy_timeout 300s;
}
}
如何区分
- 端口转发也属于一种反向代理
- 端口转发需要编译nginx的时候指定 --with-stream,而反向代理没有此限制
- 反向代理主要用来转发http或https请求,端口转发主要用来转发tcp请求