Nginx 作为静态资源服务器

497 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第4天,点击查看活动详情

Nginx常常被用来作为静态资源服务器实现动静分离。将静态资源部署在 Nginx 上。如果请求的是静态资源,直接到静态资源目录获取资源,如果是动态请求,则利用反向代理,把请求转发给对应后台的应用服务器去处理,从而实现动静分离。使用前后端分离后,可以很大程度提升静态资源的访问速度,即使动态服务不可用,静态资源的访问也不会受到影响。

未命名文件 (10).jpg

Nginx 基本配置如下:

http {
    server {
        listen       80;
        server_name  localhost;
        
        location  /{
           root html;
           index index.html;
        }
}        

虚拟主机与请求的转发

  1. listen

配置监听的端口。在listen后可以只加IP地址、端口或主机名。不加端口时,默认监听80端口。

  1. server_name

主机名称。在开始处理处理一个HTTP请求时,Nginx会取出header头中的Host,和每个server块中的server_name进行匹配,以此决定到底由哪个server块来处理这个请求。

一个Host可能会和多个server块的server_name相匹配,这个时候会根据匹配优先级来选择实际处理的server块。

server_name与Host的匹配优先级如下:

  • 首先选择所有字符串完全匹配的server_name。
  • 其次选择通配符在前面的server_name。
  • 再次选择通配符在后面的server_name。
  • 最后选择使用正则表达式匹配的server_name。
  1. location

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

  • = 表示把uri作为字符串,与参数中的uri做完全匹配。
  • ~ 表示匹配uri是大小写敏感的。
  • ~* 表示匹配uri忽略大小写问题。
  • ^~ 表示匹配uri只需要前半部分与参数中的uri匹配即可。
  • @ 表示仅用于 Nginx 服务内部请求之间的重定向带有@的location不直接处理用户请求。

location是有顺序的,当一个请求有可能匹配多个location时,实际上这个请求会被第一个location处理。

文件路径的定义

  1. root

root指令会将location后面的字段拼接到请求url中。

location /root {
   root html;
}

使用curl http://localhost:80/root/1.txt ,最终访问的路径时 /html/root/1.txt。

  1. alias

alias指令不会将location后面的字段拼接到请求url中。

location /alias {
   root html;
}

使用curl http://localhost:80/alias/1.txt ,最终访问的路径时 /html/1.txt。

  1. index

访问的首页。可以配置多个,Nginx将会按照顺序来访问这些文件,如果第一个可以访问,就直接访问文件内容,否则试图返回第二个文件的内容,以此类推。