节点&快递+ nginx有多个位置

时间:2015-04-27 20:10:30

标签: node.js express nginx

我计划在一个子域下运行带有express的2个节点应用程序,nginx为静态文件提供服务。在我使用的两个节点应用程序中:

app.use(express.static(path.join(__dirname)));

我有以下nginx配置:

server {
    listen 80;
    server_name sub.domain.com;
    index index.html;

    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 / {
        proxy_pass http://localhost:232;
    }

    location ~ ^/(dist/|img/|app/|css/) {
        root /var/www/app/main/;
    }


    location /admin {
        proxy_pass http://localhost:233;
        rewrite ^/admin /$1 break;
    }

    location ~ ^/admin/(dist/|img/|app/|css/) {
        root /var/www/app/admin/;
        access_log off;
        expires max;
    }
}

使用此设置,一切都非常适合“主”应用(在sub.domain.com上访问),但对于'admin'应用(sub.domain.com/admin),相同的静态文件将用于'主'应用。我应该如何修改我的设置以实现正确的行为?

2 个答案:

答案 0 :(得分:0)

使用您的开发工具检查以确保尝试从正确的URL加载静态资产;也就是http://sub.domain.com/admin/css//admin/css/等。路径可能是根据项目根生成的,并显示为/css/,因此当浏览器尝试检索它们时,转到http://sub.domain.com/css/

答案 1 :(得分:0)

我认为配置中位置块的顺序可能是个问题。有关更多详细信息,请查看此link。尝试使用这个重构配置 -

    server {
        listen 80;
        server_name sub.domain.com;
        index index.html;

        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 ~ ^/admin/(dist/|img/|app/|css/) {
            root /var/www/app/admin/;
            access_log off;
            expires max;
        }

        location /admin {
            proxy_pass http://localhost:233;
            rewrite ^/admin /$1 break;
        }

        location ~ ^/(dist/|img/|app/|css/) {
            root /var/www/app/main/;
        }

        location / {
            proxy_pass http://localhost:232;
        }
    }