/srv/http에서 서비스를 제공하는 Apache 2.4.46-3 서버가 있습니다. 2개의 파일이 있는 /srv/http/bin 폴더가 있습니다.
.htaccess(모드 644):
AddHandler cgi-script .exe
Options +ExecCGI
메인.exe(모드 755): main.cpp에서 컴파일:
#include <iostream>
using namespace std;
int main () {
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! This is my first CGI program</h2>\n";
cout << "</body>\n";
cout << "</html>\n";
return 0;
}
하지만 localhost/bin/main.exe 페이지를 방문하면 html을 표시하는 대신 exe를 다운로드하라는 메시지가 표시됩니다. 활성화하는 것을 잊었나요?
편집하다:
cgi-bin 디렉토리 문제 이것은 내 문제를 해결하지 못했습니다!
모든 인스턴스를 exe
다음 으로 바꿔도 cgi
문제가 해결되지 않았습니다!
첨가
<Directory "/srv/http/bin">
Options +ExecCGI
AddHandler cgi-script cgi pl exe
AllowOverride All
Require all granted
</Directory>
httpd.conf에서도 문제가 해결되지 않았습니다! cgis나 exes 또는 /srv/http/bin 폴더와 관련된 오류가 없는데 /var/log/httpd/error_log
여기서 무슨 일이 일어날 수 있습니까?
답변1
알고 보니 httpd.conf에 cgi 모듈이 로드되어 있지 않았습니다.
관련 구성은 다음과 같습니다(구성에서 "cgi_module" 검색).
<IfModule !mpm_prefork_module>
LoadModule cgid_module modules/mod_cgid.so
</IfModule>
<IfModule mpm_prefork_module>
LoadModule cgi_module modules/mod_cgi.so
</IfModule>