前言:Nginx通过proxy模块实现反向代理功能。在作为web反向代理服务器时,nginx负责接收客户请求,并能够根据URI、客户端参数或其它的处理逻辑将用户请求调度至上游服务器上(upstream server)。nginx在实现反向代理功能时的最重要指令为proxy_pass,它能够将location定义的某URI代理至指定的上游服务器(组)上。如下面的示例中,location的/uri将被替换为上游服务器上的/newuri。

实验环境:

192.168.2.168 nginx

192.168.2.169 httpd

192.168.2.169 配置bbs,尝试访问正常:

192.168.2.168 nginx配置反向代理:

location /forum/ {

          proxy_pass http://192.168.2.169/bbs/;

}

使用正则表达式匹配:

        location ~* ^/bbs/ {

          proxy_pass http://192.168.2.169;
}

proxy_pass不能出现URI,否则语法错误:nginx: [emerg] "proxy_pass" cannot have URI part in location given by regular expression

但是192.168.2.169 httpd端的访问日志是192.168.2.168,这并不是我们想要的

nginx反向代理中配置:

 location ~* ^/bbs/ {
proxy_pass http://192.168.2.169;
proxy_set_header X-Real-IP $remote_addr;
}

httpd端修改日志格式:

vim /etc/httpd/conf/httpd.conf

这样我们再来访问:日志访问记录就是实际的客户端地址了

proxy模块的可用配置指令非常多,它们分别用于定义proxy模块工作时的诸多属性,如连接超时时长、代理时使用http协议版本等。下面对常用的指令做一个简单说明。

proxy_connect_timeout:nginx将一个请求发送至upstream server之前等待的最大时长;
proxy_cookie_domain:将upstream server通过Set-Cookie首部设定的domain属性修改为指定的值,其值可以为一个字符串、正则表达式的模式或一个引用的变量;
proxy_cookie_path: 将upstream server通过Set-Cookie首部设定的path属性修改为指定的值,其值可以为一个字符串、正则表达式的模式或一个引用的变量;
proxy_hide_header:设定发送给客户端的报文中需要隐藏的首部;
proxy_pass:指定将请求代理至upstream server的URL路径;
proxy_set_header:将发送至upsream server的报文的某首部进行重写;
proxy_redirect:重写location并刷新从upstream server收到的报文的首部;
proxy_send_timeout:在连接断开之前两次发送至upstream server的写操作的最大间隔时长;
proxy_read_timeout:在连接断开之前两次从接收upstream server接收读操作的最大间隔时长;

如下面的一个示例:
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    client_max_body_size 10m;
    client_body_buffer_size 128k;
    proxy_connect_timeout 30;
    proxy_send_timeout 15;
    proxy_read_timeout 15;

总结:Nginx实现反向代理,使用Module ngx_http_proxy_module模块,proxy_pass指令,设置请求头为真正的客户端地址proxy_set_header X-Real-IP $remote_addr;

最新文章

  1. Jquery知识点
  2. 一.Timesten安装
  3. 移动设备如何打开RMS加密的文档
  4. bootstrapValidator.js,最好用的bootstrap表单验证插件
  5. MySQL注入
  6. 烂泥:SQL Server 2005数据库备份与恢复
  7. spark新能优化之广播共享数据
  8. 重拾C,一天一点点
  9. As,is含义?using 语句
  10. R学习日记——分解时间序列(非季节性数据)
  11. C/C++程序员面试大纲
  12. BZOJ 1212 HNOI2004 L语言 AC自己主动机(Trie树)+动态规划
  13. 这可能是我觉得最折腾的C++环境配置(编码+调试)--mac+eclipse
  14. ch11 持有对象
  15. 【bzoj4174】tty的求助 莫比乌斯反演
  16. 在线jquery.min.js、vue.min.js引用
  17. js·逻辑运算
  18. 【杂谈】对IO与NIO的认识
  19. 转载收藏用<meta name="ROBOTS"
  20. CSS中(font和background)的简写形式

热门文章

  1. Weex开发之路(1):开发环境搭建
  2. 封装naive socket
  3. iostat 监视I/O子系统
  4. SPI、I2C、UART三种串行总线协议的区别和SPI接口介绍(转)
  5. 【Oracle】详解ORACLE中的trigger(触发器)
  6. Oracle 12C -- 设置CDB启动后,PDBs自动启动
  7. c# 笔试题及参考答案大全
  8. 再说Android RecyclerView局部刷新那个坑
  9. 适合移动端与PC端的 CSS Reset - m_base.css
  10. 解决tomcat服务器下,只能通过localhost,而不能通过127.0.0.1或者本地ip地址访问的问题