自建 Web 頁面調用自編譯的 .cgi 程序(C 語言編譯生成),每次跳轉 CGI 均報錯 502 Bad Gateway,提示「CGI 不兼容」。
502 屬於服務端錯誤,Web 服務器(Nginx/Apache/Lighttpd 等)作為網關/代理,無法從上游(CGI 進程/FastCGI 進程)獲得合法響應。提示「CGI 不兼容」通常意味著:
glibc、libstdc++、數據庫客戶端庫等,服務器環境中缺失或版本不兼容。Content-Type: text/html\r\n\r\n 等 HTTP 頭,或輸出到 stderr 導致服務器判定失敗。shebang 指向的解釋器不存在(若為腳本)。/var/log/nginx/error.log、/var/log/apache2/error.log),搜索 502、cgi、exec 關鍵字,通常有具體失敗原因(如 execve() failed: Exec format error)。file your.cgi → 輸出應包含 ELF 64-bit LSB executable, x86-64(匹配服務器架構)。ldd your.cgi → 確保所有 => 指向的庫文件存在,無 not found。su -s /bin/bash www-data,執行 ./your.cgi,觀察是否正常輸出 HTML 及 HTTP 頭。若報 Exec format error 或 library not found,即定位到架構/依賴問題。printf("Content-Type: text/html\r\n\r\n");printf("<html>...</html>");Options +ExecCGI, AddHandler cgi-script .cgi, ScriptAlias 目錄正確。fcgiwrap 或 spawn-fcgi 運行 CGI,檢查 fastcgi_pass 指向的 socket 正常。gcc -o your.cgi your.c -static(靜態鏈接消除依賴)或在目標服務器環境下編譯。apt-get install libc6-dev 等。chmod 755 your.cgi,目錄可遍歷。Content-Type 頭正確且以 \r\n\r\n 結束。502 錯誤**一定是服務端配置或 CGI 程序運行環境問題**,而非前端頁面代碼。憑藉日誌與命令行測試,可快速定位至架構不匹配、缺庫、輸出格式或權限四大類根因。