哪个最有效:通过nginx或节点通过nginx反向代理直接提供静态文件?

Rém*_*ras 7 reverse-proxy nginx node.js express

我已经用它nginx作为reverse proxy我的node.jswebapps 服务3000<->80.实际上,我使用express.static中间件在节点应用程序中提供我的资产.

我再次阅读并阅读nginx提供静态文件非常有效.

问题是,什么是最好的?像我已经做的那样提供资产,或者直接配置nginx来提供静态文件?

或者几乎一样?

Aal*_*eks 12

最好的方法是使用nginx服务器为您提供静态文件,并让node.js服务器处理动态内容.

它通常是最优化的解决方案,可以减少node.js服务器上的请求数量,该服务器对服务器静态文件比nginx慢,例如:

如果您已经为nodejs app设置了反向代理,那么实现这一目标的配置非常简单.

nd nginx配置可能是

   root /home/myapp;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html;

    server_name _;

    location /public/ {
            alias /home/myapp/public/;
    }

    location / {
            proxy_pass http://IPADRESSOFNODEJSSERVER:8080;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
            # First attempt to serve request as file, then
            # as directory, then fall back to displaying a 404.
            #try_files $uri $uri/ =404;
    }
Run Code Online (Sandbox Code Playgroud)

每个使用/ public /在url的第一部分的请求都将由nginx处理,并且每个其他请求都将代理到您的nodejs app,IPADRESSOFNODEJSSERVER:NODEJSPORT通常IPADRESSOFNODEJSSERVER是localhost

快递的doc部分告诉http://expressjs.com/en/advanced/best-practice-performance.html#proxy

更好的选择是使用反向代理来提供静态文件; 有关详细信息,请参阅使用反向代理.

此外,nginx将允许您轻松定义缓存规则,因此对于不更改它的静态资产,也可以使用一行加速您的应用程序.

location /public/ {
            expires 10d;
            alias /home/myapp/public/;
        }
Run Code Online (Sandbox Code Playgroud)

你可以在网上找到很多比较这两种方法的文章,例如:http: //blog.modulus.io/supercharge-your-nodejs-applications-with-nginx