这应该是关于FastCGI和NGINX的最后一个问题(我已经问过太多了),但我有一个关于在Web服务器上运行C FastCGI脚本的问题,特别是NGINX。所以现在这就是我的nginx.conf文件的样子:
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;
}
}
}
我有一个简单的C FastCGI脚本打印出Hello World。我知道为了运行这个脚本,我首先必须编译导致二进制文件的C脚本。然后,我使用spawn-fcgi -p 8000 -n <binary>
或cgi-fcgi -start -connect localhost:8000 ./<binary>
执行此二进制文件。我已经成功地做到了并显示了正确的结果。但是,当我这样做时,CGI脚本是Web服务器上唯一显示的内容。我无法访问任何.html页面或任何其他页面。即使我输入一个随机扩展名,导致404 Page not Found错误,也会显示CGI脚本。基本上我正在尝试将index.html作为主页,然后当用户单击按钮时,用户将进入显示C CGI脚本的新页面。
这可能吗?如果是的话,我怎么能这样做?我花了几个小时试图在线找到解决方案,但没有成功。如果问题太模糊/不清楚或者您需要更多信息,请告诉我们!谢谢!
答案 0 :(得分:3)
我能想到两种可能性。您可以为CGI程序分配URI并使用它来访问它。或者您可以向CGI程序发送任何无效的URI。
在第一种情况下,您可以使用:
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;
}
因此,任何以/api
开头的URI都将被发送到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程序。
try_files
指令见this document,location
指令见this document。