工作中会存在配置多个location模块的情况,如果都配置在nginx.conf配置文件中不是特别容易管理,这种情况下就需要单独来定义一个模块的location,可以在nginx.conf配置中指定它的子配置文件,以及location模块中常用的参数,如何配置呢就来说给大家。
include模块:位于http模块里面
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#tcp_nodelay off;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf; #定义子配置文件
}
root:指定web家目录,在定义location的时候,文件的绝对路径=root+location
alias:定义路径别名,会把访问的路径重新定义到其他指定的路径
location /about {
root /data/www/pc; # root访问路径/data/www/pc/about
index index.html;
}
location /test {
alias /data/www/pc; # alias访问路径/data/www/pc
index index.html;
}
没有使用正则表达式的时候,nginx会先在server中的多个location模块选取匹配度最高的uri。
uri:是用户请求的字符串,即域名后面的web文件路径。
然后使用该location模块中的正则uri和字符串,如果匹配成功就结束搜索
语法规则:location [ = | ~ | ~* | ^~ ] /uri/{…}
= #用于标准uri前,精确匹配
~ #表示包含正则并区分大小写
~* #表示包含正则并不区分大小写
!~ #表示包含正则并区分大小写不匹配
!~* #表示包含正则并不区分大小写不匹配
^~ #表示包含正则并且匹配以什么开头
$ #表示包含正则并且匹配以什么结尾
\ #表示包含正则并且转义字符
* #表示包含正则并且代表任意长度的任意字符
详解示例:
匹配优先级:=,^~,~,~*,/
(location =) > (location ^~ 路径) > (location ~,~* 路径) > (location 部分起始路径) > (location /)
精确匹配
location = /1.jpg {
root /data/www/pc/images;
index index.html;
}
区分大小写
location ~ /1.jpg {
root /data/www/pc/images;
index index.html;
}
不区分大小写
location ~* /1.jpg {
root /data/www/pc/images;
index index.html;
}
案例匹配URI
location ^~ /images {
root /data/www/mobile;
index index.html;
}
location /images1 {
alias /data/www/mobile;
index index.html;
}
匹配案例-文件名后缀
location ~* \.(jpg|jpeg|js)$ {
root /data/www/mobile/images;
index index.html;
}
匹配案例-优先级
location ~* \.(jpg|jpeg|js)$ {
root /data/www/mobile/images;
index index.html;
}
location /2.jpg {
alias /data/www/mobile;
index index.html;
}
location ^~ /2.jpg {
root /data/www/mobile;
index index.html;
}
结果:^~ > ~* > /部分路径
可以通过匹配客户端源IP地址进行限制
deny all; #拒绝所有,全局设置,也可以局部设置变量设置黑名单
allow 192.168.1.0/24; #允许指定ip
location /about {
alias /data/nginx/html/pc;
index index.html;
deny 192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
2001:0db8::/32;
deny all;
#先允许小部分,再拒绝大部分
}
yum install -y httpd-tools
htpasswd -cbm /usr/local/nginx/conf/.htpasswd user1 123456 #创建第一个用户
htpasswd -bm /usr/local/nginx/conf/.htpasswd user2 123456 #创建第二个用户
vim /usr/local/nginx/conf/nginx.conf
location = /login {
root /data/www/mobile;
index index.html;
auth_basic "login password";
auth_basic_user_file /usr/local/nginx/conf/.htpasswd;
}
error_page 500 502 404 /error.html;
location = /error.html{
root /data/www/mobile;
}
针对每个虚拟机文件配置日志,定义日志位置为server下
error_page 500 502 404 /error.html;
access_log /usr/local/nginx/logs/www_xiaoma_net.access_log;
error_log /usr/local/nginx/logs/www_xiaoma_net.error_log;
location = /error.html{
root /data/www/mobile;
}
try_file会按顺序检查文件是否存在,返回第一个找到的文件或者文件夹(结尾加上/表示为文件夹)。
如果所有文件都访问不到就会进行内部重定向到最后一个参数,只有最后一个参数可以引起内部重定向之前的参数只设置内部uri的指向。最后一个参数是回退uri且必须存在。
location /about {
root /data/www/mobile;
index index.html;
try_files $uri $uri/index.html $uri.html /about/default.html;
}
$uri:指用户在浏览器输入的文件路径,即域名后面的路径
try_files $uri /about/default.html;
try_files $uri $uri/index.html $uri.html /about/default.html;
keepalive_timeout number #设定保持连接超时时长,0表示禁止长连接,默认为75s。通常配置在http字段作为全局配置
keepalive_request number #再一次长连接上所能允许请求的最大资源值,默认为100
location /download {
autoindex on; #开启自动索引功能
autoindex_exact_size on; #计算文件确切大小(单位bytes),off只显示大概大小(单位kb、 mb、gb)
autoindex_localtime on; #显示本机时间而非GMT(格林威治)时间
limit_rate 10k; #限制响应给客户端的传输速率,但是为bytes/second,默认值0表示无限制与不限速的对比;
root /data/nginx/html/pc
}
client_max_body_size 1m; #设置允许客户端上传单个文件的最大值,默认值为1m
client_body_buffer_size size; #用于接收每个客户端请求报文的body部分的缓冲区,默认16k
超出此大小时,其将被暂存到磁盘上的由下面client_body_tepm_path指令所定义的位置
uclient_body_temp_path path [level1 [level2 [level3]]]; #设定存储客户端请求报文的body部分的临时存储路径及子目录结构和数量
配置示例:
client_max_body_size 10m;
client_body_buffer_size 16k;
client_body_temp_path /apps/nginx/temp 1 2 2; #reload Nginx会自动创建temp目录
限制客户端使用除了指定的请求方式之外的其他方式无法访问
method:GET,POST,PUT,DELETE,MKCOL,COPY,MOVE,OPTIONS,PROPFIND,PROPPATCH,LOCK,UNLOCK,PATCH
limit_except GET POST {
allow 192.168.0.0/24;
allow 192.168.7.101;
deny all;
}
location /upload {
root /data/nginx/html/pc;
index index.html;
limit_except GET {
allow 192.168.0.0/24;
allow 192.168.7.102;
deny all;
}
}