nginx反向代理实战

nginx反向代理实战

反向代理示意图


假设场景

公司有多个http服务器和多个域名,但是只有一个固定的IP地址,且服务器都放在公司内网。如果使用路由器的端口转发功能,就只能有一台内网服务器的80端口能映射到外网的80端口,即只有一个域名可以不带端口号访问(www.xyz123.com),其他的只能通过非80端口访问(www.test123.com:8080),所以非常麻烦。

然后Y兄建议在内网搭建个nginx反向代理服务器,将这台服务器的80端口映射到外网的80端口,所有域名解析至公司的固定IP上。利用nginx的反向代理机器将不同域名的请求转发至内网相应的服务器端口。

反向代理解释

代理服务器,客户机在发送请求时,不会直接发送给目的主机,而是先发送给代理服务器,代理服务接受客户机请求之后,再向主机发出,并接收目的主机返回的数据,存放在代理服务器的硬盘中,再发送给客户机。 对于客户请求来说,他是不清楚到底是哪台服务器接收了他的请求,并作出了响应。

反向代理有以下优点:

  • 提高访问速度 (负载均衡)
  • 防火墙作用 (过滤不安全信息)
  • 通过代理服务器访问不能访问的目标站点 (翻墙软件)

反向代理的配置


nginx反向代理实战

配置-1


nginx反向代理实战

配置-2


nginx反向代理实战

配置-3

反向代理主配置文件”/usr/local/nginx/conf/reverse-proxy.conf“,配置如下:


nginx反向代理实战

reverse-proxy.conf-01

nginx反向代理实战

reverse-proxy.conf-02

总结

如果内网中有服务器采用的负载均衡,只需按前几章的方法配置即可。

另外如果后面的WEB服务器也是采用nginx,且需要记录客户真实的IP时,就要注意,如果使用默认配置的log_format日志格式是记录不到真实的IP的,需要修改。

原log_format:

<code>log_format main '$remote_addr - $remote_user [$time_local] "$request" '
\t'$status $body_bytes_sent "$http_referer" '
\t'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;/<code>

新log_format:

<code>log_format access '$HTTP_X_REAL_IP - $remote_user [$time_local] "$request" '
\t'$status $body_bytes_sent "$http_referer" '
\t'"$http_user_agent" $HTTP_X_Forwarded_For';
access_log logs/access.log access;/<code>


分享到:


相關文章: