1、location指令的用法介绍

Location主要用来匹配url,如:http://www.beyond.com/nice,在这里对于location来说www.beyond.com是域名,/nice才是url。

对于url的匹配,可以使用字符串或者正则表达式,但如果是正则表达式,必须指定前缀,location指令来匹配不同的url,匹配成功后应用不同的配置

语法:location [=|~|~*|^~|@]/url {…..}

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

[~]区分大小写

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

[~*]不区分大小写

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

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  www.liyunlong.com;
#No.1
        location / {
                return  502;
        }
#No.3
        location ~* \.jpg$ {
                return 403;
        }
#No.4
        location ^~ /a/ {
                return 402;
        }
#No.5
        location /a/1.jpg {
                return 401;
        }
#No.6
        location = /a/.jpg {
                return 400;
        }
}
}

小结:

    1、等号优先级最高,工作中尽量把等号匹配的放在前边

    2、~* \.jpg$优先级第二

    3、^~ /a/优先级第三

2、proxy模块的介绍

Nginx转发模块是ngx_http_proxy_module,默认安装,可以直接使用

Proxy_pass此指令用于转发location匹配到的url到serve池子中。

参数:

proxy_set_header    让proxy获取RS的head(虚拟主机名字)

client_body_buffer_size客户端请求缓存大小,可以理解为先保存本地在传给用户

proxy_connect_timeout   与RS链接超时的时间

proxy_send_timeout  RS回传数据的时间,必须在这个时间段内传完,否则断开连接

proxy_read_timeout  等待RS响应的时间,标明连接已经成功,正在排队

proxy_buffer_size   缓存区大小,默认等于指令proxy_buffers设置的大小

proxy_buffers   缓冲区的数量和大小,从RS获取的响应信息会放置到缓冲区

proxy_busy_buffers_size系统很忙时可以使用的proxy_buffers大小,官方推荐的大小是proxy_buffers的两倍

proxy_temp_file_write_size  缓存临时文件的大小

proxy_set_headerhost $host当RS有多个虚拟主机的时候需要逐个指定

proxy_set_headerX-Forwarded-For $remote_addr   开启负载均衡器转发真实客户的IP地址给RS.   

注意:

“proxy_set_header”当我们的RS有多个虚拟主机(相同的ip,相同的端口)的时候如www、bbs、blog,代理服务器怎么知道将请求发到哪呢,这个时候nginx代理就会查找proxy_set_header参数,将请求发送到相应域名的虚拟主机上。