当前位置: 首页 > 工具软件 > data_location > 使用案例 >

(三)详细nginx_location讲解配置

濮阳振
2023-12-01

工作中会存在配置多个location模块的情况,如果都配置在nginx.conf配置文件中不是特别容易管理,这种情况下就需要单独来定义一个模块的location,可以在nginx.conf配置中指定它的子配置文件,以及location模块中常用的参数,如何配置呢就来说给大家。

1.配置虚拟主机文件

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; #定义子配置文件
    }

2.root和alias区别

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;
}

3.location详细使用

没有使用正则表达式的时候,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;
}

结果:^~ > ~* > /部分路径

4.nginx的四层访问限制

可以通过匹配客户端源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;
    #先允许小部分,再拒绝大部分 
 }

5.nginx账户认证功能

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;
}

6.自定义报错页面

error_page 500 502 404 /error.html;
location = /error.html{
    root /data/www/mobile;
}

7.自定义访问日志

针对每个虚拟机文件配置日志,定义日志位置为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;
}

8.检测文件是否存在,即重定向页面

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;

9.长链接配置

keepalive_timeout number #设定保持连接超时时长,0表示禁止长连接,默认为75s。通常配置在http字段作为全局配置
keepalive_request number #再一次长连接上所能允许请求的最大资源值,默认为100

10.设置下载服务器

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
}

11.设置上传服务器

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目录

12.限制请求方式

限制客户端使用除了指定的请求方式之外的其他方式无法访问

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; 
    }
}
 类似资料: