静态内容nodejs app反向代理的NgInx禁止错误

时间:2017-08-31 08:02:18

标签: node.js nginx amazon-ec2 https proxy

我在使用HTTPS的expressjs网站上使用NgInx反向代理。使用https访问网站没有任何问题,并且请求在Nodejs服务器上获得,但问题在于静态内容。

所有静态内容(JS,CSS,图片,字体等)都在抛出 403禁止错误

以下是我的ngInx配置文件内容:

server {
    listen  80;
    listen 443 ssl;
    ssl on;
    ssl_certificate /home/ec2-user/certs/myapp.bundle.crt; 
    ssl_certificate_key /home/ec2-user/certs/myapp.key;

    root /home/ec2-user/myapp;

    server_name example.com;
    access_log /var/log/nginx/nginx.vhost.access.log;
    error_log /var/log/nginx/nginx.vhost.error.log;

    location / {
       #try_files $uri $uri/ /index.php?$args ;
       #try_files $uri $uri/ =404;
        proxy_pass https://example.com:3000;
        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;
    }
}

我正在使用亚马逊EC2和CentOS。 请帮忙。提前谢谢。

2 个答案:

答案 0 :(得分:0)

location / {
        proxy_pass https://example.com:3000;
        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;
    }

您正在将所有流量重定向到nodejs。这意味着expressjs将提供静态内容。

要提供静态文件,请使用Express中的express.static内置中间件功能。

将包含静态资产的目录名称传递给express.static中间件函数,以便直接开始提供文件。例如,使用以下代码在名为public的目录中提供静态文件:

app.use(express.static('public'))

此处有更多信息:https://expressjs.com/en/starter/static-files.html

答案 1 :(得分:0)

您正在尝试从NodeJS应用程序中为静态文件提供服务,因为您使用的是Nginx,这是非正确的方法。在您的配置中添加以下类型的块

location ~ \.(css|gif|png|jpe?g|ico|js|swf|ttf|woff) {
    expires 30d;
    root /home/ec2-user/myapp;
    try_files $uri =404;
}

您可能需要根据资产使用方式调整根文件夹。但如果您使用它与/home/ec2-user/myapp相同,那么您可以跳过添加此行