我有一个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中间件摘录部分)。
发布于 2018-06-25 01:48:51
我也有这个问题,我通过改变express上的路径来解决它,而不是响应app.get("/")
,我在nginx上传递了位置的名称,在你的例子中应该是app.get("/app")
。
https://stackoverflow.com/questions/48987371
复制相似问题