首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Express应用程序在更改NginX位置块时无法获取静态内容

Express应用程序在更改NginX位置块时无法获取静态内容
EN

Stack Overflow用户
提问于 2018-02-26 19:24:36
回答 1查看 1K关注 0票数 1

我有一个express.js AngularJs应用程序,它使用gulp来构建和服务不同的环境(即开发/升级/测试/生产),并使用NginX作为反向代理。

NodeJS应用程序

这个应用程序是按照John Papa的AngularJS风格指南编写的,其gulp配置深受this sample application of his的启发。

应用程序的essential部分的结构如下:

/build  (created on the fly, optimizes code)
/src (no optimiztion)
    /client
        /app
        /content
        /test
        index.html
    /server
        /data
        /routes
gulpfile.js

Express中间件摘录

// /src/server/app.js
switch (environment){
    case 'stage':
    case 'build':
        console.log('** BUILD **');
        console.log('serving from ' + './build/');           
        app.use('/', express.static('./build/'));
        break;
    default:
        console.log('** DEV **');
        console.log('serving from ' + './src/client/ and ./');
        app.use('/', express.static('./src/client/'));
        app.use('/', express.static('./'));
        break;  
}

app.listen(port, function() {
    console.log('Express server listening on port ' + port);
    console.log('env = ' + app.get('env') +
        '\n__dirname = ' + __dirname  +
        '\nprocess.cwd = ' + process.cwd());
});

反向代理

我正在使用NginX作为express服务器的反向代理,并且可以使用下面的配置在my_domain_name上访问它。

upstream my_nodejs_upstream {
    server 127.0.0.1:7203;
    keepalive 64;
}

server {
    listen 80;
    server_name my_domain_name;
    return 301 https://$server_name$request_uri;
}

server {

    # SSL configuration

    listen 443 ssl http2 default_server;
    listen [::]:443 ssl http2 default_server;
    include snippets/self-signed.conf;
    include snippets/ssl-params.conf;

location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_max_temp_file_size 0;
    proxy_pass http://my_nodejs_upstream/;
    proxy_redirect off;
    proxy_read_timeout 240s;
}

这是有效的,但我最终希望能够访问my_domain_name/app上的应用程序,所以我认为只需更改位置URI就可以完成此任务。

location /app/ {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_max_temp_file_size 0;
    proxy_pass http://my_nodejs_upstream/;
    proxy_redirect off;
    proxy_read_timeout 240s;
}

这是不起作用的,。我可以通过express服务器访问应用程序,也就是在my_domain_name:7203上,但尝试在my_domain_name/app上访问它时,所有静态内容都收到了404错误。看起来"/app/“部分没有被传递。例如,请求缩小的CSS仍然是在上完成的,而此时的文件位于。

我真的不确定如何从这里开始。

编辑1 (2018-03-01)

省略/,即如果我放入location /块,proxy_pass http://my_nodejs_upstream;仍然可以工作,但不能放在location /app块中。然而,这一次我遇到了一个不同的错误,因为我根本无法访问它:Cannot GET /app。我还用一些额外的信息更新了OP (即Express中间件摘录部分)。

EN

回答 1

Stack Overflow用户

发布于 2018-06-25 01:48:51

我也有这个问题,我通过改变express上的路径来解决它,而不是响应app.get("/"),我在nginx上传递了位置的名称,在你的例子中应该是app.get("/app")

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48987371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档