Apache HTTP Server (Servidor HTTP) Servidor Web - Apache O Apache é um servidor Web gratuito fonte aberta robusto altamente confiável configurável extensível Servidor Web O grande propósito de um servidor WEB é receber e processar requisições via protocolo HTTP. Inicialmente o objetivo era servir páginas estáticas. Depois surgiram as páginas dinâmicas e interativas. Modelo Request/Response Solicitação HTTP Cliente Servidor Web Dados HTML Modelo Request/Response request Browser Servidor Web response Exemplos: Mozilla Firefox Internet Explorer Chrome (Google) Opera Konqueror Safari Exemplos: Apache Internet Information Server (IIS) lighttpd Modelo Request/Response Protocolo HTTP (HyperText Transport Protocol) É um protocolo da camada de aplicação que usa TCP como protocolo de transporte É um protocolo “stateless”, isto é, sem estado, sendo cada requisição independente uma das outras. Requisição HTTP GET / HTTP/1.1 Host: www.policamp.edu.br User-Agent: Mozilla/5.0 ... Connection: Keep-Alive Resposta HTTP HTTP/1.1 200 OK Date: Thu, 16 Aug 2007 22:46:38 GMT Content-Type: text-html Content-Lenght: 2541 <html> ... URI (Universal Resource Identifier) URIs são strings utilizadas para identificar recursos na Web como páginas, serviços, documentos, imagens, musicas, arquivos, caixas de emails, noticias, entre outros. O URL (Universal Resource Locator) é um tipo de URI. URI (Uniform Resource Identifier) ftp://ftp.is.co.za/rfc/rfc1808.txt -- ftp scheme for File Transfer Protocol services gopher://spinaltap.micro.umn.edu/00/Weather/California/Los%20Angeles -- gopher scheme for Gopher and Gopher+ Protocol services http://www.math.uio.no/faq/compression-faq/part1.html -- http scheme for Hypertext Transfer Protocol services mailto:[email protected] -- mailto scheme for electronic mail addresses news:comp.infosystems.www.servers.unix -- news scheme for USENET news groups and articles telnet://melvyl.ucop.edu/ -- telnet scheme for interactive services via the TELNET Protocol URL (Uniform Resource Locator) <scheme>:://<host>/<path> Exemplo: http://www.policamp.edu.br Onde: <scheme> = indica qual o serviço solicitado (http, ftp, etc) <host> = www.policamp.edu.br <path> = / Evolução da páginas dinâmicas CGI (Common Gateway Interface) FastCGI Apache Modules (exemplos: mod_php, mod_ruby, ...) Versões do Apache Apache 1.3.33 Apache 2.0 Apache 2.2 Instalação do Apache (Linux) Faça o download http://httpd.apache.org tar –xzvf httpd-2.0.59.tar.gz Instalação do Apache (2) $ $ $ $ ./configure –prefix=/usr/local/apache2 make make install /usr/local/apache2/bin/apache2ctl start Documentação do Apache (1) Compiling and Installing (Compilação e instalação) Starting (Iniciando) Stopping or Restarting ( Run-time Configuration Directives Directive Quick-Reference Modules (Módulos) Multi-Processing Modules (MPMs) Filters (Filtros) Handlers Server and Supporting Programs (Servidores e programas de Suporte) Glossary Documentação do Apache (2) Release Notes (Notas da Versão) Reference Manual (Manual de Referência) User’s Guide (Guia do Usuário) How-To / Tutorials Programas httpd apachectl ab Apache HTTP server benchmarking tool APache eXtenSion tool configure Interface de controle do servidor HTTP Apache apxs Servidor HTTP (hypertext transfer protocol server) Configure the source tree dbmmanage Create and update user authentication files in DBM format for basic authentication Programas (2) htdigest htdbm Rotate Apache logs without having to kill the server suexec Resolve hostnames for IP-addresses in Apache logfiles rotatelogs Create and update user authentication files for basic authentication logresolve Manipulate DBM password databases. htpasswd Create and update user authentication files for digest authentication Switch User For Exec Other Programs Support tools with no own manual page. Apache – Arquivos de configuração /var/log/apache2 /etc/apache2 apache2.conf cond.d httpd.conf principal arquivo de configuração ports.conf /usr/sbin/apache2 Arquivos de Configuração Principais arquivos de configuração Sintaxe dos arquivos de configuração Módulos Escopo das Diretivas Arquivos .htaccess Arquivos de Configuração /etc/apache2 apache2.conf conf.d/ envvars httpd.conf mod-available/ mods-enabled/ ports.conf sites-available/ sites-enabled/ Arquivos de Configuração /usr/sbin/apache2 /usr/sbin/apache2ctl /etc/init.d/apache2 /etc/default/apache2 /usr/lib/apache2 /usr/share/apache2 Arquivos de Configuração Arquivo /etc/init.d/apache2 (usado principalmente em distribuições Debian e derivadas) /etc/init.d/httpd (usadas em outras distribuições e recomendada pela Apache) maurocl@ubuntu-server:/etc/init.d$ ./apache2 * Usage: /etc/init.d/apache2 {start|stop|restart|reload|force-reload} apache2.conf É o principal arquivo de configuração do Apache2 Ports.conf No Apache2 a configuração de portas é feita pelo arquivo /etc/apache2/ports.conf Aliases de interfaces de rede Para tornar permanente os aliases de interfaces de rede é necessário alterar o arquivo /etc/init.d/bootmisc.sh /etc/rd.d/rc.local Essa mudança depende da distribuição do Linux usada. Arquivos de Log /var/log/apache2/error.log log de erros /var/log/apache2/access.log log de acessos Diretório ‘default’ /var/www/apache2-default Access Log Loga as informações referentes a quem está acessando o servidor As informações são registradas no formato CLF (Common Log Format) access.log cat access_log 192.168.7.14 - - [16/Sep/2008:16:58:23 -0300] "GET / HTTP/1.1" 403 3918 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.1) Gecko/2008070206 Firefox/3.0.1" 192.168.7.14 - - [16/Sep/2008:16:58:23 -0300] "GET /icons/apache_pb2.gif HTTP/1.1" 200 2414 "http://192.168.7.30/" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.1) Gecko/2008070206 Firefox/3.0.1" 192.168.7.14 - - [16/Sep/2008:16:58:23 -0300] "GET /icons/poweredby.png HTTP/1.1" 200 3034 "http://192.168.7.30/" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.1) Gecko/2008070206 Firefox/3.0.1" 192.168.7.14 - - [16/Sep/2008:16:58:24 -0300] "GET /favicon.ico HTTP/1.1" 404 286 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.1) Gecko/2008070206 Firefox/3.0.1" 192.168.7.14 - - [16/Sep/2008:16:58:27 -0300] "GET /favicon.ico HTTP/1.1" 404 286 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.1) Gecko/2008070206 Firefox/3.0.1" 192.168.7.14 - - [16/Sep/2008:17:04:02 -0300] "GET /perl-status HTTP/1.1" 403 290 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.1) Gecko/2008070206 Firefox/3.0.1" 192.168.7.14 - - [16/Sep/2008:17:04:12 -0300] "GET /perl-status/ HTTP/1.1" 403 291 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.1) Gecko/2008070206 Firefox/3.0.1" 192.168.7.14 - - [16/Sep/2008:17:06:24 -0300] "GET /perl/test.pl HTTP/1.1" 200 14 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.1) Gecko/2008070206 Firefox/3.0.1" Error Log O arquivo errorlog registra o log de erros do Apache. error.log cat error_log [Tue Sep 16 16:57:57 2008] [notice] SELinux policy enabled; httpd running as context unconfined_u:system_r:httpd_t:s0 [Tue Sep 16 16:57:57 2008] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec) [Tue Sep 16 16:57:58 2008] [notice] Digest: generating secret for digest authentication ... [Tue Sep 16 16:57:58 2008] [notice] Digest: done [Tue Sep 16 16:57:59 2008] [notice] mod_python: Creating 4 session mutexes based on 256 max processes and 0 max threads. [Tue Sep 16 16:57:59 2008] [notice] mod_python: using mutex_directory /tmp [Tue Sep 16 16:57:59 2008] [notice] Apache/2.2.8 (Unix) DAV/2 PHP/5.2.5 mod_python/3.3.1 Python/2.5.1 mod_ssl/2.2.8 OpenSSL/0.9.8g mod_perl/2.0.3 Perl/v5.10.0 configured -- resuming normal operations [Tue Sep 16 16:58:23 2008] [error] [client 192.168.7.14] Directory index forbidden by Options directive: /var/www/html/ [Tue Sep 16 16:58:24 2008] [error] [client 192.168.7.14] File does not exist: /var/www/html/favicon.ico [Tue Sep 16 16:58:27 2008] [error] [client 192.168.7.14] File does not exist: /var/www/html/favicon.ico [Tue Sep 16 17:03:31 2008] [notice] SIGHUP received. Attempting to restart [Tue Sep 16 17:03:31 2008] [notice] Digest: generating secret for digest authentication ... [Tue Sep 16 17:03:31 2008] [notice] Digest: done [Tue Sep 16 17:03:31 2008] [notice] mod_python: Creating 4 session mutexes based on 256 max processes and 0 max threads. [Tue Sep 16 17:03:31 2008] [notice] mod_python: using mutex_directory /tmp [Tue Sep 16 17:03:31 2008] [notice] Apache/2.2.8 (Unix) DAV/2 PHP/5.2.5 mod_python/3.3.1 Python/2.5.1 mod_ssl/2.2.8 OpenSSL/0.9.8g mod_perl/2.0.3 Perl/v5.10.0 configured -- resuming normal operations [Tue Sep 16 17:04:02 2008] [error] [client 192.168.7.14] client denied by server configuration: /var/www/html/perl-status [Tue Sep 16 17:04:12 2008] [error] [client 192.168.7.14] client denied by server configuration: /var/www/html/perl-status Processos $ ps aux | grep apache root@ubuntu-server:/var/www/apache2-default# ps aux | grep apache root 3896 0.0 2.3 20016 5996 ? Ss 19:44 0:00 /usr/sbin/apache2 -k start www-data 3915 0.0 1.2 20016 3208 ? S 19:44 0:00 /usr/sbin/apache2 k start www-data 3916 0.0 1.2 20016 3208 ? S 19:44 0:00 /usr/sbin/apache2 k start www-data 3917 0.0 1.2 20016 3208 ? S 19:44 0:00 /usr/sbin/apache2 k start www-data 3918 0.0 1.2 20016 3208 ? S 19:44 0:00 /usr/sbin/apache2 k start www-data 3919 0.0 1.2 20016 3208 ? S 19:44 0:00 /usr/sbin/apache2 k start - Versão do Apache instalada root@ubuntu-server:~# apache2ctl -v Server version: Apache/2.2.3 Server built: Jan 15 2007 18:14:50 Versão do Apache instalado (detalhado) root@ubuntu-server:~# apache2ctl -V Server version: Apache/2.2.3 Server built: Jan 15 2007 18:14:50 Server's Module Magic Number: 20051115:3 Server loaded: APR 1.2.7, APR-Util 1.2.7 Compiled using: APR 1.2.7, APR-Util 1.2.7 Architecture: 32-bit Server MPM: Prefork threaded: no forked: yes (variable process count) Versão do Apache instalado (detalhado) (2) Server compiled with.... -D APACHE_MPM_DIR="server/mpm/prefork" -D APR_HAS_SENDFILE -D APR_HAS_MMAP -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled) -D APR_USE_SYSVSEM_SERIALIZE -D APR_USE_PTHREAD_SERIALIZE -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT -D APR_HAS_OTHER_CHILD -D AP_HAVE_RELIABLE_PIPED_LOGS -D DYNAMIC_MODULE_LIMIT=128 -D HTTPD_ROOT="" -D SUEXEC_BIN="/usr/lib/apache2/suexec" -D DEFAULT_PIDLOG="/var/run/apache2.pid" -D DEFAULT_SCOREBOARD="logs/apache_runtime_status" -D DEFAULT_LOCKFILE="/var/run/apache2/accept.lock" -D DEFAULT_ERRORLOG="logs/error_log" -D AP_TYPES_CONFIG_FILE="/etc/apache2/mime.types" -D SERVER_CONFIG_FILE="/etc/apache2/apache2.conf" Alias de diretórios http://192.168.7.15/icons/ Estatística de uso dos Web Servers Resultados da pesquisa de agosto do Netcraft mostram nova redução do percentual do Apache - "A liderança do Apache nas estatísticas de servidores web mantidas pelo Netcraft continua inquestionável, embora em declínio continuado. Os dados de agosto mostram mais uma pequena redução, e agora o m" (continua...) Para saber mais, visite o BR-Linux (http://brlinux.org/). Uso de Servidores web Apache 48,4% IIS 34,2% Outros 17,4% Fonte: http://br-linux.org/linux/resultados-da-pesquisa-de-agosto-do-netcraft Apache cresce ainda mais no mercado de servidores As estatísticas de servidores web liberadas mensalmente pela Netcraft mostram que o servidor livre Apache opera, agora, 1,2 milhões de sites a mais que há um mês. Isso significa que o servidor web de código aberto está por trás de 176.748.506 dos websites pesquisados, quase metade de toda a amostra. Em segundo lugar na lista está o Microsoft IIS, com uma fatia de 35%, seguido do Google Web Server (GWS) com 6% e do Lighttpd, também de código aberto, com 3% (1,7 milhões de sites). Segundo a Netcraft, uma nova promessa é o servidor Nginx, de autoria do programador russo Igor Sysoev. Em sua primeira aparição na lista, ele já alcançou o quinto lugar. As estatísticas estão disponíveis no site da Netcraft. O ranking de servidores de agosto está aqui. Publicado em 01/09/2008 às 10:45 em http://www.linuxnewmedia.com.br/noticia/apache_cresce_ainda_mais_no_mercado_de_servidores Netcraft Web Server Survey http://survey.netcraft.com/Reports/200 808/ WebDAV (Web-based Distributed and Versioning) É uma extensão ao HTTP Permite criar, copiar, mover ou excluir arquivos em um servidor Web Módulo mod_dev Módulos O Apache é um sistema divido em módulos Apenas um conjunto mínimo de módulos são carregados no núcleo do servidor http Outras funcionalidades são acrescentadas por meio de outros módulos Módulos (2) Módulo worker worker.c mod_auth mod_auth.c mpm_winnt mpm_winnt.c Os módulos podem ser compilados junto com o Apache ou carregados dinamicamente Módulos (3) mpm_prefork Apache estruturado em processos mpm_worker Apache estruturado em threads Suporte a Dynamic Shared Object (DSO) São módulos que podem ser carregados dinamicamente Um módulo é definido como DSO no momento em que se está definindo a compilação do Apache Status de um Módulo Núcleo (N) MPM (multi-processamento) (M) Base (B) Extensão (E) Experimental (X) Core Features and MultiProcessing Modules core Core Apache HTTP Server features that are always available mpm_common A collection of directives that are implemented by more than one multiprocessing module (MPM) beos This Multi-Processing Module is optimized for BeOS. event An experimental variant of the standard worker MPM mpm_netware Multi-Processing Module implementing an exclusively threaded web server optimized for Novell NetWare Core Features and MultiProcessing Modules mpmt_os2 Hybrid multi-process, multi-threaded MPM for OS/2 prefork Implements a non-threaded, pre-forking web server mpm_winnt Este módulo Multi-Processing é otimizado para Windows NT. worker Multi-Processing Module implementing a hybrid multi-threaded multi-process web server Lista de Módulos Veja http://httpd.apache.org/docs/2.2/mod/ Exemplos de Módulos mod_rewrite: provê um engine (“motor”) para reescrver URLs requisitadas sob demanda mod_deflate: comprime o conteúdo antes de enviar ao cliente mod_cband: controla a largura de banda usada mod_speling: tenta corrigir URLs com erros que o usuário fez por engano, como esquecer de acrescentar um ‘s’ a site, ou ignorando a questão de letras maiúsculas e minúsculas. Código de Status do HTTP Informativos (1XX) Requisição bem sucedida (2XX) Redirecionamento (3xx) Erro na requisição do cliente (4XX) Erro do servidor (5XX) Autenticação no Apache AccessFileName (.htaccess) AllowOverride AuthType AuthName Require Satisfy Autenticação (2) .httpasswd .htaces Utilitário htpasswd: # ./htpasswd –c .htpasswd <username> Modelo CGI (Common Gateway Interface) O usuário acessa uma URL Essa URL indica a necessidade de execução de um programa externo via CGI O servidor Web carrega o programa, redireciona a requisição, aguarda o processamento e recebe a resposta que é enviada de volta ao usuário. CGI (Common Gateway Interface) CGI define uma forma para o servidor web interagir com programas externos que geram conteúdo dinamicamente. Esses programas são frequentemente chamados programas CGI ou scripts CGI. É a maneira mais simples e mais comum de colocar conteúdo dinâmico em um site na web. Servidor LAMP / WAMP / MAMP Linux / Windows / Mac Apache MySQL PHP Exemplo de execução de um script PHP com acesso a base de dados MySQL DocumentRoot (raiz da localização dos arquivos) /var/www/html Estrutura de diretórios [root@localhost httpd]# find $PWD /etc/httpd /etc/httpd/logs /etc/httpd/run /etc/httpd/conf /etc/httpd/conf/magic /etc/httpd/conf/httpd.conf /etc/httpd/conf.d /etc/httpd/conf.d/proxy_ajp.conf /etc/httpd/conf.d/manual.conf /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/perl.conf /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/webalizer.conf /etc/httpd/conf.d/README /etc/httpd/conf.d/perl.conf~ /etc/httpd/conf.d/python.conf /etc/httpd/conf.d/php.conf /etc/httpd/conf.d/squid.conf /etc/httpd/modules Arquivos de log /var/log/httpd [root@localhost httpd]# ll total 24 -rw-r--r-- 1 root root 1536 -rw-r--r-- 1 root root 2792 -rw-r--r-- 1 root root 1931 -rw-r--r-- 1 root root 3730 -rw-r--r-- 1 root root 0 -rw-r--r-- 1 root root 333 -rw-r--r-- 1 root root 1140 -rw-r--r-- 1 root root 0 2008-09-16 2008-09-10 2008-09-16 2008-09-10 2008-09-07 2008-09-16 2008-09-10 2008-09-07 17:06 16:43 17:04 16:43 16:54 17:03 16:43 16:54 access_log access_log-20080914 error_log error_log-20080914 ssl_access_log ssl_error_log ssl_error_log-20080914 ssl_request_log httpd.conf Arquivo principal de configuração do Apache localizado em /etc/httpd/conf/ Configuração do Apache As diretivas de configuração estão agrupadas em três sessões básicas: global_environment (configuração global do servidor Apache) diretivas que definem os parâmetros do servidor principal (main) ou padrão configurações para Hosts Virtuais (Virtual Hosts) Sessão 1 – Global Environment Sessão 2 – Main server configuration Sessão 3 – Virtual Hosts Variáveis de Ambiente Sites seguros com SSL (Secure Socket Layer) Um certificado SSL é normalmente emitido por uma Autoridade Certificadora (Certified Authority (CA)) – garante a identidade do servidor Web em questão. Conexão segura HTTPS (HTTP seguro) Conexões Segura Cliente Servidor 1. Cliente solicita uma conexão segura através de uma URL https://... 2. Antes de estabelecer uma conexão o servidor envia o CA ao cliente 1. Se o certificado emitido não for autêntico para o domínio pelo qual response uma msg de alerta será exibida no cliente 2. Se o certificado for válido a conexão continuará. Uma chave é criada para sessão e enviada ao servidor. Essa chave é criptografada utilizando a chave publica do servidor 3. O servidor decodifica a chave da sessão utilizando sua chave privada. A partir desse momento, todo o conteúdo da conexão será criptografado por essa sessão, que é de conhecimento exclusivo do cliente e do servidor em questão Criação do Certificado Algumas CAs que fornecem certificados para servidores Web são: Thawte VeriSign GoDaddy A emissão de certificados é um serviço pago. A CAcert emite certificados gratuitamente. Instalação do Certificado Conexão Segura – Protocolo SSL Porta 443 corresponde ao protocolo SSL utilizado na conexão segura Bibliografia [1] MARCELO, A. Apache – Configurando o Servidor Web para Linux. 2ª edição. Rio de Janeiro: Brasport, 2006. [2] VEIGA, R.G.A. Apache – Guia de Consulta Rápida. São Paulo: Novatec, 2006. Links [1] http://www.cacert.org/