Apache Mime Type Binary Options


Tutorial do Apache: Conteúdo dinâmico com CGI O CGI (Common Gateway Interface) define uma maneira de um servidor web interagir com programas externos de geração de conteúdo, que são freqüentemente referidos como programas CGI ou scripts CGI. É a maneira mais simples e mais comum de colocar conteúdo dinâmico em seu site. Este documento será uma introdução à criação de CGI no seu servidor web Apache e começar a escrever programas CGI. Para que seus programas CGI funcionem corretamente, você precisa ter o Apache configurado para permitir a execução de CGI. Existem várias maneiras de fazer isso. Nota: Se o Apache foi construído com suporte de módulo compartilhado, você precisa se certificar de que o módulo está carregado no seu httpd. conf, você precisa se certificar de que a diretiva LoadModule não foi comentada. Uma diretiva configurada corretamente pode ter esta aparência: No Windows, ou usando um MPM não threadado como prefork, uma diretiva configurada corretamente pode se parecer com a seguinte: A diretiva ScriptAlias ​​diz ao Apache que um diretório específico é reservado para programas CGI. O Apache assumirá que cada arquivo neste diretório é um programa CGI, e tentará executá-lo, quando esse recurso específico for solicitado por um cliente. A diretiva ScriptAlias ​​se parece com: ScriptAlias ​​/ cgi-bin / / usr / local / apache2 / cgi-bin / O exemplo mostrado é do seu arquivo de configuração padrão httpd. conf, se você instalou o Apache no local padrão. A diretiva ScriptAlias ​​é muito parecida com a diretiva Alias, que define um prefixo de URL que é mapeado para um diretório específico. Alias ​​e ScriptAlias ​​normalmente são usados ​​para diretórios que estão fora do diretório DocumentRoot. A diferença entre Alias ​​e ScriptAlias ​​é que ScriptAlias ​​tem o significado acrescentado que tudo sob esse prefixo de URL será considerado um programa CGI. Assim, o exemplo acima diz ao Apache que qualquer solicitação para um recurso começando com / cgi-bin / deve ser servida a partir do diretório / usr / local / apache2 / cgi-bin /. E deve ser tratado como um programa CGI. Por exemplo, se a URL www. example / cgi-bin / test. pl for solicitada, o Apache tentará executar o arquivo /usr/local/apache2/cgi-bin/test. pl e retornará a saída. É claro que o arquivo terá de existir, ser executável e retornar saída de uma maneira específica, ou o Apache retornará uma mensagem de erro. Os programas CGI são freqüentemente restritos a diretórios ScriptAlias ​​ed por razões de segurança. Desta forma, os administradores podem controlar rigorosamente quem está autorizado a usar os programas CGI. No entanto, se as precauções de segurança adequadas são tomadas, não há nenhuma razão para programas CGI não pode ser executado a partir de diretórios arbitrários. Por exemplo, você pode desejar que os usuários tenham conteúdo da Web em seus diretórios base com a diretiva UserDir. Se eles querem ter seus próprios programas CGI, mas não têm acesso ao diretório cgi-bin principal, eles precisam ser capazes de executar programas CGI em outro lugar. Existem duas etapas para permitir a execução CGI em um diretório arbitrário. Primeiro, o manipulador cgi-script deve ser ativado usando a diretiva AddHandler ou SetHandler. Em segundo lugar, ExecCGI deve ser especificado na diretiva Opções. Você pode usar explicitamente a diretiva Options, dentro do arquivo de configuração do servidor principal, para especificar que a execução CGI foi permitida em um determinado diretório: ltDirectory / usr / local / apache2 / htdocs / somedirgt Opções ExecCGI lt / Directorygt A diretiva acima diz ao Apache para permitir A execução de arquivos CGI. Você também precisará informar ao servidor quais arquivos são arquivos CGI. A seguinte diretiva AddHandler diz ao servidor para tratar todos os arquivos com a extensão cgi ou pl como programas CGI: AddHandler cgi-script. cgi. pl O tutorial. htaccess mostra como ativar programas CGI se você não tiver acesso ao httpd. conf. Para permitir a execução do programa CGI para qualquer arquivo que termina em. cgi nos diretórios de usuários, você pode usar a seguinte configuração. LtDirectory / home // publichtmlgt Opções ExecCGI AddHandler cgi-script. cgi lt / Directorygt Se você desejar designar um subdiretório cgi-bin de um diretório de usuários onde tudo será tratado como um programa CGI, você pode usar o seguinte. LtDirectory / home // publichtml / cgi-bingt Opções ExecCGI SetHandler cgi-script lt / Directorygt Existem duas principais diferenças entre programação regular e programação CGI. Primeiro, toda a saída do seu programa CGI deve ser precedida por um cabeçalho de tipo MIME. Este é o cabeçalho HTTP que informa ao cliente o tipo de conteúdo que está recebendo. Na maioria das vezes, isso será parecido com: Em segundo lugar, sua saída precisa ser em HTML, ou algum outro formato que um navegador será capaz de exibir. Na maioria das vezes, isso será HTML, mas ocasionalmente você pode escrever um programa CGI que gera uma imagem gif, ou outro conteúdo não-HTML. Além dessas duas coisas, escrever um programa CGI será muito parecido com qualquer outro programa que você pode escrever. O seguinte é um exemplo de programa CGI que imprime uma linha para o seu navegador. Digite o seguinte, salve-o em um arquivo chamado first. pl. E colocá-lo em seu diretório cgi-bin. / Usr / bin / perl print Tipo de conteúdo: text / htmlnn print Olá, Mundo. Mesmo se você não estiver familiarizado com Perl, você deve ser capaz de ver o que está acontecendo aqui. A primeira linha diz ao Apache (ou qualquer shell que você esteja executando) que este programa pode ser executado alimentando o arquivo para o interpretador encontrado no local / usr / bin / perl. A segunda linha imprime a declaração de tipo de conteúdo de que falamos, seguida por dois pares de linha de retorno de retorno de carro. Isso coloca uma linha em branco após o cabeçalho, para indicar o final dos cabeçalhos HTTP eo início do corpo. A terceira linha imprime a corda Hello, World .. E isso é o fim dela. Se você abrir o seu navegador favorito e dizer-lhe para obter o endereço ou onde quer que você colocar seu arquivo, você verá a uma linha Hello, World. Aparecem na janela do navegador. Não é muito emocionante, mas uma vez que você começa que o trabalho, você terá uma boa chance de obter apenas sobre qualquer coisa de trabalho. Há quatro coisas básicas que você pode ver em seu navegador quando você tenta acessar seu programa CGI da web: A saída do seu programa CGI Grande Isso significa que tudo funcionou bem. Se a saída estiver correta, mas o navegador não estiver processando corretamente, verifique se você tem o tipo de conteúdo correto definido em seu programa CGI. O código-fonte do seu programa CGI ou uma mensagem POST Method Not Allowed Isso significa que você não configurou corretamente o Apache para processar seu programa CGI. Releia a seção sobre como configurar o Apache e tente encontrar o que você perdeu. Uma mensagem começando com Forbidden Isso significa que há um problema de permissões. Verifique o log de erro do Apache ea seção abaixo nas permissões de arquivo. Uma mensagem dizendo Erro interno do servidor Se você verificar o log de erro do Apache. Você provavelmente encontrará que ele diz final prematura de cabeçalhos de script, possivelmente junto com uma mensagem de erro gerada por seu programa CGI. Neste caso, você vai querer verificar cada uma das seções abaixo para ver o que pode estar impedindo seu programa CGI de emitir os cabeçalhos HTTP adequados. Lembre-se de que o servidor não é executado como você. Ou seja, quando o servidor é iniciado, ele está sendo executado com as permissões de um usuário não privilegiado - normalmente ninguém. Ou www - e assim ele vai precisar de permissões extras para executar arquivos que são de sua propriedade. Geralmente, a maneira de dar a um arquivo permissões suficientes para serem executadas por ninguém é dar a todos permissão de execução no arquivo: chmod ax first. pl Além disso, se o seu programa lê ou escreve em qualquer outro arquivo, esses arquivos precisarão Para ter as permissões corretas para permitir isso. Quando você executa um programa de sua linha de comando, você tem certas informações que são passadas para o shell sem você pensar sobre ele. Por exemplo, você tem um PATH. Que informa ao shell onde ele pode procurar arquivos que você faz referência. Quando um programa é executado através do servidor web como um programa CGI, pode não ter o mesmo caminho. Qualquer programa que você invocar em seu programa CGI (como sendmail, por exemplo) precisará ser especificado por um caminho completo, para que o shell pode encontrá-los quando ele tenta executar seu programa CGI. Uma manifestação comum disso é o caminho para o interpretador de script (freqüentemente perl) indicado na primeira linha do seu programa CGI, que será algo como: Certifique-se de que este é de fato o caminho para o interpretador. Ao editar scripts CGI no Windows, os caracteres de fim de linha podem ser anexados ao caminho do interpretador. Certifique-se de que os arquivos sejam transferidos para o servidor no modo ASCII. Falha ao fazê-lo pode resultar em avisos de comando não encontrado do sistema operacional, devido ao caractere de fim de linha não reconhecido sendo interpretado como uma parte do nome de arquivo do interpretador. Se o seu programa CGI depende de variáveis ​​de ambiente não-padrão. Você precisará garantir que essas variáveis ​​são passadas pelo Apache. Quando você perder cabeçalhos HTTP do ambiente, certifique-se que eles são formatados de acordo com RFC 2616. seção 4.2: cabeçalho nomes devem começar com uma letra, seguido apenas por letras, números ou hífen. Qualquer cabeçalho que viole esta regra será ignorado silenciosamente. Na maioria das vezes, quando um programa CGI falha, é devido a um problema com o próprio programa. Isto é particularmente verdadeiro quando você começa o cair deste material de CGI, e já não faz os dois erros acima. A primeira coisa a fazer é certificar-se de que seu programa é executado a partir da linha de comando antes de testá-lo através do servidor web. Por exemplo, tente: cd / usr / local / apache2 / cgi-bin ./first. pl (Não chame o interpretador perl. O shell e o Apache devem encontrar o interpretador usando as informações do caminho na primeira linha do script.) A primeira coisa que você vê escrito por seu programa deve ser um conjunto de cabeçalhos HTTP, incluindo o Content-Type. Seguido por uma linha em branco. Se você vir mais alguma coisa, o Apache retornará o erro Premature end of script headers se você tentar executá-lo através do servidor. Consulte Escrever um programa CGI acima para obter mais detalhes. Os logs de erro são seu amigo. Qualquer coisa que der errado gera mensagem no log de erro. Você deve sempre olhar lá primeiro. Se o local onde você está hospedando seu site não permite o acesso ao log de erros, você deve provavelmente hospedar seu site em outro lugar. Aprenda a ler os logs de erros e descobrirá que quase todos os seus problemas são rapidamente identificados e rapidamente resolvidos. O programa de suporte suexec permite que programas CGI sejam executados sob diferentes permissões de usuário, dependendo de qual host virtual ou diretório pessoal do usuário eles estão localizados. A Suexec tem uma verificação de permissão muito estrita, e qualquer falha nessa verificação resultará em seus programas CGI falhando com Extremidade prematura de cabeçalhos de script. Para verificar se você está usando o suexec, execute apachectl - V e verifique a localização de SUEXECBIN. Se o Apache encontrar um binário suexec na inicialização, o suexec será ativado. A menos que você compreenda completamente suexec, você não deve usá-lo. Para desativar o suexec, basta remover (ou renomear) o binário suexec apontado pelo SUEXECBIN e reiniciar o servidor. Se, depois de ler sobre suexec. Você ainda deseja usá-lo, em seguida, execute suexec - V para localizar o local do arquivo de log do suexec e use esse arquivo de log para descobrir qual política você está violando. À medida que você se torna mais avançado na programação CGI, será útil entender mais sobre o que está acontecendo nos bastidores. Especificamente, como o navegador eo servidor se comunicam entre si. Porque, embora todos os seus muito bem para escrever um programa que imprime Hello, World., Não é particularmente útil. Variáveis ​​de ambiente são valores que flutuam ao seu redor conforme você usa seu computador. São coisas úteis, como seu caminho (onde o computador procura o arquivo real implementando um comando quando você digita), seu nome de usuário, seu tipo de terminal e assim por diante. Para obter uma lista completa de suas variáveis ​​de ambiente normais, diárias, digite env em um prompt de comando. Durante a transação CGI, o servidor e o navegador também definem variáveis ​​de ambiente, para que eles possam se comunicar uns com os outros. Essas são coisas como o tipo de navegador (Netscape, IE, Lynx), o tipo de servidor (Apache, IIS, WebSite), o nome do programa CGI que está sendo executado e assim por diante. Essas variáveis ​​estão disponíveis para o programador CGI e são metade da história da comunicação cliente-servidor. A lista completa de variáveis ​​necessárias está no Common Gateway Interface RFC. Este programa CGI Perl simples exibirá todas as variáveis ​​de ambiente que estão sendo passadas ao redor. Dois programas semelhantes estão incluídos no diretório cgi-bin da distribuição Apache. Observe que algumas variáveis ​​são necessárias, enquanto outras são opcionais, então você pode ver algumas variáveis ​​listadas que não estavam na lista oficial. Além disso, o Apache fornece muitas maneiras diferentes para você adicionar suas próprias variáveis ​​de ambiente às básicas fornecidas por padrão. / Usr / bin / perl print Tipo de conteúdo: text / htmlnn foreach key (chaves ENV) key de impressão --gt ENV ltbrgt Outra comunicação entre o servidor e o cliente ocorre através de entrada padrão (STDIN) e saída padrão (STDOUT). No contexto diário normal, STDIN significa o teclado, ou um arquivo que um programa é dado para agir em, e STDOUT geralmente significa o console ou tela. Quando você POST um formulário web para um programa CGI, os dados nesse formulário são agrupados em um formato especial e é entregue ao seu programa CGI sobre STDIN. O programa, então, pode processar esses dados como se estivesse vindo do teclado ou de um arquivo. O formato especial é muito simples. Um nome de campo e seu valor são unidos juntamente com um sinal de igual (), e os pares de valores são unidos juntamente com um ampersand (amp). Caracteres inconvenientes, como espaços, e comercial e sinais iguais, são convertidos em seu equivalente hexágono para que eles não goma até os trabalhos. A seqüência de dados inteira pode parecer algo como: Você às vezes também verá este tipo de seqüência anexada a um URL. Quando isso é feito, o servidor coloca essa seqüência de caracteres na variável de ambiente chamado QUERYSTRING. Isso é chamado de solicitação GET. Seu formulário HTML especifica se um GET ou um POST é usado para entregar os dados, definindo o atributo METHOD na marca FORM. Seu programa é então responsável por dividir essa seqüência em informações úteis. Felizmente, existem bibliotecas e módulos disponíveis para ajudá-lo a processar esses dados, bem como lidar com outros aspectos do seu programa CGI. Quando você escreve programas CGI, você deve considerar usar uma biblioteca de código, ou módulo, para fazer a maior parte do trabalho grunhido para você. Isso leva a menos erros e um desenvolvimento mais rápido. Se você está escrevendo programas CGI em Perl, os módulos estão disponíveis no CPAN. O módulo mais popular para esta finalidade é CGI. pm. Você também pode considerar CGI :: Lite. Que implementa um conjunto mínimo de funcionalidade, que é tudo que você precisa na maioria dos programas. Se você está escrevendo programas CGI em C, há uma variedade de opções. Uma delas é a biblioteca CGIC, de www. boutell / cgic /. Há um grande número de recursos CGI na web. A lista do HTML Writers Guild é uma grande fonte de respostas para suas perguntas. Você pode encontrar mais em www. hwg. org/lists/hwg-servers/. A especificação CGI atual está disponível no Common Gateway Interface RFC. Quando você postar uma pergunta sobre um problema CGI que você está tendo, seja para uma lista de discussão, ou para um grupo de notícias, certifique-se de fornecer informações suficientes sobre o que aconteceu, o que você esperava que aconteça, e como o que realmente aconteceu era diferente, o servidor Você está executando, qual idioma seu programa CGI estava, e, se possível, o código ofensivo. Isso fará com que encontrar o seu problema muito mais simples. Observe que as perguntas sobre problemas CGI nunca devem ser postadas no banco de dados de bugs do Apache, a menos que você tenha certeza de que encontrou um problema no código-fonte do Apache. Aviso: Esta não é uma seção QampA. Os comentários colocados aqui devem ser apontados para sugestões sobre como melhorar a documentação ou o servidor e podem ser removidos novamente pelos nossos moderadores se forem implementados ou considerados inválidos / fora do tópico. Perguntas sobre como gerenciar o Servidor HTTP Apache devem ser direcionadas para nosso canal IRC, httpd, no Freenode, ou enviadas para nossas listas de discussão. Copyright 2016 A Apache Software Foundation. Licenciado sob a Licença Apache, Versão 2.0.

Comments

Popular Posts