2015-09-06 81 views
3

当我从我的服务器ip:port浏览网站时,expressjs应用程序的静态文件完美工作,但是当应用程序从nginx提供服务时,静态文件会提供404。这是我的nginx的conf:代理nginx Express - 404静态文件

upstream project { 
    server localhost:6546; 
} 

server { 
    listen 80; 
    server_name example.com; 
    access_log /var/log/nginx/example.com_access.log; 
    error_log /var/log/nginx/example.com_error.log; 

    location/{ 
    proxy_pass http://project/; 
    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; 
    } 
    location ~* \.(css|js|gif|jpe?g|png)$ { 
    expires 168h; 

    } 

这里是我expressjs代码为静态:

app.enable('trust proxy'); 
app.use(favicon(__dirname + '/public/favicon.ico')); 
app.use(express.static(__dirname + '/public')); 
app.set('view engine', 'ejs'); 
if (app.get('env') === 'production') { 
    app.set('view cache', true); 
} 

回答

3

虽然express.js已经内置静态文件通过一些连接中间件处理,你不应该使用它。 Nginx可以更好地处理静态文件,并且可以防止请求非动态内容阻塞节点进程。这里是一个这样做的例子:

http { 
    ... 
    server { 
     ... 
     location ~ ^/(images/|img/|javascript/|js/|css/|stylesheets/|flash/|media/|static/|robots.txt|humans.txt|favicon.ico) { 
      root /home/ubuntu/expressapp/public; 
      access_log off; 
      expires max; 
     } 
     ... 
    } 
} 
+0

你能解释为什么我不应该使用它? –

+1

当然,简而言之,它将使用更多来自Node的资源,而不仅仅是来自Nginx的资源,所以在制作时考虑......这样更好地解决这个问题......你不觉得吗? – edsadr

+0

我想你是对的。无论如何,也许你可以帮助我:)我使用你的位置正则表达式,仍然获得静态文件404。我是否也必须在我的app.js中删除express.static模块?我将root设置为/ var/www/html/test/public,我的css文件位于/ stylesheets下。 谢谢! –