node.js - 运行 nginx 以提供文件并充当同一域上 Node 应用程序的反向代理
问题描述
我目前正在尝试将 Nginx 作为小型 Node 应用程序的反向代理运行,并为站点的核心提供文件。
例如
- / 网站根目录的静态服务文件
- /app/ 使用 Nginx 反向代理在端口 3000 上运行的节点应用程序
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html index.htm;
# Set path for access_logs
access_log /var/log/nginx/access.example.com.log combined;
# Set path for error logs
error_log /var/log/nginx/error.example.com.log notice;
# If set to on, Nginx will issue log messages for every operation
# performed by the rewrite engine at the notice error level
# Default value off
rewrite_log on;
# Settings for main website
location / {
try_files $uri $uri/ =404;
}
# Settings for Node app service
location /app/ {
# Header settings for application behind proxy
proxy_set_header Host $host;
# proxy_set_header X-NginX-Proxy true;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# Proxy pass settings
proxy_pass http://127.0.0.1:3000/;
# Proxy redirect settings
proxy_redirect off;
# HTTP version settings
proxy_http_version 1.1;
# Response buffering from proxied server default 1024m
proxy_max_temp_file_size 0;
# Proxy cache bypass define conditions under the response will not be taken from cache
proxy_cache_bypass $http_upgrade;
}
}
乍一看这似乎可行,但随着时间的推移,我发现我在 Node 应用程序路由上不断收到 502 错误。这既适用于应用程序本身,也适用于应用程序中包含的静态资产。
我尝试过使用上述配置的各种不同变体,但我找不到任何东西似乎可以解决这个问题。我读过 SELinux 的问题,但目前不在有问题的服务器上。
一些额外的信息;服务器:Ubuntu 18.04.3 Nginx:nginx/1.17.5
2020/02/09 18:18:07 [error] 8611#8611: *44 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: x, server: example.com, request: "GET /app/assets/images/image.png HTTP/1.1", upstream: "http://127.0.0.1:3000/assets/images/image.png", host: "example.com", referrer: "http://example.com/overlay/"
2020/02/09 18:18:08 [error] 8611#8611: *46 connect() failed (111: Connection refused) while connecting to upstream, client: x, server: example.com, request: "GET /app/ HTTP/1.1", upstream: "http://127.0.0.1:3000/", host: "example.com"
有没有人遇到过类似的问题,或者知道我做错了什么?
提前致谢!
解决方案
这可能是因为您的节点路由器。最好也共享节点代码。无论如何尝试把你的主路由器和静态路由app.use('/app', mainRouter);
,看看它有什么意义?
推荐阅读
- ios - 在生产中接收应用内购买的 SKErrorDomain
- python - 做一个递增的数组,同时修改数组
- css - 带有与父元素边框匹配的边框的标题背景
- vb.net - List(OF T).Contains 问题(通过类的字符串或整数道具搜索)
- python - Pyspark上两点之间的欧几里得距离
- python - 如何运行 paramiko demo_server.py?
- makefile - 当存在无意的循环依赖时停止 Makefile
- python - 有没有办法绘制一个函数,它是 python 中具有 2 个变量的函数的部分导数?
- java - 如果java是传值,那为什么p1.age是25而不是22呢?请提供解释
- javascript - 如何修复从它生成的数组中翻转的 tilemap?