码迷,mamicode.com
首页 > 其他好文 > 详细

Nginx反向代理(基于目录动静分离、不同浏览器类型不同代理、基于扩展名的不同代理)

时间:2015-10-14 10:35:42      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:nginx反向代理 动静分离 浏览器 扩展名

proxy_pass

http_proxy_module


proxy_pass指令输入ngx_http_proxy_module模块,此模块可以将请求转发到另外一台服务器


官网:http://nginx.org/en/docs/http/ngx_http_proxy_module.html


===============================================


location /some/path/ {

    proxy_pass http://127.0.0.1;

}


===============================================

##############################################################################

##############################################################################

##############################################################################

##############################################################################

Nginx 反向代理简单配置

## Apache backend for www.quancha.cn ##

upstream apachephp  {

    server ip:8080; #Apache

}


## Start www.quancha.cn ##

server {

    listen 80;

    server_name  www.quancha.cn;


    access_log  logs/quancha.access.log  main;

    error_log  logs/quancha.error.log;

    root   html;

    index  index.html index.htm index.php;


    ## send request back to apache ##

    location / {

        proxy_pass  http://apachephp;


        #Proxy Settings

        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;

        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;

        proxy_max_temp_file_size 0;

        proxy_connect_timeout      90;

        proxy_send_timeout         90;

        proxy_read_timeout         90;

        proxy_buffer_size          4k;

        proxy_buffers              4 32k;

        proxy_busy_buffers_size    64k;

        proxy_temp_file_write_size 64k;

   }

}

## End www.quancha.cn ##


http proxy模块参数


Nginx的代理功能是通过http proxy 模块来实现的,默认在安装Nginx时已经安装了,http proxy 模块,因此可以直接使用http proxy模块


proxy_set_header

设置由后端的服务器获得用户的主机名或者真实IP地址,以及代理者的真实IP地址


client_body_buffer_size

用于指定客户端请求主体缓存区大小,可以理解为先保存到本地在传给用户


proxy_connect_timeout

表示与后端服务器连接的超时时间,即发起握手等待响应的超时时间


proxy_send_timeout 

表示后端服务器的数据回传时间,即在规定时间之内后端服务器必须传完所有的数据,否则,Nginx将断开这个连接


proxy_read_timeout

设置Nginx从代理的后端服务器获取信息的时间,表示连接建立成功后,Nginx等待后端服务器的响应时间,其实是Nginx


proxy_buffer_size

设置缓冲区大小,默认,该缓冲区的大小等于指令 proxy_buffer设置的大小


proxy_buffer

设置缓冲区的数量和大小,nginx从代理的后端服务器获取的响应信息,会放置到缓冲区


proxy_busy_buffers_size

用于设置系统很忙时可以使用的proxy_buffers大小,官方推荐大小是 proxy_buffer*2


proxy_temp_file_weite_size

指定proxy缓存临时文件的大小


proxy_pass http://web_real_server;

用于指定反向代理的服务器池

proxy_set_header Host $host;

当后端web服务器上也配置有多个虚拟主机时,需要用改Header来区分反向代理那个主机名

proxy_set_header X-Forwarded-For $remote_addr;

如果后端Web服务器上的程序需要获取用户IP,从该Header头中获取  

proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;

这个参数是用来定义故障转移策略的,当后端服务器节点返回500/502/503和执行超时等错误时,自动将请求转到upstream负载均衡中的另外一台服务器,实现故障转移

 


###########################################################################################

###########################################################################################

###########################################################################################

简单的代理服务配置文件

#blog lb by oldboy at 201303

    upstream blog_real_servers {

        #ip_hash;

         server 10.0.0.6:80  weight=15;

         server 10.0.0.8:80  weight=5;

         server 10.0.0.19:82  weight=15;

    }

    server {

       listen       80;

       server_name  blog.lvnian.org;

       location / {

        proxy_pass http://blog_real_servers;

        include extra/proxy.conf;

       }

    }

#当客户端访问blog.lvnian.org域名的请求过来,Nginx反向代理会根据一定的调度算法代理这个请求,去找后端blog_real_servers地址池的RS服务器。后端的RS处理完这个请求后,把处理的结果返回给Nginx代理服务器。Nginx代理服务器再把处理的结果防护给客户端

###########################################################################################

###########################################################################################

###########################################################################################

基于目录的动静分离反向代理配置

upstream static_pools {

         server 10.0.0.8:80  weight=5;

}

upstream dynamic_pools {

         server 10.0.0.6:80  weight=5;

}


server {

       listen       80;

       server_name  blog.lvnian.org;

       location / {

        proxy_pass http://dynamic_pools;

        include extra/proxy.conf;

       }


       location /static/ { 

        proxy_pass http://static_pools;

        include extra/proxy.conf;

       }


       location /dynamic/ { 

        proxy_pass http://dynamic_pools;

       }

        access_log off;

     }


#当客户端请求的是blog.lvnian.org/static/xxxx.那么反向代理服务器会找 static_pools地址池中的RS。代理这个请求去请求找到的RS服务。

如果客户端的请求时blog.lvnian.org/dynamic/xxxx,那么反向代理服务器会找 dynamic_pools地址池中的RS。 代理这个请求去请求找到的RS服务。

如果都是上面的请求,默认情况是找dynamic_pools地址池中的RS。代理这个请求去请求找到的RS服务。

 

###########################################################################################

###########################################################################################

###########################################################################################

基于浏览器类型分离


upstream static_pools {

         server 10.0.0.6:80  weight=5;

}

upstream dynamic_pools {

         server 10.0.0.8:80  weight=5;

}


server {

       listen       80;

       server_name  blog.lvnian.org;

       location / {

        if ($http_user_agent ~* "android")

          {

            proxy_pass http://dynamic_pools;

          }

        if ($http_user_agent ~* "iphone")

          {

            proxy_pass http://static_pools;

            }

        proxy_pass http://dynamic_pools;

       }


        access_log off;

     }

  ##当客户端浏览器是android,那么反向代理服务器会找 dynamic_pools地址池中的RS。 代理这个请求去请求找到的RS服务。

  当客户端是iphone那么反向代理服务器会找 static_pools地址池中的RS。代理这个请求去请求找到的RS服务。

  如果都是上面的请求,默认情况是找dynamic_pools地址池中的RS。代理这个请求去请求找到的RS服务。


###########################################################################################

###########################################################################################

###########################################################################################

基于扩展名的转发

upstream static_pools {

         server 10.0.0.6:80  weight=5;

}

upstream dynamic_pools {

         server 10.0.0.8:80  weight=5;

}


server {

       listen       80;

       server_name  blog.lvnian.org;

       location / {

       proxy_pass http://dynamic_pools;

       include extra/proxy.conf;

       }

location ~ .*.(gif|jpg|jpeg|png|bmp|swf|css|js)$ {

proxy_pass http://static_pools;

include proxy.conf;

}

location ~ .*.(php|php3|php5)$ {

proxy_pass http://dynamic_pools;

include proxy.conf;

}


        access_log off;

     }

 

##如果是扩展名是.(gif|jpg|jpeg|png|bmp|swf|css|js),那么就代理转发到static_pools地址池下的RS。

如果扩展是.(php|php3|php5),那就代理转发到dynamic_pools地址池下的RS.

默认情况下,转发到dynamic_pools地址池下的RS.

 

 

###########################################################################################

###########################################################################################

###########################################################################################

根据不同的浏览器访问设置:

if ($http_user_agent ~* "Firefox|MSIE")

{

return 403;

}

###########################################################################################

###########################################################################################

###########################################################################################


防止爬虫1

if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot| \

    Googlebot-Mobile|Googlebot-Image|Mediapartners-Google| \   

    Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China| \

    YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot| \

    ia_archiver|Tomato Bot")

{

  return 403;

}

防止爬虫2

if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot") 

return 403; 

}






Nginx反向代理(基于目录动静分离、不同浏览器类型不同代理、基于扩展名的不同代理)

标签:nginx反向代理 动静分离 浏览器 扩展名

原文地址:http://lvnian.blog.51cto.com/7155281/1702709

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!