上一篇文章写了Nginx负载均衡实现方案详解,有同学私信我说能不能写一篇关于nginx代理静态资源的文章。当然没问题,这篇文章就分享一下如何配置Nginx作为静态资源服务器同时也分享一些常用的安全策略配置。

一:静态资源?

静态资源指的是在服务器端存储的不会变化的文件,这些文件的内容在服务器端被写入后,除非进行人为修改,否则一般不会发生变化。常见的静态资源包括HTML、CSS、JavaScript、图片、音频、视频等文件

二:基本配置

首先我们需要配置Nginx来指定静态资源的存放路径以及访问的URL。如下:

server {  
    listen       80;                  # 监听端口  
    server_name  static.example.com;  # 服务器名称,可以根据实际情况修改  
  
    # 设置字符集  
    charset utf-8;  
  
    # 定义静态资源路径  
    location / {  
        root /path/to/static/files;  # 静态资源存放的根目录  
        index index.html index.htm;  # 默认的首页文件  
  
        # 开启gzip压缩,减少传输大小  
        gzip on;  
        gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;  
  
        # 设置过期时间,让浏览器缓存资源  
        expires 30d;  
    }  
  
    # 错误页面配置  
    error_page   500 502 503 504  /50x.html;  
    location = /50x.html {  
        root   /path/to/static/files/error_pages;  
    }  
}

在这个配置中,Nginx将监听80端口,为static.example.com域名提供Web服务。所有访问该域名的请求都将被映射到/path/to/static/files目录下的静态资源。如此就已经完成了Nginx作为静态资源服务器的配置了。

三:增强nginx作为文件服务的安全性

1.禁用目录列表:

默认情况下,如果用户访问一个没有默认首页的目录,Nginx会尝试显示该目录下的文件列表。为了防止这种行为,我们可以添加一个配置来返回403 Forbidden响应。如下增加autoindex off:

location / {  
    # ... 其他配置 ...  
  
    # 禁止目录列表  
    autoindex off;  
}

2. 限制访问方法:

对于静态资源服务器,通常只需要支持GET和HEAD方法。我们可以通过if指令来限制访问方法。如下:

location / {  
    # ... 其他配置 ...  
  
    # 只允许GET和HEAD方法  
    if ($request_method !~ ^(GET|HEAD)$ ) {  
        return 405;  
    }  
}

当然值得注意是:在Nginx中过度使用if可能会导致性能问题,但在这种情况下,由于我们仅对请求方法进行简单的检查,所以影响应该是可以接受的

3.隐藏服务器信息:

默认情况下,Nginx会在错误页面和HTTP响应头中显示其版本号和名称。这可能会给者提供额外的信息,用于针对特定版本的Nginx进行。我们可以通过修改或移除这些响应头来隐藏这些信息。如添加下面内容:

server_tokens off;  # 隐藏Nginx版本信息

4.设置合理的文件权限:

另一方面,我们也要确保Nginx进程运行的用户没有对其服务目录的写权限,以防止潜在的文件篡改风险。通常,静态资源文件应该设置为只读,并且由不同的用户拥有,而不是Nginx进程的用户。这部分内容需要修改用户或者文件的权限。

5.使用SSL/TLS加密连接:

虽然这不是直接防止目录读取的措施,但使用HTTPS来加密所有传输的数据是一个重要的安全策略。你可以配置Nginx来使用SSL/TLS证书,从而保护静态资源在传输过程中的安全