• Nginx作为反向代理服务器


    前言: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;

  • 相关阅读:
    防删没什么意思啊,直接写废你~
    绝大多数情况下,没有解决不了的问题,只有因为平时缺少练习而惧怕问题的复杂度,畏惧的心理让我们选择避让,采取并不那么好的方案去解决问题
    Java 模拟面试题
    Crossthread operation not valid: Control 'progressBar1' accessed from a thread other than the thread it was created on
    一步步从数据库备份恢复SharePoint Portal Server 2003
    【转】理解 JavaScript 闭包
    Just For Fun
    The database schema is too old to perform this operation in this SharePoint cluster. Please upgrade the database and...
    Hello World!
    使用filter筛选刚体碰撞
  • 原文地址:https://www.cnblogs.com/jjzd/p/6691500.html
Copyright © 2020-2023  润新知