[英]502 Bad Gateway error for my server running with Node JS on nginx proxy
我收到 502 bad gateway 錯誤:當我檢查 nginx 錯誤日志時,我發現:
2017/05/06 02:36:04 [錯誤] 48176#0:*135 連接()失敗(111:連接被拒絕),同時連接到上游,客戶端:10.163.XX.X,服務器:abc-def-ghi,請求:“GET /favicon.ico HTTP/1.1”,上游:“ https://127.0.0.1:5300/favicon.ico ”,主機:“hostnname”,引用者:“hostname-1”
我在互聯網上搜索了足夠多但找不到任何東西。 這里要注意的一件事是,此間歇性錯誤僅出現在特定頁面上。
這可能是代碼問題嗎? 或 nginx 配置問題> 任何人都可以在這里幫助我。
我的一些 nginx 配置:
upstream node_api_server {
server localhost:5300 fail_timeout=0;
}
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_read_timeout 5m;
proxy_connect_timeout 5m;
proxy_pass_header Set-Cookie;
proxy_pass https://node_api_server;
proxy_redirect off;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
break;
}
502 錯誤通常是由 NGINX 無法將請求傳遞到“上游”引起的,在這種情況下是您的 Node.js 服務器(這也是錯誤消息所暗示的: “連接被拒絕” “)。
它可能會崩潰並重新啟動,因此請檢查其日志文件以查看導致崩潰的原因。
我對這些東西有點菜鳥,但我花了幾個小時試圖調試我的問題。 結果是我的 API 中端口的全局變量沒有被正確分配,所以節點沒有監聽正確的端口。 由於我很少使用這些東西,我寫下了我將來應該如何解決它,並想我會分享。 同樣,這是針對我的 API,所以您可能略有不同(我使用的是端口 3006)。
wget https://example.com/api/v1/ping
仔細檢查您是否收到錯誤,或者如果您通過 ssh 進入生產控制台,您可以執行wget 127.0.0.1:3006/api/v1/ping
npm run build
然后npm run start
在 pm2 中啟動節點后,確保 pm2 在pm2 status
正確運行pm2 logs
檢查 pm2 的錯誤pm2 logs
。 這應該顯示 API 中console.log
消息的正常輸出。 它是否說它在正確的端口上運行? 您可以讓您的 api 在啟動時記錄您的端口,以確認它在正確的端口上。 也檢查其他錯誤。 您可以使用pm2 flush
pm2 中的所有日志sudo netstat -plunt
將為您提供打開的端口列表以及正在使用它們的程序。sudo ps aux | grep node
獲取有關節點應用程序的更多信息。 sudo ps aux | grep node
讓所有 node 程序監聽端口,它會顯示 node 文件路徑的完整路徑。 您可以匹配上一個命令中的 PID 以確保您的端口匹配。sudo systemctl nginx status
或用 start 替換 status 以啟動它sudo vim /var/log/nginx/error.log
檢查 nginx 錯誤日志以確認您的端口和服務器名稱正確。 每次您向服務器發送命令時,它都會在此處記錄 502 錯誤並帶有錯誤消息: 2021/02/20 03:05:28 [error] 26646#26646: *644 connect() failed (111: Connection refused) while connecting to upstream, client: XXX.XXX.XXX.XX, server:example.com, request: "GET /api/v1/ping HTTP/1.1", upstream: "http://127.0.0.1:3006/api/v1/ping", host: "example.com"
sudo nginx -t
檢查 nginx 配置文件的狀態以確保配置中沒有任何錯誤/etc/nginx/nginx.config
的 Nginx 配置文件。 該文件可能包含sites-enabled/default
配置文件。 還要注意檢查sites-available/default
配置文件,以確保所有端口和服務器名稱都是正確的,並確保沒有重復項(很可能會出現在錯誤日志中)。sudo service nginx restart
nginx 系統希望對你們中的一些人有所幫助! :) 快樂編碼
由於路徑在 require 調用中沒有正確的大小寫,我們得到了 502,在這種情況下是文件名。 代碼在本地(在 VS Code 中)執行,但在部署時不執行。
const repoName = require('../data/reponame'); //這應該是repoName
就我而言,我收到了同樣的錯誤,但是當我檢查 ingress-nginx 的日志時。 我找到了這個
upstream sent too big header while reading response header from upstream,
client: xxx.xxx.xxx.xx, server: sample-site.domain, request:
為了克服這個問題,我只是增加了節點的--max-http-header-size
。 我能夠解決我的問題。
簡單的技巧:殺死您的 nginx 進程並重新啟動您的 UI
確保您正在運行npm start
或運行應用程序的腳本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.