Apache 不执行.fcg 文件
Apache does not execute .fcg file
我用fastcgipp做了一个最基本的fastcgi程序。我把它复制到/var/www/cgi-bin
。然后我去了/etc/httpd/conf/httpd.conf
.
我替换了:
<Directory "/var/www/cgi-bin">
AllowOverride None
Options None
Require all granted
</Directory>
有了这个:
<Directory "/var/www/cgi-bin">
AllowOverride None
Options +ExecCGI
Require all granted
SetHandler fastcgi-script
</Directory>
但是当我转到localhost/cgi-bin/index.fcg
时,浏览器提示我下载fcg文件而不是执行它。
我正在使用 Fedora 29。
编辑: 这是 httpd.conf
ServerRoot "/etc/httpd"
Listen 127.0.0.1:80
Include conf.modules.d/*.conf
User apache
Group apache
ServerAdmin root@localhost
<Directory />
AllowOverride none
Require all denied
</Directory>
DocumentRoot "/var/www/html"
<Directory "/var/www">
AllowOverride None
# Allow open access:
Require all granted
</Directory>
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
<Files ".ht*">
Require all denied
</Files>
ErrorLog "logs/error_log"
LogLevel warn
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
# You need to enable mod_logio.c to use %I and %O
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
CustomLog "logs/access_log" combined
</IfModule>
<IfModule alias_module>
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
</IfModule>
#
<Directory "/var/www/cgi-bin">
#AllowOverride None
Options +ExecCGI
#Require all granted
Order allow,deny
Allow from all
SetHandler fcgid-script
</Directory>
<IfModule mime_module>
TypesConfig /etc/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
</IfModule>
AddDefaultCharset UTF-8
<IfModule mime_magic_module>
MIMEMagicFile conf/magic
</IfModule>
EnableSendfile on
IncludeOptional conf.d/*.conf
编辑: 我以某种方式让 apache 执行脚本。但是现在,服务器给我一个 500 内部错误。所以,我检查了 error_log 文件。它说:
End of script output before headers
我检查了我的代码。我已经输出了header。这是 main.cpp 文件:
#include <fstream>
#include <boost/date_time/posix_time/posix_time.hpp>
void error_log(const char* msg) {
static std::ofstream error;
if(!error.is_open()){
error.open("/tmp/errlog", std::ios_base::out | std::ios_base::app);
}
error << "[" << boost::posix_time::second_clock::local_time() << "]: " << msg << "\n";
}
#include <fastcgi++/request.hpp>
#include <fastcgi++/manager.hpp>
class HelloWorld : public Fastcgipp::Request<char> {
bool response() {
out << "Content:Type: text/html\r\n\r\n";
out << "<html><head><meta charset=\"utf-8\"></head><body>";
out << "<p>It works!!!!</p>";
out << "</body></html>";
err << "Hi log!";
return true;
}
};
int main() {
Fastcgipp::Manager<HelloWorld> manager;
manager.setupSignals();
manager.listen();
manager.start();
manager.join();
return 0;
}
1) 在 httpd.conf
中的 <Directory "/var/www/cgi-bin">
标签中添加了 SetHandler fcgid-script
2) 我在 header 中打错了字。将 Content:Type:text/html
替换为 Content-Type:text/html
我用fastcgipp做了一个最基本的fastcgi程序。我把它复制到/var/www/cgi-bin
。然后我去了/etc/httpd/conf/httpd.conf
.
我替换了:
<Directory "/var/www/cgi-bin">
AllowOverride None
Options None
Require all granted
</Directory>
有了这个:
<Directory "/var/www/cgi-bin">
AllowOverride None
Options +ExecCGI
Require all granted
SetHandler fastcgi-script
</Directory>
但是当我转到localhost/cgi-bin/index.fcg
时,浏览器提示我下载fcg文件而不是执行它。
我正在使用 Fedora 29。
编辑: 这是 httpd.conf
ServerRoot "/etc/httpd"
Listen 127.0.0.1:80
Include conf.modules.d/*.conf
User apache
Group apache
ServerAdmin root@localhost
<Directory />
AllowOverride none
Require all denied
</Directory>
DocumentRoot "/var/www/html"
<Directory "/var/www">
AllowOverride None
# Allow open access:
Require all granted
</Directory>
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
<Files ".ht*">
Require all denied
</Files>
ErrorLog "logs/error_log"
LogLevel warn
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
# You need to enable mod_logio.c to use %I and %O
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
CustomLog "logs/access_log" combined
</IfModule>
<IfModule alias_module>
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
</IfModule>
#
<Directory "/var/www/cgi-bin">
#AllowOverride None
Options +ExecCGI
#Require all granted
Order allow,deny
Allow from all
SetHandler fcgid-script
</Directory>
<IfModule mime_module>
TypesConfig /etc/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
</IfModule>
AddDefaultCharset UTF-8
<IfModule mime_magic_module>
MIMEMagicFile conf/magic
</IfModule>
EnableSendfile on
IncludeOptional conf.d/*.conf
编辑: 我以某种方式让 apache 执行脚本。但是现在,服务器给我一个 500 内部错误。所以,我检查了 error_log 文件。它说:
End of script output before headers
我检查了我的代码。我已经输出了header。这是 main.cpp 文件:
#include <fstream>
#include <boost/date_time/posix_time/posix_time.hpp>
void error_log(const char* msg) {
static std::ofstream error;
if(!error.is_open()){
error.open("/tmp/errlog", std::ios_base::out | std::ios_base::app);
}
error << "[" << boost::posix_time::second_clock::local_time() << "]: " << msg << "\n";
}
#include <fastcgi++/request.hpp>
#include <fastcgi++/manager.hpp>
class HelloWorld : public Fastcgipp::Request<char> {
bool response() {
out << "Content:Type: text/html\r\n\r\n";
out << "<html><head><meta charset=\"utf-8\"></head><body>";
out << "<p>It works!!!!</p>";
out << "</body></html>";
err << "Hi log!";
return true;
}
};
int main() {
Fastcgipp::Manager<HelloWorld> manager;
manager.setupSignals();
manager.listen();
manager.start();
manager.join();
return 0;
}
1) 在 httpd.conf
中的<Directory "/var/www/cgi-bin">
标签中添加了 SetHandler fcgid-script
2) 我在 header 中打错了字。将 Content:Type:text/html
替换为 Content-Type:text/html