如何配置Nginx为Node.js提供静态文件服务?
通过利用Nginx提供静态文件,加快Node.js、Socket.io Web应用程序的加载时间
Node.js是一个出色的JavaScript运行环境,您可以使用它来提供整个Web资产(静态+动态)。
如果您正在进行一个小的实验性项目,那么可能还好,但是如果关注响应时间,那么您必须考虑使用像Nginx in front of Node.js这样的Web服务器来提供静态文件。
实际上,不仅要提供静态文件,还应该考虑使用Nginx进行security point of view。
最近,我正在使用Node.js、Socket.io开发的Geekflare Tools(网站SEO和安全分析器)上,通过将静态文件从Nginx卸载,我能够显著改善response time。
正如您所见,当我将静态文件移至29日的Nginx时,响应时间显著减少。
因此,如果您使用Node.js来传递图像、js、CSS、字体等,请考虑分离职责。
让我们看看我是如何做到这一点的。
假设您已经安装了Nginx和Node.js。在修改配置之前备份现有配置,以便在出现问题时可以回滚。
- 进入Nginx安装位置(在CentOS/Ubuntu等基于UNIX的操作系统上,默认位置为/etc/nginx)
- 进入sites-available
- 创建以下内容的新文件(为了方便理解,您可以将文件命名为您的域名)
upstream backend {
server localhost:3000;
}
server {
listen 80;
server_name siterelic.com;
root /var/tools/public;
location / {
try_files $uri @backend;
}
location @backend {
proxy_pass http://backend;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# Following is necessary for Websocket support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
上面有五个关键块,我逐一介绍一下。
- Upstream – 指定变量为“backend”,并给出node.js服务器和端口信息。在这个示例中,我给出了localhost:3000,这意味着我在与Nginx相同的服务器上使用3000端口运行node.js。
- Server – 给出Nginx应该监听的端口号和服务器名称。
- Root – 您要提供静态文件的目录。
- Location – 这很重要。我要求Nginx在指定的根目录中查找文件,如果不匹配,则转到@backend,即node.js。
- Location@backend – 这是通用的node.js+websocket.io代理配置。
通过创建符号链接来启用/etc/nginx/sites-enabled
中的站点
cd /etc/nginx/sites-enabled
ln -s /etc/nginx/sites-available/$yourdomainname .
重新启动Nginx,尽情享受吧!
通过以上配置,我能够显著提高响应时间,希望您也能做到。
如果您对Nginx还不熟悉,那么您可能有兴趣学习如何构建一个high-performance Nginx server from scratch。