-1
A
回答
2
爲了向nginx提供已編譯的二進制文件,您需要運行另一個名爲FCGI的服務器,告訴它您希望服務的每個二進制文件的路徑,然後將nginx配置爲代理連接到該服務器。
示例配置:
http
{
server
{
listen 80;
server_name localhost;
location/
{
fastcgi_pass 127.0.0.1:8000;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
}
}
}
你告訴FCGI其二進制文件,希望成爲像這樣:
spawnfcgi -a 127.0.0.1 -p 8000 -f /path/to/binary
一旦請求被成功重定向到二進制文件,一個簡單的Hello World,可以這樣寫所以:
#include <stdio.h>
int main (int argc, char **argv)
{
printf ("Content-type: text/html\r\n\r\n");
printf ("<h1>Hello, world!</h1>");
return 0;
}
要分別處理GET和POST數據,您必須pa將它們分別從環境變量QUERY_STRING
和標準輸入中剔除。 POST數據的長度由CONTENT_LENGTH
環境變量給出。例如:
printf ("My GET data is: %s<br>", getenv ("QUERY_STRING"));
int len = atoi (getenv (CONTENT_LENGTH));
char *buf = malloc (len + 1);
read (0, buf, len);
buf[len] = 0;
printf ("My POST data is: %s<br>", buf);
在我看來,nginx並不是服務CGI的最佳選擇。看看lighttpd。
相關問題
- 1. C庫處理HTTP請求
- 2. 如何在nginx中處理「OPTIONS *」請求?
- 3. 處理HTTP請求
- 4. 在Golang中處理併發HTTP請求
- 5. Http Core在Android中處理請求
- 6. HTTP中介的請求處理模型
- 7. 處理不同類中的http請求
- 8. 如何在c#中處理沒有http頭的SOAP/XML請求?
- 9. C:處理HTTP請求和響應
- 10. 在Nginx中限制http請求
- 11. 如何處理HTTP請求
- 12. 處理http post請求
- 13. Netty處理HTTP請求
- 14. 處理原始HTTP請求
- 15. 安裝nginx中斷OpenCPU的HTTP請求
- 16. 在Jmeter中處理動態http請求而不是硬編碼http請求
- 17. 使用jetty和nginx處理HTTP HEAD請求
- 18. C#中的HTTP請求
- 19. 如何在nodejs中處理http請求中的表單數據
- 20. 在Node-Red中處理HTTP請求中的MQTT通信
- 21. HTTP代理:拒絕半處理請求
- 22. 處理異常的http請求 - angularjs
- 23. HTTP請求流在請求處理程序外不可讀
- 24. 如何在netty中處理大於1024字節的http請求?
- 25. 如何在Rails中處理錯誤的HTTP請求?
- 26. 處理在symfony中控制器的角$ http請求
- 27. 在Java/Spring中獲取完整的http請求處理堆棧
- 28. 在iOS中處理帶空體的重定向HTTP POST請求
- 29. 在純粹的http服務器中處理CGI請求
- 30. C#HTTP請求
非常感謝!你的評論是非常有用的! – Hernan