一.基于ip地址的访问限制

allow  xxxx;
deny   xxxx;
他俩的放置顺序;

限制只允许10.0.0.0~10.0.0.255范围的IP访问

限制只允许10.0.0.0~10.0.0.255范围的IP访问(禁止其他网段的访问)
创建虚拟主机,完成该功能
[root@web-8 /etc/nginx/conf.d]#cat deny-allow.conf 
server {

listen 2266;
server_name _;

location /  {
    allow 10.0.0.0/24;
    deny all;
    root  /www/deny-allow;
    index index.html;
  }

}

创建测试数据,查看访问情况
[root@web-8 /etc/nginx/conf.d]#mkdir -p /www/deny-allow
[root@web-8 /etc/nginx/conf.d]#echo 'I am web-8  , test  deny  and  allow !!!!!!!!'  > /www/deny-allow/index.html
[root@web-8 /etc/nginx/conf.d]#systemctl restart nginx
[root@web-8 /etc/nginx/conf.d]#netstat -tunlp |grep 2266
tcp        0      0 0.0.0.0:2266            0.0.0.0:*               LISTEN      5313/nginx: master  

测试访问情况 
1. 用win去访问,可以吗?  可以的
http://10.0.0.8:2266/

2.用61机器去访问,
网卡的流量,网段是对应起来的 
eth0   10.0.0.61
eth1   192.168.106.61

curl 10.0.0.8:2266      从61机器的10.0.0.61发出
curl 192.168.106.8:2266 从61机器的192.168.106.61发出

nginx高级篇(二)_html

提示:只写一个allow的话,等于没有任何意义,必须做好deny限制,才有实际意义

限制只允许192.168.106.0 ~ 192.168.106.255

限制只允许192.168.106.0 ~ 192.168.106.255 范围的IP访问,禁止其他任意的地址访问
[root@web-8 /etc/nginx/conf.d]#cat deny-allow.conf 
server {

listen 2266;
server_name _;

location /  {
    #allow 10.0.0.0/24;
    allow 192.168.106.0/24;
    deny  all;  # 拒绝客户端访问该网页根目录下的资源,返回403权限不足
    root  /www/deny-allow;
    index index.html;
  }

}

你发现,处于同一个内网环境下的 ,有192网段的机器是通的
比如win这回访问可以通码? 不可以

限制只允许windows访问

windows(vmnet8  10.0.0.1)

172网段(vmware提供的LAN网段,纯局域网)

限制只允许windows访问(禁止其他机器访问,比如任意的 10.0.0.61  任意的192.168.106.52)
[root@web-8 /etc/nginx/conf.d]#cat deny-allow.conf 
server {

listen 2266;
server_name _;

location /  {
        # allow 10.0.0.0/24;
        # allow 192.168.106.0/24;
        allow 10.0.0.1;
        deny  all;  # 拒绝客户端访问该网页根目录下的资源,返回403权限不足
    root  /www/deny-allow;
    index index.html;
  }

}


试试,用不同网段的客户端ip,访问,查看权限
10.0.0.1 通,只有这一个ip地址是通的.
10.0.0.61  不通
192.168.106.52 不通

限制拒绝10.0.0.0~10.0.0.255范围的IP访问

限制拒绝10.0.0.0~10.0.0.255范围的IP访问(得允许其他网段访问)
(这个ip限制规则,自上而下的匹配,匹配到规则后,就不会继续向后匹配了)
此时只能通过内网的192网卡去访问这个机器了
[root@web-8 /etc/nginx/conf.d]#cat deny-allow.conf 
server {

listen 2266;
server_name _;

location /  {
    deny 10.0.0.0/24;
    root  /www/deny-allow;
    index index.html;
}

}

通过如下这几个客户端试试,先用10网段的试试
发现10网段全部被拒绝
发现192网段是允许被访问的

限制只拒绝windows访问

基于ip,判断出目标机器是windos吗?

通过目标机器的user-agent去判断,判断的浏览器客户端,是windows等情况,拒绝

限制只拒绝windows访问,其他人都允许访问
[root@web-8 /etc/nginx/conf.d]#cat deny-allow.conf 
server {

listen 2266;
server_name _;

location /  {
    deny 10.0.0.1;
    root  /www/deny-allow;
    index index.html;
  }

}

10.0.0.1 只有它不能访问

二.基于用户认证的访问限制

给虚拟主机,加上密码验证
1.创建密码,密码不是一个简单的纯文本文件,得基于密码数据库的存储
有工具帮你完成htpasswd这个工具去创建密码文件
yum -y install httpd-tools 

创建密码文件
# -b 免交互,输入账号密码即可
# -c 设置密码写入到什么文件

[root@web-8 /etc/nginx/conf.d]#htpasswd -b -c /etc/nginx/auth_passwd yiyuan 123456
Adding password for user yiyuan
[root@web-8 /etc/nginx/conf.d]#cat /etc/nginx/auth_passwd 
yiyuan:$apr1$xVzXRwxS$Sn0UDOXeyuJ.5hyFiclqG0

2.让nginx 的虚拟主机,支持该功能,并且由于是内网文档,让他只在内网下可访问
[root@web-8 /etc/nginx/conf.d]#nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web-8 /etc/nginx/conf.d]#cat auth_basic.conf 
server {
	listen 192.168.106.8:3366;
	charset utf-8;
	server_name _;
	location / {
		    auth_basic "please input your account password";
        auth_basic_user_file /etc/nginx/auth_passwd;
		root /www/auth-html;
		index index.html;
	
	} 

}

3.创建测试数据
[root@web-8 ~]#mkdir -p /www/auth-html{index.html}
[root@web-8 ~]#echo '我是用于验证账户密码的,你不输入密码,别想看到我!!!' > /www/auth-html/index.html

4.启动测试访问
用win去测试
10.0.0.8:3366  结果不通,这一次都不是权限之类的问题,而是tcp/ip都没有建立,直接提示网络连接失败

这里由于我们是学习环境,linux虚拟机的网段,都是vmware提供的纯局域网
在企业里,也会有内网环境,但是有网工给你配置好了所有的环境
你的办公电脑,会有该内网的ip,可以访问到该内网下的资料(需要进行一系列的网络转发设置)

只能在内网环境下,去访问了
192,只能是linux下的访问

咱们临时测试,还是先用windows去访问该站点
理解了nginx虚拟主机,绑定网段即可
还是改为,允许让windows也可以访问,修改监听的地址,放置到10网段
[root@web-8 /etc/nginx/conf.d]#netstat -tunlp |grep 3366
tcp        0      0 192.168.106.8:3366      0.0.0.0:*               LISTEN      5839/nginx: master  
[root@web-8 /etc/nginx/conf.d]#cat auth_basic.conf 
server {
	#listen 192.168.106.8:3366;
        listen 10.0.0.8:3366;
	charset utf-8;
	server_name _;
	location / {
		    auth_basic "please input your account password";
        auth_basic_user_file /etc/nginx/auth_passwd;
		root /www/auth-html;
		index index.html;
	
	} 

}
[root@web-8 /etc/nginx/conf.d]#netstat -tunlp |grep 3366
tcp        0      0 10.0.0.8:3366           0.0.0.0:*               LISTEN      5866/nginx: master  

此时你就可以基于10网段去访问了

nginx高级篇(二)_nginx_02

nginx高级篇(二)_html_03

三nginx限流模块

1.知道用法即可,生产下的限流,更多的是后端框架中限制,nginx这里一般不做,可能导致请求出错。知道用法,以后看到企业里在用,会维护即可。

2.以及理解限流的概念。

计算机程序,会给网站带来极大的恶意流量,导致服务器压力多大,以及网站所有的负载都会很大
www.taobao.com  

服务端
nginx 解析这用户的请求
tcp/ip连接

大量的客户端,大量的ip,去访问服务器,导致服务器建立的大量的tcp连接
(这些大量的ip都是恶意ip,肉鸡一类的机器,而非正常用户的ip)

默认情况下,服务器可建立的连接时65535个tcp连接

具体nginx限流的配置

针对客户端ip判断的,以及针对请求访问速率的限制模块

实际配置

  • 限速规则是1秒一个请求
  • 提供3个VIP特殊请求
  • nodelay参数作用
你自己别去瞎写规则,这里是基于令牌算法,需要对该算法有一定认识才能看懂规则,根据我的思路来
定制虚拟主机文件
[root@web-8 /etc/nginx/conf.d]#cat limit_req.conf 
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

server {
    listen 33555;
    server_name  _;
    charset utf-8;
    access_log /var/log/nginx/limit_req.log;
    limit_req zone=one burst=3 nodelay;
    location / {
        root   /www/limit-req; 
        index  index.html index.htm;
    }
}

创建测试数据目录
[root@web-8 /etc/nginx/conf.d]#mkdir -p /www/limit-req
[root@web-8 /etc/nginx/conf.d]#echo '我是限速模块,你别太快,太快不好' > /www/limit-req/index.html
[root@web-8 /etc/nginx/conf.d]#nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web-8 /etc/nginx/conf.d]#systemctl restart nginx

nginx高级篇(二)_nginx_04

查看限速,以及3个VIP名的作用

nginx高级篇(二)_html_05

nginx高级篇(二)_html_06

nodelay参数作用

用法1:不加nodelay参数

这个nginx的意思是:该虚拟主机限制客户端 1秒内只能有5个请求,其他请求全部延迟排队,这个参数有麻烦,别用,可能导致出现大问题

[root@web-8 ~]#cat /etc/nginx/conf.d/limit_req.conf 
limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;

server {
    listen  33555;
    server_name  _;
    charset utf-8;
    access_log /var/log/nginx/limit_req.log;
    limit_req zone=one burst=3 ;
    location / {
        root   /www/limit-req; 
        index  index.html index.htm;
    }
}

用法2,添加nodelay参数

请求不排队,限速是几个就几个,超过就直接503拒绝,以及设置了burst特殊请求。

四.内置变量

nginx高级篇(二)_html_07

[root@master-61 ~]#cat vars.txt 
echo $args
echo $query_string
echo $arg_NAME
echo $is_args
echo $uri
echo $document_uri
echo $document_root
echo $host
echo $hostname
echo $https
echo $binary_remote_addr
echo $body_bytes_sent
echo $bytes_sent
echo $connection
echo $connection_requests
echo $content_length
echo $content_type
echo $cookie_name
echo $limit_rate
echo $msec
echo $nginx_version
echo $pid
echo $pipe
echo $proxy_protocol_addr
echo $realpath_root
echo $remote_addr
echo $remote_port
echo $remote_user
echo $request
echo $request_body
echo $request_body_file
echo $request_completion
echo $request_filename
echo $request_length
echo $request_method
echo $request_time
echo $request_uri
echo $scheme
echo $server_addr
echo $server_name
echo $server_port
echo $server_protocol
echo $status
echo $time_iso8601
echo $time_local
echo $cookie_NAME
echo $http_NAME
echo $http_cookie
echo $http_post
echo $http_referer
echo $http_user_agent
echo $http_x_forwarded_for
echo $sent_http_NAME
echo $sent_http_cache_control
echo $sent_http_connection
echo $sent_http_content_type
echo $sent_http_keep_alive
echo $sent_http_last_modified
echo $sent_http_location
echo $sent_http_transfer_encoding

nginx高级篇(二)_内网_08

和HTTP协议指南挂钩
想把web做好,必须得玩明白HTTP协议

nginx开启第三方模块

nginx高级篇(二)_html_09

1.nginx装好之后,想添加额外的模块,只能重新编译,添加这个模块。
2.nginx的第三方模块 echo模块,用于打印nginx中所有变量的信息。
先看看一个不支持echo模块的,使用该语法什么样

编译安装nginx,添加第三方模块

nginx高级篇(二)_内网_10

1.重新下载安装nginx,设置新的 nginx命令 
[root@web-8 ~]#which nginx
/usr/sbin/nginx

yum -y install gcc-c++ 
yum -y install pcre pcre-devel
yum -y install zlib zlib-devel
yum -y install openssl openssl-devel  

3.准备好nginx编译环境
yum install pcre pcre-devel openssl openssl-devel  zlib zlib-devel gzip  gcc gcc-c++ make wget httpd-tools vim -y

降低nginx运行时的权限,但是也要注意,你的网页根目录,是否给该用户设置了读写权限。
groupadd www -g 666
useradd www -u 666 -g 666 -M -s /sbin/nologin

4.开始下载echo模块源码,然后编译且安装,添加给nginx
下载源码nginx,进行编译,添加第三方模块的代码即可
cd /opt/
wget http://nginx.org/download/nginx-1.19.0.tar.gz
tar -zxf nginx-1.19.0.tar.gz 

[root@web-8 /opt]#cd nginx-1.19.0/
[root@web-8 /opt/nginx-1.19.0]#ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src

5.此时可以编译安装这个nginx了,重点就在这
通过编译参数 --add-module添加第三方的模块,给nginx
[root@web-8 /opt]#cd /opt/nginx-1.19.0/
编译三部曲,第一曲,设置编译参数
[root@web-8 /opt/nginx-1.19.0]#ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src
[root@web-8 /opt/nginx-1.19.0]#

./configure \
--user=www \
--group=www \
--prefix=/opt/nginx-1-19-0 \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-pcre \
--add-module=/opt/echo-nginx-module

第二曲,第三曲
make && make install 
你必须把上面的linux基础编译依赖环境给装好,否则这里可能会出错。。

编译结束后,查看生成的二进制命令,是否支持了echo模块
编译结束后,nginx的源码目录就可以删除了

查看最终的nginx安装目录
[root@web-8 /opt/nginx-1-19-0]#./sbin/nginx -V
nginx version: nginx/1.19.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --user=www --group=www --prefix=/opt/nginx-1-19-0 --with-http_stub_status_module --with-http_ssl_module --with-pcre --add-module=/opt/echo-nginx-module

发现该nginx是支持echo模块的

下载echo模块的源代码
通过个git命令,去下载github代码仓库中的源码目录
yum install git -y 
cd /opt/
git clone https://github.com/openresty/echo-nginx-module.git
由于某些不可描述的因素,代码可能下载不了。。
去windows中下好了,发给linux

下载完毕
[root@web-8 /opt]#git clone https://github.com/openresty/echo-nginx-module.git
Cloning into 'echo-nginx-module'...

remote: Enumerating objects: 3039, done.
remote: Counting objects: 100% (21/21), done.
remote: Compressing objects: 100% (16/16), done.
remote: Total 3039 (delta 7), reused 15 (delta 5), pack-reused 3018
Receiving objects: 100% (3039/3039), 1.17 MiB | 1.44 MiB/s, done.
Resolving deltas: 100% (1631/1631), done.

查看echo模块的源代码内容
[root@web-8 /opt]#ls /opt/echo-nginx-module/
config  LICENSE  README.markdown  src  t  util  valgrind.suppress

使用该echo模块,可以打印,调试nginx的变量等信息

创建虚拟主机了,给你编译的nginx创建配置文件了

优化默认的配置文件,去除无用的内容
利用include语法,导入自定义的配置文件
[root@web-8 /opt/nginx-1-19-0/conf]#cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    # 自定义配置文件优化
    include /opt/nginx-1-19-0/conf/extra/*.conf;
}

创建子配置文件
[root@web-8 /opt/nginx-1-19-0/conf]#mkdir extra
[root@web-8 /opt/nginx-1-19-0/conf]#cd extra/
[root@web-8 /opt/nginx-1-19-0/conf/extra]#cat test-echo.conf 
server {
    listen       11444;
    server_name  localhost;
    charset utf-8;
    location / {
       echo "yiyuan.cn welcome you!";
       echo $uri;
       echo $document_uri;
       echo $remote_addr;
       echo $remote_port;
       echo $http_user_agent;
    }
}


验证配置是否正确,启动nginx
[root@web-8 /opt/nginx-1-19-0/conf/extra]#/opt/nginx-1-19-0/sbin/nginx -t
nginx: the configuration file /opt/nginx-1-19-0/conf/nginx.conf syntax is ok
nginx: configuration file /opt/nginx-1-19-0/conf/nginx.conf test is successful

[root@web-8 /opt/nginx-1-19-0/conf/extra]#/opt/nginx-1-19-0/sbin/nginx 
[root@web-8 /opt/nginx-1-19-0/conf/extra]#netstat -tunlp|grep 11444
tcp        0      0 0.0.0.0:11444           0.0.0.0:*               LISTEN      11945/nginx: master

测试访问,该echo模块是否正确

你如果用浏览器去访问,nginx默认不会解析这个echo打印的内容,会提供下载功能让你查看这些字符串

nginx高级篇(二)_html_11

在linux客户端中,查看这个echo打印的内置变量的信息
至此也证明了,我们编译现状的nginx,支持echo模块。了。。

nginx高级篇(二)_内网_12

五.location 实战

nginx高级篇(二)_nginx_13

语法,清晰locaiton的匹配规则
Syntax:	location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
Default:	—
Context:	server, location

Syntax:    location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
Default:    —
Context:    server, location

官网用法
location = / {
    [ configuration A ]
}

location / {
    [ configuration B ]
}

location /documents/ {
    [ configuration C ]
}

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

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

测试用法,如果定义了如上的5个location,则

http://yiyuan.cn/                                 匹配A

http://yiyuan.cn/hello                            匹配B

http://yiyuan.cn/documents/hello                  匹配C

http://yiyuan.cn/images/德玛西亚.gif               匹配D

http://yiyuan.cn/documents/德玛西亚.gif            匹配E

在后续的php网站部署,python网站,java网站部署实践配置中,反复用到location语法,即可加深理解

location语法优先级

优先级从高到低

有符号的,才有优先级

否则都往后排

匹配符

匹配规则

优先级

=

定义 URI 和位置的精确匹配。

1

^~

以某个字符串开头,不检查正则(,区分大小写)

2

~

区分大小写的正则匹配 (认识正则,区分url大小写)

3

~*

不区分大小写的正则匹配(认识正则,不区分url大小写)

4







四个规则

生成具体location的匹配规则

配置文件如下
server {
    listen 22333;
    server_name _;

    # 最低级匹配,不符合其他locaiton就来这
    # 属于通用url规则
    location / {
        return 200 "location /  \n";
    }


    # 优先级最高,等于号后面可以指定url
    location = / {
        return 200 "location = /  \n";
    }


    #以/documents/开头的url,来这里,如符合其他locaiton,则以其他优先
    location /documents/ {
        return 200 "location /documents/ \n";
    }

    #匹配任何以/images/开头的请求,不匹配正则
    location ^~ /images/ {
        return 200 "location ^~ /images/  \n";
    }

    #匹配任何以.gif结尾的请求,支持正则
    location ~* \.(gif|jpg|jpeg)$ {
        return 200  "location ~* \.(gif|jpg|jpeg) \n";
    }

    access_log off;

}

进行url的设置访问,查看结果

精确匹配
[root@master-61 ~]#curl 10.0.0.8:22333
location = /  
 
最低级匹配,没有location匹配上,就找默认的 location / {}
[root@master-61 ~]#curl 10.0.0.8:22333/xixixixixixi
location /  
[root@master-61 ~]#curl 10.0.0.8:22333/hehehehehe
location /  
[root@master-61 ~]#curl 10.0.0.8:22333/jinitaimei
location /  
[root@master-61 ~]#curl 10.0.0.8:22333/律师函我是跑不掉了
location /  

 指定url的匹配
指定url的匹配,指定以/documents/开头的url
得你客户端url,以/documnets/开头才行
[root@master-61 ~]#curl 10.0.0.8:22333/documents
location /  

你写的这个url,拿到的是  $url   /documents   
[root@master-61 ~]#curl 10.0.0.8:22333/documents/
location /documents/ 
[root@master-61 ~]#curl 10.0.0.8:22333/documents/xixixixi
location /documents/ 
[root@master-61 ~]#curl 10.0.0.8:22333/documents/xixixihahahahahah
location /documents/ 
[root@master-61 ~]#curl 10.0.0.8:22333/documents/xixixihahahahahah基尼太美
location /documents/ 

匹配,第二优先级的 location  ^~ 匹配指定的url是 /images/
继续指定url,也等于精确匹配字符串 ,必须是以 /images/
[root@master-61 ~]#curl 10.0.0.8:22333/images/
location ^~ /images/  
[root@master-61 ~]#curl 10.0.0.8:22333/IMAGES/
location /  
[root@master-61 ~]#curl 10.0.0.8:22333/images/
location ^~ /images/  
[root@master-61 ~]#curl 10.0.0.8:22333/images/xixixix
location ^~ /images/  
[root@master-61 ~]#curl 10.0.0.8:22333/images/xixixixhahahaha
location ^~ /images/  
[root@master-61 ~]#curl 10.0.0.8:22333/image/xixixixhahahaha
location /  

如何证明它的高优先级,排第二
[root@master-61 ~]#curl 10.0.0.8:22333/images/两年半练习生.jpg
location ^~ /images/  
[root@master-61 ~]#curl 10.0.0.8:22333/asdasdasdasdasdasd/asdasdasd/caixukun.jpg
location ~* \.(gif|jpg|jpeg) 
[root@master-61 ~]#curl 10.0.0.8:22333/asdasdasdasdasdasd/asdasdasd/caixukun.jpg
location ~* \.(gif|jpg|jpeg) 

测试不区分大小写
[root@master-61 ~]#curl 10.0.0.8:22333/asdasdasdasdasdasd/asdasdasd/caixukun.JPG
location ~* \.(gif|jpg|jpeg) 
[root@master-61 ~]#curl 10.0.0.8:22333/asdasdasdasdasdasd/asdasdasd/caixukun.gif
location ~* \.(gif|jpg|jpeg) 
[root@master-61 ~]#curl 10.0.0.8:22333/asdasdasdasdasdasd/asdasdasd/caixukun.GIf
location ~* \.(gif|jpg|jpeg) 
[root@master-61 ~]#curl 10.0.0.8:22333/asdasdasdasdasdasd/asdasdasd/caixukun.jpeg
location ~* \.(gif|jpg|jpeg) 
[root@master-61 ~]#curl 10.0.0.8:22333/asdasdasdasdasdasd/asdasdasd/caixukun.jpeG
location ~* \.(gif|jpg|jpeg) 
[root@master-61 ~]#curl 10.0.0.8:22333/asdasdasdasdasdasd/asdasdasd/caixukun.jpEG
location ~* \.(gif|jpg|jpeg) 
[root@master-61 ~]#curl 10.0.0.8:22333/asxixixixixix/asdasd/caixukun.jpEG
location ~* \.(gif|jpg|jpeg) 
#  ~* 排在老四,优先级算低,

六.location中的root和alias实战

1.明确了location是根据用户访问的具体url来决定做什么事。
2.要做的事是 返回一些静态数据给用户看
(问题在于,你通过什么语句,把nginx机器上的数据,返回给用户)

已知的语法是
server {

	listen 33555;
	server_name _;
	
	# 你现在需要设置
	# 需要访问 10.0.0.8:33555/static/caixukun.jpg
	# 你有什么写法,可以返回这个数据,给用户看到呢?
	# 当前有一个代码目录,叫做 /huya/ 要求静态数据放在这个目录下
	# 已知有一个静态图片,放在如下的目录中 /huya/static/caixukun.jpg 
	# 要求,要进行静态请求匹配,匹配/static/ url开头
	# 等于匹配用户访问的url形式是  10.0.0.8:33555/static/caixukun.jpg
	location ^~ /static/ {
		# 两种写法第一个,写root,root特点是会将该url(/static)填充到网页根目录下,认为它也是一个目录
		# 测一测是否能让你访问到 caixukun.jpg
		
		root  /huya/static/;
		
		# 第二种写法,alias别名用法
		
	}

}

不正确的写法

为了让你理解root的参数含义

nginx高级篇(二)_nginx_14

nginx高级篇(二)_nginx_15

正确写法(root参数)

1.你还是必须要明确,用户要访问的url,是如下
http://10.0.0.8:33555/static/caixukun.jpg

2. 正确的配置文件应该是如下
[root@web-8 /huya/static]#cat /opt/nginx-1-19-0/conf/extra/test-root-alias.conf 
server {

	listen 33555;
	server_name _;
	
	# 你现在需要设置
	# 需要访问 10.0.0.8:33555/static/caixukun.jpg
	# 你有什么写法,可以返回这个数据,给用户看到呢?
	# 当前有一个代码目录,叫做 /huya/ 要求静态数据放在这个目录下
	# 已知有一个静态图片,放在如下的目录中 /huya/static/caixukun.jpg 
	# 要求,要进行静态请求匹配,匹配/static/ url开头
	# 等于匹配用户访问的url形式是  10.0.0.8:33555/static/caixukun.jpg
	location ^~ /static/ {
		# 两种写法第一个,写root,root特点是会将该url(/static)填充到网页根目录下,认为它也是一个目录
                # 应该正确写法如下
		root  /huya/;
		
		# 第二种写法,alias别名用法
		
	}

}

重启服务

3.按照这个写法的话,该资源文件应该是放在什么位置?
最终你要确保
(这里的路径,意思是,该caixukun.jpg资源放在服务器上的什么路径下!!)
才能正确的访问
http://10.0.0.8:33555/static/caixukun.jpg

/huya/static/caixukun.jpg 

nginx高级篇(二)_nginx_16

nginx高级篇(二)_内网_17

nginx location的root参数,和alias参数如上解释,自己根据location的匹配规则,结合root,alias参数,去找静态文件试试