nginx 反向代理控制

环境:web1 web2 nginx+keepalived

1、location简介:

nginx中的location指令是NginxHttpCoreModule中重要指令。Location指令比较简单,也比较常用。Sets a configuration based on a request URL.

Location指令,是用来对url进行匹配的,URL及语法中的/uri/,可以是字符串或正则表达式。如果是正则表达式,则必须指定前缀。location指令根据URL来应用不同的配置。这个指令运行根据不同URL来应用不同的url配置。

官方网址:http://nginx.org/en/docs/http/ngx_http_core_module.html

2、基本语法:

Syntax: location [    = |    ~ |    ~* |    ^~
   ] uri { ... }

location @name { ... }
               
Default:
Context: server, location  (位置)

    解释:

    [ = ]  精确匹配,如果找到匹配=号的内容,立即停止搜索,并立即处理请求(优先级最高)

    [ ~ ]  区分大小写

    [ ^~ ] 只匹配字符串,不匹配正则表达式

    [ ~* ] 不区分大小写

    [ @ ]  指定一个命名的location,一般只用于内部重定向请求。location @name{...}

3、匹配过程:

        首先对字符串进行匹配查询,最确切的匹配将被使用。然后,正则表达式的匹配查询开始,匹配第一个结果后会停止搜索。

      如果没有正则表达式,将使用字符串的搜索结果。如果字符串和正则都匹配,那么正则优先级较高。

    

Let’s illustrate the above by an example:

location = / {    [ configuration A ]}

location / {    [ configuration B ]}

location /documents/ {    [ configuration C ]}

location ^~ /images/ {    [ configuration D ]}

location ~* \.(gif|jpg|jpeg)$ {    [ configuration E ]}

The “/” request will match configuration A,
the “/index.html” request will match configuration B,
the “/documents/document.html” request will match
configuration C,
the “/images/1.gif” request will match configuration D, and
the “/documents/1.jpg” request will match configuration E.



4、Proxy_pass指令:

    Proxy_pass 指令属于ngx_http_proxy_module 模块,此模块可以将请求转发到另外一台服务器。

          proxy_set_header host $host ;

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

          proxy_pass http://http://bbs_server_pool;

    #指定反向代理的服务器池

         proxy_set_header X-Forwarded-For $remote_addr;

    范例:

nginx代理设置:

upstream bbs_real_servers {
        #ip_hash;
         server 10.10.70.80:80  weight=15;
         server 10.10.70.82:80  weight=15;
    }
    server {
       listen       80;
       server_name  bbs.etiantian.org;
       location / {
        proxy_pass http://bbs_real_servers;
        proxy_set_header host $host ;
        proxy_set_header X-Forwarded-For $remote_addr;
      }
    }

 #如果后端web服务器上的程序需要获取用户的ip.从该header头获取。需调整web的

web节点设置:

apache:

#202  LogFormat "\"%{X-Forwarded-For}i\" %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

#注意虚拟主机的日志格式

nginx:

#log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
    #                  ‘$status $body_bytes_sent "$http_referer" ‘
    #                  ‘"$http_user_agent" "$http_x_forwarded_for"‘;

#日志格式:"10.10.70.64" - - [03/Jan/2015:09:20:31 +0800] "GET / HTTP/1.0" 200 14 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0"

    参数:proxy_set_header :设置由后端的服务器获取用户的主机名或者真实的ip地址。

          client_body_buffer_size : 用于指定客户端请求主体缓冲区大小

          proxy_connect_timeout:表示与后端服务器连接的超时时间

          proxy_send_timeout:表示后端服务器数据传回的超时时间

          proxy_buffer_size :设置缓冲区大小

          proxy_busy_buffers_size:用于设置系统繁忙是可以使用的proxy——buffers大小

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

生产范例:

proxy_redirect off;
        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;

#可以使用include包含



5、根据url中的目录地址实现代理转发(动静分离)

准备:

web1 目录blog下创建mkdir static && echo "static 23 " >dynamic/index.html  #动态服务器php (mysql读写)

web2 目录blog下创建mkidr dynamic && echo "static 21 " >static/index.html #静态server(图片)

测试要成功

nginx配置范例:

upstream static_pools {
             server 10.10.70.82:80  weight=15;
    }
    upstream dynamic_pools {
             server 10.10.70.82:80  weight=15;
    }

server {
           listen       80;
           server_name  blog.etiantian.org;
           location / {
           proxy_pass http://dynamic_pools;
              }
           location /static/ {        
           proxy_pass http://static_pools;
               }
           location /dynamic/ {
           proxy_pass http://dynamic_pools;
               }
            access_log off;
         }

#使用include 包含;重启nginxx

访问测试:http://www.etiantian.org/dynamic/

http://www.etiantian.org/static/



6、根据文件扩展名实现代理转发

    范例:upstream static_pools {
         server 10.0.0.22:80  weight=15;
            }
upstream dynamic_pools {
         server 10.0.0.23:80  weight=15;
            }

server {
       listen       80;
       server_name  blog.etiantian.org;
       location / {
       proxy_pass http://dynamic_pools;
        include extra/proxy.conf;
          }
location ~ .*.(gif|jpg|jpcg|pnp|swf|css|js)$ {
       proxy_pass http://static_pools;
        include extra/proxy.conf;   
        }
location ~ .*.(php|php3|php5)$ {
       proxy_pass http://dynamic_pools;
        include extra/proxy.conf;  
         }
        access
        }


7、 根据浏览器控制代理访问

upstream static_pools {
             server 10.0.0.22:80  weight=5;
    }
    upstream dynamic_pools {
             server 10.0.0.23:80  weight=5;
    }

server {
           listen       80;
           server_name  blog.etiantian.org;
         location / {
           if ($http_user_agent ~* "MSIE")
              {
            proxy_pass http://dynamic_pools;
              }
            if ($http_user_agent ~* "Firefox")
              {
                proxy_pass http://static_pools;
                }
            proxy_pass http://dynamic_pools;
            include extra/proxy.conf;
           }

access_log off;

}

#if ($http_user_agent ~* "Firefox|MSIE")
    #{
    #return 403;

#}



8、根据访问设备代理控制

upstream android_pools {
         server 10.0.0.22:80  weight=5;
    }
    upstream iphone_pools {
         server 10.0.0.23:80  weight=5;
    }

server {
           listen       80;
           server_name  www.etiantian.org;
            include extra/proxy.conf;
            location / {
            if ($http_user_agent ~* "android")
              {
                proxy_pass http://android_pools;
              }
            if ($http_user_agent ~* "iphone")
              {
                proxy_pass http://iphone_pools;
                }
            proxy_pass http://dynamic_pools;
            include extra/proxy.conf;
           }
            access_log off;
         }


    

        

时间: 2024-10-24 12:36:43

nginx 反向代理控制的相关文章

nginx反向代理

1. 操作系统 CentOS 6.4 x86_64 2.软件版本 Nginx 1.4.2 3.实验拓扑 注,实验拓扑见下文. 4.安装yum源 1 2 3 [root @nginx ~]# rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm [[email protected] ~]# rpm -ivh http://download.fedoraproject.org/

Nginx反向代理、负载均衡、页面缓存、URL重写及读写分离详解

大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统为 CentOS 6.4 x86_64 , Nginx 是版本是最新版的1.4.2,所以实验用到的软件请点击这里下载:http://yunpan.cn/QXIgqMmVmuZrm 一.前言 在前面的几篇博文中我们主要讲解了Nginx作为Web服务器知识点,主要的知识点有nginx的理论详解.ngin

Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统为 CentOS 6.4 x86_64 , Nginx 是版本是最新版的1.4.2,所以实验用到的软件请点击这里下载:http://yunpan.cn/QXIgqMmVmuZrm 一.前言 在前面的几篇博文中我们主要讲解了Nginx作为Web服务器知识点,主要的知识点有nginx的理论详解.ngin

Nginx反向代理 负载均衡 页面缓存 URL重写及读写分离

大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统为 CentOS 6.4 x86_64 , Nginx 是版本是最新版的1.4.2,所以实验用到的软件请点击这里下载:http://yunpan.cn/QXIgqMmVmuZrm 一.前言 在前面的几篇博文中我们主要讲解了Nginx作为Web服务器知识点,主要的知识点有nginx的理论详解.ngin

[转载]Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统为 CentOS 6.4 x86_64 , Nginx 是版本是最新版的1.4.2,所以实验用到的软件请点击这里下载:http://yunpan.cn/QXIgqMmVmuZrm 一.前言 在前面的几篇博文中我们主要讲解了Nginx作为Web服务器知识点,主要的知识点有nginx的理论详解.ngin

nginx 反向代理实现负载均衡*配置实战

(接理论篇) 查看lb01的配置文件如下: cat /usr/local/nginx/conf/nginx.conf worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream www_server_pools { #默认调度算

CORS跨域与Nginx反向代理跨域优劣对比

最近写了一些关于前后端分离项目之后,跨域相关方案的基本原理和常见误区的帖子,主要包括CORS和Nginx反向代理.这两种方案项目中都有在用,各有优缺,关于具体使用哪种方案,大家的观点也不大一致,本文主要就此展开一下,从前后端及服务器配置.安全性.移植灵活性.扩展性等方面详细对比一下两种方案的优缺,以便于后期在方案选型上对大家有所帮助. 前端配置 CORS方案:跨域时部分浏览器默认不携带cookie,因此为了携带cookie需要设置一下xmlhttprequest的withCrendetails属

nginx反向代理-后端服务器组设置

nginx服务器的反向代理时其最常用的重要功能之一,在实际工作中应用广泛,涉及的配置指令也比较多.下面会尽量详细地介绍对应的指令,及其使用状态. 反向代理一般是互联网需要向内网拉取资源,比如访问一个web网站时,互联网应用通过一个代理服务器到后面真实的web服务器拉取应用所需的数据. nginx服务器反向代理用到的指令如果没有特别的说明,原则上可以出现在nginx配置文件的http块,server块和location块中,但是同正向代理一样,一般是搭建在nginx服务器中单独配置一个server

Nginx反向代理的配置

Chapter: Nginx基本操作释疑 1. Nginx的端口修改问题 2. Nginx 301重定向的配置 3. Windows下配置Nginx使之支持PHP 4. Linux下配置Nginx使之支持PHP 5. 以源码编译的方式安装PHP与php-fpm 6. Nginx多站点配置的一次实践 7. Nginx反向代理的配置 Nginx 作为 web 服务器一个重要的功能就是反向代理.其实我们在前面的一篇文章<Nginx多站点配置的一次实践>里,用的就是 Nginx 的反向代理,这里简单再