2016-07-11 28 views
1

Dies sollte meine letzte Frage bezüglich FastCGI und NGINX sein (ich habe schon zu viele gefragt), aber ich hatte eine Frage bezüglich der Ausführung von C FastCGI-Skripten auf einem Webserver, speziell NGINX. So jetzt ist dies, wie meine nginx.conf Datei wie folgt aussieht:Ausführen eines C FastCGI-Skripts mit NGINX

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; 

} 

} 
} 

Ich habe einen einfachen C FastCGI-Skript, das Hallo Welt druckt. Ich weiß, dass ich, um dieses Skript auszuführen, zuerst das C-Skript kompilieren muss, was zu einer Binärdatei führen würde. Ich führe diese Binärdatei dann unter Verwendung von spawn-fcgi -p 8000 -n <binary> oder cgi-fcgi -start -connect localhost:8000 ./<binary> aus. Ich habe Erfolg damit gehabt und die richtigen Ergebnisse angezeigt. Wenn ich dies tue, wird jedoch nur das CGI-Skript auf dem Webserver angezeigt. Ich kann auf keine HTML-Seite oder irgendeine andere Seite gehen. Selbst wenn ich eine zufällige Erweiterung eintippe, die zu einem Fehler 404 Page not Found führen sollte, wird das CGI-Skript angezeigt. Im Grunde versuche ich, eine index.html als Startseite zu haben, und wenn der Benutzer dann auf eine Schaltfläche klickt, wird der Benutzer auf eine neue Seite geleitet, auf der das C CGI-Skript angezeigt wird.

Ist das möglich? Wenn ja, wie könnte ich es tun? Ich habe Stunden damit verbracht, online eine Lösung zu finden, hatte aber keinen Erfolg. Bitte lassen Sie mich wissen, wenn die Frage zu vage/unklar ist oder wenn Sie mehr Informationen benötigen! Vielen Dank!

Antwort

3

Es gibt zwei Möglichkeiten, die ich mir vorstellen kann. Sie können Ihrem CGI-Programm einen URI zuweisen und diesen für den Zugriff verwenden. Oder Sie können einen ungültigen URI an Ihr CGI-Programm senden.

Im ersten Fall könnten Sie verwenden:

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; 
} 

wird also jeder URI Anfang mit /api an das CGI-Programm gesendet. Andere URIs werden von nginx bedient, sofern sie nicht gefunden werden. In diesem Fall wird eine 404-Antwort zurückgegeben.


Im zweiten Fall könnten Sie verwenden:

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; 
} 

So eine URI, die nicht an das CGI-Programm gesendet wird, nicht vorhanden ist.

Siehe this document für die try_files Direktive und this document für die location Direktive.

+0

Perfekt! Hätte besser verstehen müssen, wie genau man die .conf-Datei manipuliert, aber deine Antwort hat geholfen! – trynacode