配置Nginx作为静态资源服务器及安全策略
上一篇文章写了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证书,从而保护静态资源在传输过程中的安全