為什麼 Nginx 中使用 FastCGI 和 C 而不是 PHP?

為什麼 Nginx 中使用 FastCGI 和 C 而不是 PHP?

我想在每次 Nginx 收到 URL 請求時執行一個(編譯的)C 程式https://myserver.com/programs/my-C-file

更具體地說,當合併 GitHub 中的 PR 時,我想要一個鉤子來啟動用 C 編寫的自定義構建和發布過程(我想使用 C,因為構建過程很複雜。步驟很多,並且更容易解析 stdout使用C 語言而不是Bash 或PHP。

但是我有什麼理由應該使用 FastCGI 直接觸發 C 二進位檔案而不是 PHP 檔案嗎exec('my C program')

顯然,每隔幾天我就不會得到更多這樣的東西,所以我不擔心擴展,而且似乎 FastCGI 是很多額外的配置,而 PHP 我可以直接使用。只需建立一個 PHP 檔案運行exec()並在 Nginx 中建立一個區塊。

或者也許我對整個過程的思考是錯誤的,並且有一種更簡單的方法可以做到這一點。

答案1

是的,可以使用 nginx 和 FastCGI 來運行 C 二進位。以下是必要步驟的粗略概述:

  • 安裝nginx
  • 安裝spawn-fcgi
  • 安裝fastcgi資料庫(選用)
  • 使用偵聽您的 IP/網域的伺服器和將 FCGI 上游傳送到本機主機/連接埠的位置建立 nginx 虛擬主機設定。
  • 編譯你的C程式(你的程式應該包括while (FCGI_Accept() >= 0) { }
  • 啟動 spawn-fcgi 程序以偵聽 localhost/port 作為程式的包裝器。

更多內容請閱讀:

使用 NGINX 執行 C FastCGI 腳本

【介紹文章】Nginx + FastCGI程式(C/C++)Demo及部署搭建

答案2

兩種可能的解決方案:

  1. 使用Python的CGIHTTPServer。無需配置,只需將編譯好的程式放在一個目錄中並在父目錄中cgi-bin啟動即可。python -m CGIHTTPServer您可以在 path 上呼叫您的程式/cgi-bin/yourprogramname。這已經是一個正在運行的 HTTP 伺服器,如果您仍然希望 Nginx 位於它前面,請將其配置為簡單的反向代理(proxy_pass 應該足夠了)。

  2. 使用 Apache 的本機 CGI 支援。我將向您推薦阿帕奇的文檔對於配置,目錄結構相當於第一個選項。

您也可以透過不使用 C 而是使用 Go 等語言來減少移動部分的數量,因為您可以用 Go 編寫 HTTP 伺服器,大約 10 行,它可以呼叫一個函數來執行實際的建置過程。

相關內容