Você está na página 1de 23

Nginx Webserver Proxy Reverso

Como falado em nossa aula anterior, estaremos inplementando o


Nginx como front-end para servir conteúdo estático a clientes, além
disso o Nginx terá função de proxy reverso para requisições a
páginas PHP enviando as requisições para o Apache.

Após o processamento dessas requisições no Apache, que estará


em uma camada segregada em loopback a resposta será retornada
ao cliente em formato texto atraves da conexão criptografada em
TLSv1 por intermédio do certifcado digital HTTPS contido no Nginx.
Nginx Webserver Proxy Reverso
Uma prova de conceito pode ser feita da seguinte maneira para
explicar de forma prática o funcionamento do proxy.

Crie um arquivo .php na raiz dos Webservers


# echo '<?php phpinfo(); ?>' > usr/share/nginx/html/index.php

Acesse a aplicação via browser pelo cliente externo


$ frefox http://www.asf.com

Note que as informações da função phpinfo retornam o ambiente do


apache.
Nginx Webserver Proxy Reverso
Nginx Webserver Proxy Reverso
Remova o arquivo php e teste novamente o acesso ao webserver
# rm /usr/share/nginx/html/index.php

Acesse a aplicação via browser pelo cliente externo


$ frefox http://www.asf.com

Note que as o acesso agora ocorre no Nginx, quando não existe


requisição a conteúdo PHP o Nginx responde normalmente ao
cliente, porém, se existe referência a arquivo php na requisição o
Nginx atua como proxy reverso enviando a requisição ao Apache.

OBS: Remova o arquivo index.php, ele é vulnerável a ataques!


Nginx Webserver Proxy Reverso
Nginx Webserver Proxy Reverso
Entre no diretório raiz dos webservers
# cd /usr/share/nginx/html

Através do node Interno, logue no forceclass via browser e faça


dowload do pacote asf.zipe e envie o pacote via scp para node
externo
$ scp -P 53000 /home/analista/Download/asf.zip analista@asf.com
:/srv/asf/homes/analista

No node Storage, instale os pacotes zip e unzip


# yum install zip unzip -y
Nginx Webserver Proxy Reverso
Agora descompacte o conteúdo enviado através do usuário root
para sua localização atual
# unzip /srv/asf/homes/analista/asf.zip

Mova o a aplicação para o diretório corrent


# mv asf/public_html/* asf/

Remova o conteúdo não utilizado


# rm -rf asf/{img.tar.gz,public_html}

Crie um virtualhost no HTTPD


# vim /etc/httpd/conf.d/asf.conf
Nginx Webserver Proxy Reverso
<VirtualHost asf.com:8080>
DocumentRoot /usr/share/nginx/asf
ServerName asf.com
ServerAdmin analista@asf.com
ErrorLog /var/log/httpd/asf-error.log
CustmLog /var/log/httpd/asf-access.log common
</VirtualHost>

Grave o arquivo, e crie um link simbólico para o virtualhost


# ln -s /etc/httpd/conf.d/asf.conf /etc/httpd/sites-enabled/asf.conf
Nginx Webserver Proxy Reverso
Envie o mapeamento do virtualhost para o arquivo hosts
# echo '127.0.0.1 asf.com' >> /etc/hosts

Altere a confguração Root no bloco server do Nginx


# vim /etc/nginx/nginx.conf

server {
listen 80 default_server;
server_name www.asf.com;
root /usr/share/nginx/html/asf;
...
Nginx Webserver Proxy Reverso
Grave as mudanças e feche o arquivo
# echo '127.0.0.1 asf.com' >> /etc/hosts

Reinicie o serviço do HTTPD e NGINX


# systemctl restart httpd
# systemctl restart nginx

Acesse a aplicação via browser no node Externo


$ frefox http://www.asf.com
Nginx Webserver Proxy Reverso
Nginx Webserver Proxy Reverso
Iniciaremos agora a implementação do SSL, crie o diretório
abaixo para alocar os certifcados no node storage

# mkdir -p /etc/pki/nginx
# cd /etc/pki/nginx

Crie a chave criptografca


# openssl genrsa -out asf.key 2048

Crie o certifcado para a aplicação


# openssl req -new -key asf.key -out asf.csr
Nginx Webserver Proxy Reverso
Assine o ertifcado digital
# openssl x509 -req -days 365 -in asf.csr -signkey asf.key -out
asf.crt

Abra o arquivo de confguração do Nginx e adicione o bloco abaixo


na sessão server
# vim /etc/nginx/nginx.conf
Listen 443 ssl;

ssl_certifcate "/etc/pki/nginx/asf.crt";
ssl_certifcate_key "/etc/pki/nginx/asf.key";
Nginx Webserver Proxy Reverso
Assine o ertifcado digital
# openssl x509 -req -days 365 -in asf.csr -signkey asf.key -out
asf.crt

Abra o arquivo de confguração do Nginx e adicione no bloco server


o conteúdo em negrito

# vim /etc/nginx/nginx.conf

server {
listen 80 default_server;
listen 443 ssl;
Nginx Webserver Proxy Reverso
server_name www.asf.com;
root /usr/share/nginx/html/asf;
index index.php index.html index.htm;

ssl_certifcate "/etc/pki/nginx/asf.crt";
ssl_certifcate_key "/etc/pki/nginx/asf.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
Nginx Webserver Proxy Reverso
Grave o arquivo e aplique as regras para bloqueio de acesso local a
porta 80 no servidor

# frewall-cmd --remove-service=http --permanent


# frewall-cmd --remove-port=80/tcp --permanent
# frewall-cmd --reload
Nginx Webserver Proxy Reverso
Altere as regras de acesso externo a aplicação no script de frewall
do node Gateway liberando somente a porta 443

# vim /sbin/frewall.sh

# 9 - Habilita o FORWARD para acesso ao WWW


iptables -A FORWARD -p tcp -s $EXT -d $STG --dport 443 -j
ACCEPT

# 4 - Habilita acesso do cliente Externo a aplicacao


iptables -t nat -A PREROUTING -p tcp -i enp0s9 -s $EXT -d $FWL1
--dport 443 -j DNAT --to-destination $STG:443
Nginx Webserver Proxy Reverso

Execute o script de Firewall e teste um acesso via node externo

# frewall.sh
$ frefox http://www.asf.com
Nginx Webserver Proxy Reverso

Você também pode gostar