Nginx反向代理

一、安装

        ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module


二、配置

      Nginx的反向代理功能,其实就是一个upstream模块加一段主机SERVER定义。

    

三、upstream模块详解

       Nginx的负载均衡功能主要由upstream模块来完成,完整模块名为ngx_http_upstream_module。Nginx支持的代理方式有3种,PHP使用fastcgi_pass,反向代理使用proxy_pass。

       1. proxy_pass

       2. fastcgi_pass

       3. memcached_pass 

       重要参数:

       proxy_next_upstream

       fastcgi_next_upstream

       memcached_next_upstream

       请求失败时不给用户返回错误信息,而是请求下一台机器,用户体验很好!需要配合max_fails=1参数使用,并且只能是1.


四、调度算法相关

    1、ip_hash参数的缺点:

      1. 根据来源IP来做哈希算法,但是国内所有的单位都是通过NAT上网,多台机器只有一个IP。

      2. 必须是最前端的服务器,如果前端还有LVS负载均衡就无法实现。

      3. 使用ip_hash的时候,权重weight和备份backup都不能用!

      LVS里面可以通过-P选项来实现同样的功能,KeepAlived里面也可以通过persistence_timeout 50参数来实现。

    2、fair算法

      根据页面大小和相应时间来智能调度。第三方的算法,需要下载nginx的upstream_fair模块。

      缺点是也会导致负载不均。


    3、URL算法

       根据不同的URL调度到不同的服务器,最有利于缓存服务器,常见于CDN公司,也是第三方算法,需要下载模块。


    4、最小连接数least_conn

       顾名思义


五、location指令详解

    语法:

    location [  = | ~ | ~* | ^~   ]   {

    ...................

     }

    = 精确匹配(优先级最高)

    ~ 区分大小写

    ^~只区分字符串,不匹配正则

    ~*不区分大小写

    

    

六、Nginx的http proxy模块详解

      重要参数:

      proxy_set_header Host $host:      增加主机名!主要用于后端服务器存在多个主机的场景。

      proxy_set_header X-Forwarded-For $remote_addr  :

      如果后端服务器需要取得用户IP,从header取得,使用 $remote_addr 变量建议修改日志格式以显示访问用户的IP!


七、NginxProxy根据URI实现转发(实现动静分离的重要方法,也是落伍论坛服务器的优化方法)

       落伍论坛的服务器为单台,前端Nginx处理静态请求,PHP抛给后端APACHE。

       系统架构为Linux+Nginx+Apache+MySQL。


       实例:根据user_agent实现手机访问转发

       语法:

       location / {

       if ($http_user_agent ~* "android")

          {

          proxy_pass http://android;

          }

        if ($http_user_agent ~* "iphone")

          {

          proxy_pass http://iphone;

          }

         proxy_pass http://backend;         

}



公司使用nginx作为负载均衡,有时候需要自定义header头发送给后端的真实服务器. 想过去应该是非常的简单的事情.

例子如下:

设置代理服务器ip头

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;


然后自己在自定义个header,remote_header_test,如下:

proxy_set_header remote_header_test "123123123";


接着后端真实服务器打开www.ttlsa.com/nginx_header.php

源代码是简单的phpinfo

<?php

phpinfo();

 ?>


在phpinfo结果页面中搜索刚才设置的头部,发现没有找到,网上查找资料,才发现原来nginx会忽略掉下划线的头部变量.于是改成如下:

proxy_set_header remoteheadertest "123123123";


再次打开www.ttlsa.com/nginx_header.php,搜索remoteheadertest,有内容. 看来果真不能用下划线. 然后改成'-',如下:

proxy_set_header remote-header-test "123123123";


打开页面,搜索到的头部是remote_header_test. 自动转换成下划线了.

如果想要支持下划线的话,需要增加如下配置:

underscores_in_headers on;


可以加到http或者server中

语法:underscores_in_headers on|off

默认值:off

使用字段:http, server

是否允许在header的字段中带下划线





   

你可能感兴趣的:(local,主机)