Code前端首页关于Code前端联系我们

Nginx入门实践:静态服务、图片防盗链、请求过滤、泛域名转发

terry 2年前 (2023-09-28) 阅读数 55 #未命名

15.一些常用技术

15.1 静态服务

server {
  listen       80;
  server_name  static.sherlocked93.club;
  charset utf-8;    # 防止中文文件名乱码

  location /download {
    alias	          /usr/share/nginx/html/static;  # 静态资源目录
    
    autoindex               on;    # 开启静态资源列目录
    autoindex_exact_size    off;   # on(默认)显示文件的确切大小,单位是byte;off显示文件大概大小,单位KB、MB、GB
    autoindex_localtime     off;   # off(默认)时显示的文件时间为GMT时间;on显示的文件时间为服务器时间
  }
}
复制代码

15.2 图像盗链预防

server {
  listen       80;        
  server_name  *.sherlocked93.club;
  
  # 图片防盗链
  location ~* \.(gif|jpg|jpeg|png|bmp|swf)$ {
    valid_referers none blocked server_names ~\.google\. ~\.baidu\. *.qq.com;  # 只允许本机 IP 外链引用,感谢 @木法传 的提醒,将百度和谷歌也加入白名单
    if ($invalid_referer){
      return 403;
    }
  }
}
复制代码

15.3 请求过滤

# 非指定请求全返回 403
if ( $request_method !~ ^(GET|POST|HEAD)$ ) {
  return 403;
}

location / {
  # IP访问限制(只允许IP是 192.168.0.2 机器访问)
  allow 192.168.0.2;
  deny all;
  
  root   html;
  index  index.html index.htm;
}
复制代码

15.4 配置缓存静态文件,例如图像和字体,例如图像和字体声音文件声音文件自视频以来的静态图像打包时一般都会加上snippets,缓存可以设置长一些。先设置强制缓存,再设置协商缓存;如果存在没有哈希值的静态文件,建议不要设置强制缓存,只检查缓存以确定是否需要缓存。 † 可以进行301退回,将对应域名的HTTP请求重定向到HTTPS
server {
    listen      80;
    server_name www.sherlocked93.club;

    # 单域名重定向
    if ($host = 'www.sherlocked93.club'){
        return 301 https://www.sherlocked93.club$request_uri;
    }
    # 全局非 https 协议时重定向
    if ($scheme != 'https') {
        return 301 https://$server_name$request_uri;
    }

    # 或者全部重定向
    return 301 https://$server_name$request_uri;

    # 以上配置选择自己需要的即可,不用全部加
}
复制代码

15.7 分离泛域名路由

这是一个非常方便的技巧。有时我们可能需要设置一些二级或三级域名,我们希望通过Nginx自动指向正确的目录,例如:

  1. test1.doc.sherlocked93.club会自动指向/usr - 指向/share/nginx/html/doc/test1服务器地址;
  2. test2.doc.sherlocked93.club自动指向服务器地址/usr/share/nginx/html/doc/test2
server {
    listen       80;
    server_name  ~^([\w-]+)\.doc\.sherlocked93\.club$;

    root /usr/share/nginx/html/doc/$1;
}
复制代码

15.8 泛域名转发

与之前的功能类似,有时我们想将二级或三级域名引用重写为所需的路径,以便后端系统正确分析该路径的不同规则:

  1. test1.serv.sherlocked93.club/api?name=a 自动转发至:127.0.0.1:8080/test1/api?name=a♾❀;
  2. test2.serv.sherlocked93.club/api?name=a 自动转发至: 127.0.0.1:8080/test2/api?name=a
server {
    listen       80;
    server_name ~^([\w-]+)\.serv\.sherlocked93\.club$;

    location / {
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        Host $http_host;
        proxy_set_header        X-NginX-Proxy true;
        proxy_pass              http://127.0.0.1:8080/$1$request_uri;
    }
}

作者:SHERlocked93

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门