2016-07-11 72 views
1

這應該是我關於FastCGI和NGINX的最後一個問題(我已經問過太多了),但是我有一個關於在Web服務器上運行C FastCGI腳本的問題,特別是NGINX。所以現在這是我的nginx.conf文件看起來像:使用NGINX運行C FastCGI腳本

user nobody nobody; 

events { 
worker_connections 1024; 
}  

http { 
server { 
listen 80; 
server_name localhost; 

location/{ 
    root   /nginx/html; 
    index index.html index.htm new.html; 
     autoindex on; 
      fastcgi_pass 127.0.0.1:8000; 

} 

} 
} 

我有打印出的Hello World一個簡單的C FastCGI的腳本。我知道爲了運行這個腳本,我首先必須編譯會導致二進制文件的C腳本。然後我使用spawn-fcgi -p 8000 -n <binary>cgi-fcgi -start -connect localhost:8000 ./<binary>執行這個二進制。我已經成功做到這一點,並顯示正確的結果。但是,當我這樣做時,CGI腳本是唯一正在Web服務器上顯示的東西。我無法訪問任何.html頁面或任何其他頁面。即使我輸入了一個隨機的擴展名,該擴展名應該會導致404頁面未找到錯誤,但正在顯示CGI腳本。基本上我試圖讓index.html成爲主頁,然後當用戶點擊一個按鈕時,用戶被帶到一個顯示C CGI腳本的新頁面。

這可能嗎?如果是這樣,我該怎麼做?我花了數小時試圖在網上找到解決方案,但沒有成功。如果問題太模糊/不清楚或者您需要更多信息,請讓我知道!謝謝!

回答

3

我可以想到兩種可能性。您可以爲您的CGI程序分配一個URI並使用它來訪問它。或者你可以發送任何無效的URI到你的CGI程序。

在第一種情況下,你可以使用:

root /nginx/html; 
index index.html index.htm new.html; 

location/{ 
    try_files $uri $uri/ =404; 
} 
location /api { 
    fastcgi_pass 127.0.0.1:8000; 
} 

因此,任何URI年初/api將被髮送到CGI程序。除非未找到,否則其他URI將由nginx提供服務,在這種情況下,將返回404響應。


在第二種情況下,你可以使用:

root /nginx/html; 
index index.html index.htm new.html; 

location/{ 
    try_files $uri $uri/ @api; 
} 
location @api { 
    fastcgi_pass 127.0.0.1:8000; 
} 

所以不存在任何URI將被髮送到CGI程序。

請參閱this documenttry_files指令,this documentlocation指令。

+0

完美!應該更好地理解如何操作.conf文件,但你的答案有幫助! – trynacode