我在/etc/nginx/conf.d中创建的名为“ helloworld.local.conf”的配置文件中的下面几行。
server{
listen 80 default_server;
server_name hello_world;
location / {
root /var/www/helloworld;
fastcgi_pass 127.0.0.1:9000;
}
}
/ var / www / helloworld中有一个index.html文件,其中显示文本“网站即将推出”。
我的c ++代码如下所示:
#include <iostream>
#include "fcgio.h"
using namespace std;
int main(void) {
cout<<"Content-type:text/html\r\n\r\n";
cout<<"<html>\n";
cout<<"<head>\n";
cout<<"<title>Hello World- First CGI Program</title>\n";
cout<<"</head>\n";
cout<<"<body>\n";
cout<<"<h2> hello world</h2>\n";
cout<<"</body>\n";
cout<<"</html>\n";
return 0;
}
我有使用以下命令生成的c ++二进制代码文件
g++ abc.cpp -lfcgi++ -lfcgi -o hello_world
需要部署在NGINX服务器上。我搜索并尝试了不同的方法来在stackoverflow上运行此脚本,但仍然缺少某些内容。
我还运行了以下命令,将c ++二进制代码文件连接到服务器
cgi-fcgi -start -connect 127.0.0.1:9000 ./hello_world
现在,当我在浏览器中访问地址127.0.0.1:9000时,没有得到c ++代码中的“ hello world”文本。
输出:我想从c ++二进制代码获得“ hello world”的响应,并将其显示在html页面上。
我想念的是什么,请帮忙。
更新:这是我的配置文件。
server{
server_name hello;
location / {
fastcgi_index index.cgi;
root /var/www/helloworld;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_name;
include fastcgi_params;
}
}
答案 0 :(得分:0)
更新
看看这个blog post。它详细解释了如何设置C ++ / FCGI / nginx。
原始答案
您的C ++代码应该是一个侦听器(在运行时,它应该侦听端口并根据传入的请求返回响应)。 这部分与nginx没有任何关系。因此,首先要确保您的代码正常运行;运行您的代码,然后尝试访问指定的端口,看看是否获得预期的响应。
然后,您需要在nginx配置中设置一个proxy
,该配置基本上会将您想要的所有流量重定向到C ++端口(例如9000
)。例如,您可以进行设置,以使任何https://your_domain.com/api/*
形式的url都重定向到您的C ++。
这在nginx中非常简单:
location /api/ {
proxy_pass http://127.0.0.1:9000/;
}
但是首先要单独测试您的C ++,并确保它能正常工作
此外,您最好使用runit
,systemd
之类的工具或类似工具来保持C ++侦听器运行(如果崩溃,请重新启动它)。
答案 1 :(得分:0)
除非您通过某种形式调用您的CGI脚本(在这种情况下为可执行文件),否则我认为在创建索引时会更简单且不会失去一般性。正如您目前所拥有的那样,您什么都没看到这一事实不足为奇。请记住,CGI模块没有向第一个html文件添加任何内容。您必须在第一行声明内容类型,因为它是要显示的html文件。
尽管如此,我还是将编译内容更改为此:
g++ abc.cpp -lfcgi++ -lfcgi -o index.cgi
现在,请确保您的配置文件中包含以下内容。我通常使用Apache,但是如果我没记错的话,您的文件夹配置应如下所示,并且应该会很好。
location / {
root /var/www/helloworld;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.cgi
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name
include fastcgi_params
}
在文档中,fastcgi_param
参数通常如下所示:
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name
由于您以为您的可执行文件将被称为index.cgi
并且位于当前目录中,因此我从示例中省略了scripts文件夹,但是请记住,该示例是非常虚构的,并且仅是有价值的以获得最小的CGI系统运行。