分布式 - 服务器Nginx:基础系列之Nginx静态资源配置指令server_name | listen | location | root | alias | index| error_page

这篇具有很好参考价值的文章主要介绍了分布式 - 服务器Nginx:基础系列之Nginx静态资源配置指令server_name | listen | location | root | alias | index| error_page。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


通过浏览器发送一个HTTP请求实现从客户端发送请求到服务器端获取所需要内容后并把内容回显展示在页面。这个时候,我们所请求的内容就分为两种类型,一类是静态资源、一类是动态资源。静态资源即指在服务器端真实存在并且能直接拿来展示的一些文件,比如常见的html页面、css文件、js文件、图 片、视频等资源;动态资源即指在服务器端真实存在但是要想获取需要经过一定的业务逻辑处理,根据不同的条件展示在页面不同这 一部分内容,比如说报表数据展示、根据当前登录用户展示相关具体数据等资源;

Nginx处理静态资源的内容,我们需要考虑下面这几个问题:

(1)静态资源的配置指令
(2)静态资源的配置优化
(3)静态资源的压缩配置指令
(4)静态资源的缓存处理
(5)静态资源的访问控制,包括跨域问题和防盗链问题

先看下静态资源的配置指令。

01. server_name 指令

当收到一个请求时,nginx 会先检查请求的主机名和端口号是否与配置文件中的任何 server 块的监听地地址 (listen) 匹配。如果找到了匹配的监听地址,nginx 会继续检查 server 块中的 server_name 指令。server_name指令用于指定server 块所匹配的虚拟主机或IP。nginx 会按照以下顺序进行匹配:

  • 如果 server_name 指令中指定了具体的主机名,则请求的主机名必须与之完全匹配。
  • 如果 server_name 指令中使用了通配符,则请求的主机名必须与通配符匹配。
  • 如果 server_name 指令中使用了正则表达式,则请求的主机名必须与正则表达式匹配。

如果找到了与请求的主机名匹配的 server 块,nginx 会将请求转发给该 server 块中配置的相应的 location。如果没有找到与请求的主机名匹配的 server 块,nginx 会使用默认的 server 块来处理请求,如果没有设置默认的 server 块,则nginx 会使用第一个 server 块来处理该请求。

关于server_name 的配置方式有三种,分别是:精确匹配、通配符匹配、正则表达式匹配。

1. 精确匹配

精确匹配的语法:

server_name domain1.com domain2.com;
server_name 192.168.1.100;

其中,domain1.com 和 domain2.com是虚拟主机的域名,可以指定多个域名,用空格隔开。如果请求的主机名与server_name指定的任何一个域名匹配,Nginx就会将请求交给这个虚拟主机处理。除了域名,server_name还可以指定IP地址,这样,当请求的主机名为192.168.1.100时,Nginx就会将请求交给这个虚拟主机处理。

hosts是一个没有扩展名的系统文件,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交DNS域名解析服务器进行IP地址的解析。因为域名是要收取一定的费用,所以我们可以使用修改hosts文件来制作一些虚拟域名来使用。

# 配置hosts文件
[root@192 conf]# cat /etc/hosts
127.0.0.1 www.domain1.com
127.0.0.1 www.domain2.com

# 配置nginx.conf文件
[root@192 conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    server {
        listen       8080;
        server_name  127.0.0.1;

        default_type text/plain;
        return 500 'This is a 500 request';
    }

    server {
        listen       8080;
        server_name  www.domain1.com www.domain2.com;

        default_type text/plain;
        return 444 'This is a 444 request';
    }
}

# 测试访问
[root@192 conf]# curl http://www.domain1.com:8080/
This is a 444 request

[root@192 conf]# curl http://www.domain2.com:8080/
This is a 444 request

[root@192 conf]# curl http://127.0.0.1:8080/
This is a 500 request

2. 通配符匹配

server_name中支持通配符*,但需要注意的是通配符不能出现在域名的中间,只能出现在首段或尾段。

# 配置nginx.conf文件
[root@192 conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    server {
        listen       8080;
        server_name  127.0.0.1;

        default_type text/plain;
        return 500 'This is a 500 request';
    }

    server {
        listen       8080;
        server_name  *.com;

        default_type text/plain;
        return 444 'This is a 444 request';
    }
}

# 测试访问
[root@192 conf]# curl  http://www.domain1.com:8080/
This is a 444 request

3. 正则表达式匹配

server_name中可以使用正则表达式,并且使用~作为正则表达式字符串的开始标记。常见的正则表达式:

代码 说明
^ 匹配搜索字符串开始位置
$ 匹配搜索字符串结束位置
. 匹配除换行符\n之外的任何单个字符
\ 转义字符,将下一个字符标记为特殊字符
[xyz] 字符集,与任意一个指定字符匹配
[a-z] 字符范围,匹配指定范围内的任何字符
\w 与以下任意字符匹配 A-Z a-z 0-9 和下划线,等效于[A-Za-z0-9_]
\d 数字字符匹配,等效于[0-9]
{n} 正好匹配n次
{n,} 至少匹配n次
{n,m} 匹配至少n次至多m次
* 零次或多次,等效于{0,}
+ 一次或多次,等效于{1,}
? 零次或一次,等效于{0,1}
[root@192 conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    server {
        listen       8080;
        # 以^开头,以$结尾
        server_name  ~^www\.(\w+)\.com$;

        default_type text/plain;
        # $1 匹配的是 (\w+) 中的值
        return 444 '=====》$1 =====》';
    }
}

# 测试
[root@192 conf]# curl  http://www.domain2.com:8080/
=====》domain2 =====[root@192 conf]# curl  http://www.domain1.com:8080/
=====》domain1 =====

4. default_server 属性

在 Nginx 中,default_server 属性是用来标识一个虚拟主机的,它的作用是将此虚拟主机设置成默认主机。所谓的默认主机是指当 Nginx 收到一个请求时,如果没有匹配到对应的 server 块,则会默认使用 default_server 所对应的虚拟主机来处理该请求。如果没有设置 default_server,则 Nginx 会使用第一个 server 块来处理该请求。

① 如果没有匹配到对应的 server 块,则会默认使用 default_server 所对应的虚拟主机来处理该请求。

[root@192 conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    server {
        listen       8080;
        server_name  www.hh.com;

        default_type text/plain;
        return 444 'This is a 444 request';
    }
    
   server {
        listen       8080 default_server;
        server_name  www.hh.com ;

        default_type text/plain;
        return 500 'This is a 500 request';
    }
}

# 如果没有匹配到对应的 server,则会默认使用 default_server 所对应的虚拟主机来处理该请求 
[root@192 conf]# curl  http://127.0.0.1:8080/
This is a 500 request

[root@192 conf]# curl http://192.168.38.34:8080/
curl: (7) Failed connect to 192.168.38.34:8080; 没有到主机的路由

② 如果没有设置 default_server,则 Nginx 会使用第一个 server 来处理该请求。

[root@192 conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    server {
        listen       8080;
        server_name  www.hh.com;

        default_type text/plain;
        return 444 'This is a 444 request';
    }
    
   server {
        listen       8080;
        server_name  www.hh.com;

        default_type text/plain;
        return 500 'This is a 500 request';
    }
}

# 如果没有设置 default_server,则 Nginx 会使用第一个 server 来处理该请求 
[root@192 conf]# curl  http://127.0.0.1:8080/
This is a 444 request

5. 匹配顺序案例

由于 server_name 指令支持通配符和正则表达式,因此在包含多个server块的配置文件中,可能会出现一个名称被多个虚拟主机的 server_name 匹配成功的情况,这时当前的请求交给谁来处理呢?

① 存在server_name为精确匹配、正则表达式匹配、通配符在开始匹配、通配符在结尾匹配、默认配置的server块:

[root@192 conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    
    server{
        listen 8080;
        server_name www.domain1.com;
        default_type text/plain;
        return 200 '精确匹配成功';
    }

    server{
        listen 8080;
        server_name ~^www\.\w+\.com$;
        default_type text/plain;
        return 200 '正则表达式匹配成功';
    }

    server{
        listen 8080;
        server_name www.domain1.*;
        default_type text/plain;
        return 200 '通配符匹配*成功';
    }

    server{
        listen 8080;
        server_name *.domain1.com;
        default_type text/plain;
        return 200 '*通配符匹配成功';
    }

    server{
        listen 8080 default_server;
        server_name _;
        default_type text/plain;
	    return 444 'default_server未找到server匹配成功';
    }
}

[root@192 conf]# curl  http://www.domain1.com:8080/
精确匹配成功

② 存在server_name为正则表达式匹配、通配符在开始匹配、通配符在结尾匹配、默认配置的server块:

[root@192 conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    server{
        listen 8080;
        server_name ~^www\.\w+\.com$;
        default_type text/plain;
        return 200 '正则表达式匹配成功';
    }

    server{
        listen 8080;
        server_name www.domain1.*;
        default_type text/plain;
        return 200 '通配符匹配*成功';
    }

    server{
        listen 8080;
        server_name *.domain1.com;
        default_type text/plain;
        return 200 '*通配符匹配成功';
    }

    server{
        listen 8080 default_server;
        server_name _;
        default_type text/plain;
	    return 444 'default_server未找到server匹配成功';
    }
}

[root@192 conf]# curl  http://www.domain1.com:8080/
*通配符匹配成功

③ 存在server_name为正则表达式匹配、通配符在结尾匹配、默认配置的server块:

[root@192 conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    server{
        listen 8080;
        server_name ~^www\.\w+\.com$;
        default_type text/plain;
        return 200 '正则表达式匹配成功';
    }

    server{
        listen 8080;
        server_name www.domain1.*;
        default_type text/plain;
        return 200 '通配符匹配*成功';
    }

    server{
        listen 8080 default_server;
        server_name _;
        default_type text/plain;
	    return 444 'default_server未找到server匹配成功';
    }
}

[root@192 conf]# curl  http://www.domain1.com:8080/
通配符匹配*成功

④ 存在server_name为正则表达式匹配、默认配置的server块:

[root@192 conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    server{
        listen 8080;
        server_name ~^www\.\w+\.com$;
        default_type text/plain;
        return 200 '正则表达式匹配成功';
    }

    server{
        listen 8080 default_server;
        server_name _;
        default_type text/plain;
	    return 444 'default_server未找到server匹配成功';
    }
}

[root@192 conf]# curl  http://www.domain1.com:8080/
正则表达式匹配成功

⑤ 匹配默认配置的server块:

[root@192 conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    
    server{
        listen 8080 default_server;
        server_name _;
        default_type text/plain;
	    return 444 'default_server未找到server匹配成功';
    }
}

[root@192 conf]# curl  http://www.domain1.com:8080/
default_server未找到server匹配成功

02. listen 指令

官方文档地址:https://nginx.org/en/docs/http/ngx_http_core_module.html#listen

在 Nginx 中,listen 指令用于指定 Nginx 监听的 IP 地址和端口号。它的语法如下:

listen address:port [options];

其中,address 表示要监听的 IP 地址,可以是一个具体的 IP 地址,也可以是一个通配符,如 * 表示监听所有可用的 IP 地址。port 表示要监听的端口号。options 是可选的,用于指定一些额外的选项,如 SSL/TLS 配置、HTTP/2 配置等。

以下是一些常见的 listen 指令的示例:

# 监听指定的IP和端口
listen 127.0.0.1:8000;  

# 监听指定IP的所有端口
listen 127.0.0.1;	

# 监听所有可用的 IP 地址,端口号为 8000
listen 8000;	

# 监听所有可用的 IP 地址,端口号为 80
listen *:80;

# 监听指定的 IP 地址,端口号为 8080,启用 SSL/TLS
listen 192.168.1.100:8080 ssl;

# 监听指定的 IP 地址,端口号为 443,启用 SSL/TLS 和 HTTP/2
listen 192.168.1.100:443 ssl http2;

① 修改nginx配置文件:监听虚拟主机的8080端口

[root@192 conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    server {
        listen       8080;
        server_name  127.0.0.1;

        location / {
            root   html;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

② 测试访问:http://192.168.38.33:8080/

nginx代理静态资源,【分布式-服务器Nginx】,分布式,服务器,nginx

03. location 指令

location指令用于匹配请求的URI,并指定如何处理匹配到的请求。 location指令的语法如下:

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

其中,uri可以是一个字符串或一个正则表达式,用于匹配请求的URI。=表示精确匹配,表示区分大小写的正则匹配,*表示不区分大小写的正则匹配,^~表示普通字符串匹配。当一个请求到达 Nginx 时,它会按照一定的顺序逐个匹配 location 指令,直到找到第一个匹配的指令为止。下面是 location 指令的匹配顺序:

① 精确匹配 (=):如果请求的 URL 路径与指定的字符串完全匹配,则使用该配置块处理请求。例如:

location = /path {
    ...
}

② 前缀匹配 (^~):如果请求的 URL 路径以指定的字符串开头,则使用该配置块处理请求,并停止继续匹配其他 location 块。例如:

location ^~ /path {
    ...
}

③ 正则表达式匹配 (~~*):如果请求的 URL 路径与指定的正则表达式匹配,则使用该配置块处理请求。~表示区分大小写,~* 表示不区分大小写。例如:

location ~ /path {
    ...
}

④ 普通字符串匹配:如果请求的 URL 路径包含指定的字符串,则使用该配置块处理请求。例如:

location /path {
    ...
}

1. 精确匹配 (=)

如果请求的 URL 路径与指定的字符串完全匹配,则使用该配置块处理请求。

[root@192 conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    server{
        listen 8080;
        server_name localhost;
        
        location = /path {
            default_type text/plain;
       	    return 200 'access success';
        }
    }
}

# 可以匹配
[root@192 conf]# curl  http://192.168.38.33:8080/path
access success

# 可以匹配
[root@192 conf]# curl  http://192.168.38.33:8080/path?a=zhangsan
access success

# 无法匹配
[root@192 conf]# curl  http://192.168.38.33:8080/pathabc
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.16.1</center>
</body>
</html>

# 无法匹配
[root@192 conf]# curl  http://192.168.38.33:8080/path/abc
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.16.1</center>
</body>
</html>

2. 前缀匹配 (^~)

如果请求的 URL 路径以指定的字符串开头,则使用该配置块处理请求,并停止继续匹配其他 location 块。

[root@192 conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    server{
        listen 8080;
        server_name localhost;
        
        location ^~ /path {
            default_type text/plain;
       	    return 200 'access success';
        }
    }
}

# 可以匹配
[root@192 conf]# curl  http://192.168.38.33:8080/path
access success

# 可以匹配
[root@192 conf]# curl  http://192.168.38.33:8080/pathabc
access success

# 可以匹配
[root@192 conf]# curl  http://192.168.38.33:8080/path/abc
access success

# 无法匹配
[root@192 conf]# curl  http://192.168.38.33:8080/pat
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.16.1</center>
</body>
</html>

3. 正则表达式匹配 (~ 或 ~*)

如果请求的 URL 路径与指定的正则表达式匹配,则使用该配置块处理请求。~表示区分大小写,~* 表示不区分大小写。

[root@192 conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    server{
        listen 8080;
        server_name localhost;
        
        # 正则表达式匹配,~^ 表示后面的路径是以 "/path" 开头,\w 表示匹配一个字母或数字,$ 表示路径的结尾。
        location ~^/path\w$ {
            default_type text/plain;
       	    return 200 'access success';
        }
    }
}

# 可以匹配
[root@192 conf]# curl  http://192.168.38.33:8080/path2
access success

# 可以匹配
[root@192 conf]# curl  http://192.168.38.33:8080/patha
access success

# 无法匹配
[root@192 conf]# curl  http://192.168.38.33:8080/Patha
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.16.1</center>
</body>
</html>

# 无法匹配
[root@192 conf]# curl  http://192.168.38.33:8080/pathab
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.16.1</center>
</body>
</html>

# 无法匹配
[root@192 conf]# curl  http://192.168.38.33:8080/path/abc
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.16.1</center>
</body>
</html>

# 无法匹配
[root@192 conf]# curl  http://192.168.38.33:8080/path
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.16.1</center>
</body>
</html>
[root@192 conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    server{
        listen 8080;
        server_name localhost;
        
        # 正则表达式匹配,~*^ 表示后面的路径是以 "/path" 开头,\w 表示匹配一个字母或数字,$ 表示路径的结尾。
        location ~*^/path\w$ {
            default_type text/plain;
       	    return 200 'access success';
        }
    }
}

# 可以匹配
[root@192 conf]# curl  http://192.168.38.33:8080/patha
access success

# 可以匹配
[root@192 conf]# curl  http://192.168.38.33:8080/path1
access success

# 可以匹配
[root@192 conf]# curl  http://192.168.38.33:8080/Patha
access success

# 无法匹配
[root@192 conf]# curl  http://192.168.38.33:8080/Path/abc
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.16.1</center>
</body>
</html>

# 无法匹配
[root@192 conf]# curl  http://192.168.38.33:8080/path
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.16.1</center>
</body>
</html>

4. 普通字符串匹配

如果请求的 URL 路径包含指定的字符串,则使用该配置块处理请求。

[root@192 conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    server{
        listen 8080;
        server_name localhost;
        
        location /path {
            default_type text/plain;
       	    return 200 'access success';
        }
    }
}

[root@192 conf]# curl  http://192.168.38.33:8080/path
access success

[root@192 conf]# curl  http://192.168.38.33:8080/path/
access success

[root@192 conf]# curl  http://192.168.38.33:8080/path/abc
access success

[root@192 conf]# curl  http://192.168.38.33:8080/path/abc/
access success

5. 匹配顺序案例

① 存在精确匹配、前缀匹配、正则表达式匹配、普通字符串匹配

[root@192 conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    
    server{
        listen 8080;
        server_name localhost;
        
        location = /path {
            default_type text/plain;
       	    return 200 '精确匹配';
        }
    }

    server{
        listen 8080;
        server_name localhost;
        
        location ^~ /path {
            default_type text/plain;
       	    return 200 '前缀匹配';
        }
    }
    
    server{
        listen 8080;
        server_name localhost;
        
        location ~ /path {
            default_type text/plain;
       	    return 200 '正则表达式匹配';
        }
    }
    
    server{
        listen 8080;
        server_name localhost;
        
        location /path {
            default_type text/plain;
       	    return 200 '普通字符串匹配';
        }
    }
}

[root@192 conf]# curl  http://192.168.38.33:8080/path
精确匹配

② 存在前缀匹配、正则表达式匹配、普通字符串匹配

[root@192 conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    server{
        listen 8080;
        server_name localhost;
        
        location ^~ /path {
            default_type text/plain;
       	    return 200 '前缀匹配';
        }
    }
    
    server{
        listen 8080;
        server_name localhost;
        
        location ~ /path {
            default_type text/plain;
       	    return 200 '正则表达式匹配';
        }
    }
    
    server{
        listen 8080;
        server_name localhost;
        
        location /path {
            default_type text/plain;
       	    return 200 '普通字符串匹配';
        }
    }
}

[root@192 conf]# curl  http://192.168.38.33:8080/path
前缀匹配

③ 存在正则表达式匹配、普通字符串匹配

[root@192 conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    
    server{
        listen 8080;
        server_name localhost;
        
        location ~ /path {
            default_type text/plain;
       	    return 200 '正则表达式匹配';
        }
    }
    
    server{
        listen 8080;
        server_name localhost;
        
        location /path {
            default_type text/plain;
       	    return 200 '普通字符串匹配';
        }
    }
}

[root@192 conf]# curl  http://192.168.38.33:8080/path
正则表达式匹配

04. root 指令

root 指令是用于指定 Nginx 服务器的根目录的指令。在 Nginx 配置文件中,可以使用 root 指令来指定服务器的根目录,它的语法如下:

root path;

其中,path 是服务器根目录的路径。可以使用绝对路径或相对路径。如果使用相对路径,则相对于 Nginx 配置文件的路径。

/usr/local/nginx/html目录下创建一个 image目录,并在目录下放入2张a.jpg、b.jpg图片:

① 使用相对路径:

[root@192 conf]# ls /usr/local/nginx/html/image
a.jpg  b.jpg

[root@192 conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    
    server{
        listen 8080;
        server_name localhost;
        
        location /image {
            root   html;
        }
    }
}

当客户端请求 http://192.168.38.33:8080/image/b.jpg,这将会访问 /usr/local/nginx/html/image/b.jpg

② 使用绝对路径:root的处理结果是: root路径+location路径,/usr/local/nginx/html/image/b.jpg

[root@192 conf]# ls /usr/local/nginx/html/image
a.jpg  b.jpg

[root@192 conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    
    server{
        listen 8080;
        server_name localhost;
        
        location /image {
            root   /usr/local/nginx/html;
        }
    }
}

当客户端请求 http://192.168.38.33:8080/image/b.jpg,这将会访问 /usr/local/nginx/html/image/b.jpg ,即 root 指定的路径 + location 指定的路径。

05. alias 指令

alias 指令用于将 URL 路径映射到服务器文件系统中的另一个位置。它的语法如下:

location /path {
    alias /new/path;
}

其中,/path 是客户端请求的 URL 路径,/new/path 是服务器文件系统中的实际路径。当客户端请求 /path 时,Nginx 会将其映射到 /new/path,并返回对应的文件或目录。

① 在/usr/local/nginx/html目录下创建一个 image目录,并在目录下放入2张a.jpg、b.jpg图片:

[root@192 conf]# ls /usr/local/nginx/html/image
a.jpg  b.jpg

[root@192 conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    
    server{
        listen 8080;
        server_name localhost;
        
        location /image {
            alias /usr/local/nginx/html;
        }
    }
}

当客户端请求 http://192.168.38.33:8080/image/b.jpg,报错 404 Not Found。

查看nginx的错误日志:

[root@192 conf]# tail -f /usr/local/nginx/logs/error.log
2023/09/03 16:07:02 [error] 91629#0: *87 open() "/usr/local/nginx/html/b.jpg" failed (2: No such file or directory), client: 192.168.38.1, server: localhost, request: "GET /image/b.jpg HTTP/1.1", host: "192.168.38.33:8080"

可以看到访问的是 /usr/local/nginx/html/b.jpg,即 alias 指定的路径,使用 alias 指定的路径替代了 location 指定的路径。

② 重新修改配置文件中alias指定的路径:

[root@192 conf]# ls /usr/local/nginx/html/image
a.jpg  b.jpg

[root@192 conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    
    server{
        listen 8080;
        server_name localhost;
        
        location /image {
            alias /usr/local/nginx/html/image;
        }
    }
}

当客户端请求 http://192.168.38.33:8080/image/b.jpg,访问的是 /usr/local/nginx/html/image/b.jpg

06. index 指令

index指令用于设置网站的欢迎页面。其语法如下:

index file1 [file2 ...];

其中,file1、file2等为索引文件名,可以指定多个,以空格分隔。nginx会按照指定的顺序依次查找这些文件,直到找到为止。如果都找不到,则返回403 Forbidden错误。

[root@192 conf]# ls /usr/local/nginx/html/image
a.jpg  b.jpg

[root@192 conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    
    server{
        listen 8080;
        server_name localhost;
        
        location /image {
            root /usr/local/nginx/html;
            index b.jpg a.jpg;
        }
    }
}

当客户端请求 http://192.168.38.33:8080/image/ ,因为使用 index 指令指定了默认文件 b.jpg,Nginx 会放回 /usr/local/nginx/html/image/b.jpg 文件。如果该文件不存在,则会返回目录列表或者 403 Forbidden 错误。

07. error_page 指令

error_page 指令用于定义服务器在处理请求时遇到错误时的行为。该指令可以将错误页面重定向到指定的 URL 或本地文件,或者返回指定的 HTTP 状态码。以下是 error_page 指令的语法:

error_page code ... [=[response]] uri;

其中,code 是 HTTP 状态码,可以是单个状态码,也可以是多个状态码,用空格分隔。file 或 uri 是要显示的错误页面的文件路径或 URL。

# 将 404 错误页面重定向到 /404.html 页面
error_page 404 /404.html;

# 把所有 404、500、502、503 和 504 错误页面重定向到 /error.html 页面。
error_page 404 500 502 503 504 /error.html;

# 把所有 404 错误页面重定向到一个 403 状态码。
error_page 404 =403;

① 可以指定具体的跳转地址:

[root@192 conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    
    server{
        listen 8080;
        server_name localhost;
        
        error_page 404 http://www.baidu.com;
    }
}

当客户端请求 http://192.168.38.33:8080/a 时,跳转到 http://www.baidu.com

② 可以指定重定向地址:

[root@192 conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    
    server {
        listen 8080;
        server_name localhost;
        
        # 将 404 状态码到 /50x.html 页面
        error_page 404 /50x.html;
        
        # 把所有 500 502 503 504 状态码重定向到 /50x.html 页面。
        error_page 500 502 503 504 /50x.html;
        
        error_page 404 =200 /50x.html;
        location =/50x.html{
            root html;
        }
    }
}

客户端访问 http://192.168.38.33:8080/a

nginx代理静态资源,【分布式-服务器Nginx】,分布式,服务器,nginx

③ 可选项=[response]的作用是更改状态码

[root@192 conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    
    server {
        listen 8080;
        server_name localhost;

        # 当返回404找不到对应的资源的时候,在浏览器上可以看到,最终返回的状态码是200
        # 这块需要注意下,编写error_page后面的内容,404后面需要加空格,200前面不能加空格
        error_page 404 =200 /50x.html;
        location =/50x.html{
            root html;
        }
    }
}

nginx代理静态资源,【分布式-服务器Nginx】,分布式,服务器,nginx文章来源地址https://www.toymoban.com/news/detail-766080.html

到了这里,关于分布式 - 服务器Nginx:基础系列之Nginx静态资源配置指令server_name | listen | location | root | alias | index| error_page的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 分布式 - 服务器Nginx:基础系列之Nginx静态资源配置指令server_name | listen | location | root | alias | index| error_page

    通过浏览器发送一个HTTP请求实现从客户端发送请求到服务器端获取所需要内容后并把内容回显展示在页面。这个时候,我们所请求的内容就分为两种类型,一类是静态资源、一类是动态资源。静态资源即指在服务器端真实存在并且能直接拿来展示的一些文件,比如常见的ht

    2024年02月04日
    浏览(46)
  • 分布式 - 服务器Nginx:一小时入门系列之动静分离

    1. 动静分离的好处 Apache Tocmat 严格来说是一款java EE服务器,主要是用来处理 servlet请求。处理css、js、图片这些静态文件的IO性能不够好,因此,将静态文件交给nginx处理,可以提高系统的访问速度,减少tomcat的请求次数,有效的给后端服务器降压。 2. 分离静态文件 部署 ruo

    2024年02月13日
    浏览(52)
  • 分布式 - 服务器Nginx:一小时入门系列之负载均衡

    跨多个应用程序实例的负载平衡是一种常用技术,用于优化资源利用率、最大化吞吐量、减少延迟和确保容错配置。‎使用 nginx 作为非常有效的HTTP负载平衡器,将流量分配到多个应用程序服务器,可以提升Web应用程序的性能,提高扩展性和可靠性。 使用 upstream 定义一组服务

    2024年02月12日
    浏览(52)
  • 分布式 - 服务器Nginx:一小时入门系列之 rewrite 指令

    1. rewrite 指令语法 nginx的rewrite指令用于重写URL,可以将一个URL重写为另一个URL。它的语法如下: 其中,regex是一个正则表达式,用于匹配需要重写的URL;replacement是重写后的URL;flag是可选的标志,用于控制重写的行为。flag 的常见取值为 last 和 break,都是用于控制重写规则执

    2024年02月11日
    浏览(55)
  • 分布式 - 服务器Nginx:一小时入门系列之 return 指令

    1. return 指令语法 return指令用于立即停止当前请求的处理,并返回指定的HTTP状态码和响应头信息,它可以用于在Nginx中生成自定义错误页面,或者在Nginx中重定向到另一个URL,它的语法如下: 其中,code 是 HTTP 状态码,可以是 2xx、3xx、4xx 或 5xx 等。text 是可选的文本信息,用于

    2024年02月11日
    浏览(44)
  • 分布式 - 服务器Nginx:应知应会系列之Nginx简介 | 下载安装 | 启动和停止服务

    Nginx是一个高性能的Web服务器,同时也是一个反向代理服务器。它最初是为了解决C10K问题而开发的,即如何让一个服务器同时处理成千上万个并发连接。Nginx采用了事件驱动的异步非阻塞处理方式,能够高效地处理大量并发连接,因此被广泛应用于高并发的Web应用场景中。 此

    2024年02月11日
    浏览(62)
  • 分布式 - 服务器Nginx:一小时入门系列之HTTPS协议配置

    1. HTTPS 协议 HTTPS 是一种通过计算机网络进行安全通信的协议。它是HTTP的安全版本,通过使用 SSL 或 TLS 协议来加密和保护数据传输。HTTPS的主要目的是确保在客户端和服务器之间传输的数据是加密的,以防止第三方窃听、篡改或伪装。它通过使用公钥加密和私钥解密的方式来

    2024年02月11日
    浏览(53)
  • 分布式 - 服务器Nginx:一小时入门系列之 HTTPS协议配置

    1. HTTPS 协议 HTTPS 是一种通过计算机网络进行安全通信的协议。它是HTTP的安全版本,通过使用 SSL 或 TLS 协议来加密和保护数据传输。HTTPS的主要目的是确保在客户端和服务器之间传输的数据是加密的,以防止第三方窃听、篡改或伪装。它通过使用公钥加密和私钥解密的方式来

    2024年02月11日
    浏览(53)
  • 分布式 - 服务器Nginx:一小时入门系列之代理缓冲与缓存

    官方文档:https://nginx.org/en/docs/http/ngx_http_proxy_module.html 代理缓冲用于临时存储从后端服务器返回的响应数据。通过使用代理缓冲,Nginx可以在接收完整的响应后再将其发送给客户端,从而提高性能和效率。 ① 客户端往往是用户网络,情况复杂,可能出现网络不稳定,速度较

    2024年02月11日
    浏览(48)
  • 分布式 - 服务器Nginx:一小时入门系列之HTTP反向代理

    1. 正向代理和反向代理 正向代理是 客户端 通过代理服务器访问互联网资源的方式。在这种情况下,客户端向代理服务器发送请求,代理服务器再向互联网上的服务器发送请求,获取资源并返回给客户端。正向代理的典型应用场景是翻墙,即通过代理服务器访问被封锁的网站

    2024年02月14日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包