JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

Nginx 备忘录 - 09. 动静分离、防盗链、目录浏览、访问控制

wys521 2024-09-18 03:01:42 精选教程 48 ℃ 0 评论

一、动静分离

为了提高网站的响应速度,减轻后端服务器的负载,对于静态资源,如图片、js、css 等文件,可以在反向代理服务器中进行缓存,这样浏览器在请求一个静态资源时,代理服务器就可以直接处理,而不用将请求转发给后端服务器。对于用户请求的动态文件,如 servlet、jsp,则转发给后端服务器处理。

http {
  upstream liwy_server {
    server 192.168.2.13:8081;
    server 192.168.2.13:8082;
  }

  server {
    listen 80;
    server_name www.liwy-nginx.com;

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

    location /static/ {
      root html;
    }

    location /apis/ {
      proxy_pass http://liwy_server;
      proxy_set_header Host $host:$server_port;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
  }
}

二、防盗链

盗链,简单来说就是别人未经我们的允许,在他们的网站上直接链接到我们网站的资源,让访问他们网站的用户可以直接获取我们的资源。比如,我们的网站上有一张精美的图片,另一个网站通过 <img src="我们网站上图片的链接"> 这样的方式把我们的图片展示在他们的页面上,这就是盗链。

Nginx 防盗链主要是通过对请求头中的 Referer 字段进行检查和判断来实现的。Referer 字段记录了请求资源的来源地址,来告诉我们这个请求是从哪里来的。

Nginx 使用 valid_referers 定义 Referer 的合法来源, 然后使用 $invalid_referer 变量来判断是 Referer 是否合法,从而判断是否被盗链以及后续处理逻辑:

Syntax:  valid_referers none | blocked | server_names | string ...;
Default: —
Context: server, location
  • none:表示没有 Referer 头的请求是合法的。
  • blocked:表示 Referer 头被防火墙或者代理服务器隐藏的请求是合法的。
  • server_names:设置合法的域名。
server {
  listen 80;
  server_name www.liwy-nginx.com;

  location ~* \.(html|gif|jpg|jpeg|png|css|js)$ {
    # 定义合法的 referer 来源
    valid_referers none blocked *.liwy-nginx.com;

    # 用 $invalid_referer 判断 referer 是否合法
    # 如果不合法,就返回 403 禁止访问的状态码
    if ($invalid_referer) {
      return 403;
    }

    root html;
  }

  # 配置 403 错误码对应的错误页面
  error_page 403 /40x.html;
  location = /40x.html {
    root html;
  }
}

使用 curl 工具修改 referer 测试下:

# 只显示头信息
curl -I http://www.liwy-nginx.com
# 设置 referer
curl -e "http://www.liwy-nginx.com" \
www.liwy-nginx.com/imgs/liwy.jpg;

三、目录浏览

目录浏览功能一般用来共享文件,允许用户浏览和下载各种文件。它允许用户以列表的方式,查看服务器上指定目录下的文件内容。

# 启用或禁用目录列表输出
Syntax:  autoindex on | off;
Default: autoindex off;
Context: http, server, location

# 设置目录列表输出格式
Syntax:  autoindex_format html | xml | json | jsonp;
Default: autoindex_format html;
Context: http, server, location

# 对于 html 格式,是否展示文件大小
Syntax:  autoindex_exact_size on | off;
Default: autoindex_exact_size on;
Context: http, server, location

示例:

server {
  listen 80;
  server_name www.liwy-nginx.com;

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

  location /download {
    root   html/res;
    
    # 开启目录浏览功能
    autoindex on;
    # 显示文件大小的时候,显示单位
    autoindex_exact_size off;
  }
}

四、访问控制

设置 IP 的黑白名单,用于控制哪些 IP 可以访问 Nginx 或者 哪些 IP 不能访问 Nginx。

# 允许访问指定的网络或地址
Syntax:  allow address | CIDR | unix: | all;
Default: —
Context: http, server, location, limit_except

# 拒绝访问指定的网络或地址
Syntax:  deny address | CIDR | unix: | all;
Default: —
Context: http, server, location, limit_except

示例:

server {
  listen 80;
  server_name www.liwy-nginx.com;

  # 设置禁止访问的 IP
  deny 192.168.0.105;
  deny 192.168.0.104;
  deny 192.168.1.0/24;
  # 设置允许访问的 IP
  allow 192.168.1.1;
  allow all;

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

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表