
A maioria dos servidores locais que rodamos para desenvolvimento de uma aplicação nada mais é do que um protótipo para aquilo que realmente irá funcionar.
No Curso de C++ Moderno Avançado nós mostramos como fazer isso no Mint que também serve para Ubuntu, Debian e sistemas relacionados, e como um pouco mais de esforço você consegue fazer isso no Windows se baseando na instalação do Apache que você pode entender e saber como funciona nesse artigo.
Você também pode seguir esse tutorial e substituir tudo que houver no tutorial de .sh por .cpp que, com certeza, irá funcionar tranquilamente.
No Gentoo é o mesmo processo só que com caminhos e ferramentas de adição diferente, vamos ver como fazer!
Antes de mais nada. lógico, você precisa do Apache instalado:
emerge apacheAtualmente, por padrão, o Apache no Gentoo já possui suporte para CGI, logo não precisa adicionar flags ao make.conf(~APACHE2_MODULES=”cgi”~). Então, só basta editar os seguintes arquivos:
Outra coisa que funciona também como padrão é a linha LoadModule cgi_module modules/mod_cgi.so no arquivo: /etc/apache2/httpd.conf, ou seja, não precisa fazer nada, mas é bom sempre dar aquela conferida pra ver se realmente está descomentada.
No entanto, abra o arquivo:
sudo vim /etc/apache2/modules.d/00_mod_mime.confE descomente a linha: AddHandler cgi-script. Vai estar assim:
#AddHandler cgi-script .cgiDeixe assim:
AddHandler cgi-script .cgiSe quiser que o Apache também rode URLs com extensão .cpp(por padrão ele só lê .html e pra quem tem o PHP instalado, lê também .php), adicione-o ao final da linha, assim:
AddHandler cgi-script .cgi .cppPode até adicionar mais extensões aí, caso seja do seu interesse, ex.:
.cc,.c,.hpp,.h, …
Abra o arquivo:
sudo vim /etc/conf.d/apache2Procure a linha que tem a variável APACHE2_OPTS e ela está mais ou menos assim:
APACHE2_OPTS="-D DEFAULT_VHOST -D INFO -D SSL -D SSL_DEFAULT_VHOST"Adicione o suporte para CGI inserindo um -D CGI ao final:
APACHE2_OPTS="-D DEFAULT_VHOST -D INFO -D SSL -D SSL_DEFAULT_VHOST -D CGI"Se quiser, adicione também o -D CPP ao final, igual se faz quando instala o PHP(-D PHP), deixando assim:
APACHE2_OPTS="-D DEFAULT_VHOST -D INFO -D SSL -D SSL_DEFAULT_VHOST -D CGI -D CPP"No caso do PHP isso é obrigatório, mas pra C++ essa parte é opcional!
Use o seu gerenciador de inicialização para restartar o Apache. No meu caso eu uso OpenRC:
sudo rc-service apache2 restartSe você usa SystemD use o comando correspondente para reiniciar o Apache!
Antes de mais nada é interessante permitir criar e ler arquivos em CGI, para isso atribua as seguintes permissões:
sudo chown -R $USER:$USER /var/www/localhostAgora crie o diretório cgi-bin:
Lembrando que o Gentoo separa o
localhost/htdocs, ou seja, os arquivos públicos ficam emhtdocse os arquivos backend ficam emlocalhost/cgi-bin.
Geralmente o próprio Apache cria esse diretório, se já houver, é recomendado também alterar o dono desse diretório pra você conseguir criar e editar arquivos sem precisar de usar sudo ou root, mas se não houver, crie o diretório:
cd /var/www/localhost
mkdir cgi-binSe já existir não esqueça de se tornar dono dele:
sudo chown -R $USER:$USER /var/www/localhost/cgi-bin.
Em sistemas baseados em APT(Debian, Ubuntu, Mint,…) esse diretório fica em /usr/lib/cgi-bin.
Agora vamos criar um arquivo dentro do diretório localhost/cgi-bin:
cd /var/www/localhost/cgi-bin
vim main.cppE use o seguinte código de exemplo:
Atenção para os dois
/n/nemContent-Type, eles são fundamentais para evitar o erro do Apache de interpretação de código:Internal Server Error.
#include <iostream>
int main(int argc, char **argv){
std::cout << "Content-Type: text/html\n\n";
std::cout << "<h1>C++ rodando de boa na Web!</h1>" << '\n';
return 0;
}Compile normalmente:
g++ main.cpp -o index.htmlSe tiver habilitando o
AddHandlerpara.cpptambém, pode salvar comoindex.cppou até mesmo sem extensão!
Agora é só acessar o entendeço: http://localhost/cgi-bin/ ou http://localhost/cgi-bin/index.cpp(se você habilitou e salvou como index.cpp)

Se quiser que o Apache interprete o index.cpp sem precisar indicar o arquivo na URL edite o arquivo: /etc/apache2/modules.d/00_default_settings.conf:
sudo vim /etc/apache2/modules.d/00_default_settings.confProcure a linha que tem o conteúdo:
<IfModule dir_module>
DirectoryIndex index.html index.html.var
</IfModule>E adicione o index.cpp logo após ao index.html.var deixando assim:
<IfModule dir_module>
DirectoryIndex index.html index.html.var index.cpp
</IfModule>E reinicie o servidor:
sudo rc-service apache2 restartÉ possível fazer absolutamente tudo: GET, POST, Autenticação, Sessões, Banco de Dados, Tokens, Cookies,… com C++ no Apache, aliás, muitos sites famosos que você acessa usa C++ na Web!
Para mais informações acesse o links:
web cpp apache desenvolvimentoweb