Nginx ( engine x ) é basicamente um servidor HTTP e proxy reverso, um servidor proxy de email e um servidor proxy TCP ( http://nginx.org/en/ ). Ou seja, se precisar subir um site, balancear um serviço HTTP, etc.. Nginx  deve ser sua escolha!


Instalando no Windows

- Vá até a página de downloads: http://nginx.org/en/download.html
- Escolha a Mainline version para Windows: nginx/Windows-1.x.x
- Descompacte em c:\nginx
- Abra o cmd
- $ cd c:\nginx
- $ start nginx
- Abra o navegador de sua preferência e digite: http://localhost
- Deve exibir a mensagem: Welcome to NGINX


Instalando no Linux

CentOS 7

- Crie um arquivo em: /etc/yum.repos.d/nginx.repo
- Com o seguinte conteúdo:

 
  [nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1   

- Inicie o serviço.. 
- $ systemctl start nginx
- Abra o navegador de sua preferência e digite: http://localhost
- Deve exibir a mensagem: Welcome to NGINX

Em caso de dúvidas ou para mais informações acesse: https://www.nginx.com/resources/wiki/start/topics/tutorials/install/


Configurando o balaceamento para o Manager eDoc

- Crie/Edite o arquivo nginx.conf

Windows: c:\nginx\conf\nginx.conf

 
  worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile      on;
    keepalive_timeout  65;
    
    include edoc.conf;
}
   

Linux: \etc\nginx\nginx.conf

 
  user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    ssl_session_cache   shared:SSL:10m;
    ssl_session_timeout 10m;

    include /etc/nginx/conf.d/*.conf;
}   

 

- Crie o arquivo server.conf

Windows: c:\nginx\conf\server.conf
Linux: \etc\nginx\server.conf

 
  client_body_buffer_size 10K;
client_header_buffer_size 1k;
client_max_body_size 8m;
large_client_header_buffers 4 8k;
client_body_timeout 12;
client_header_timeout 12;
keepalive_timeout 15;
send_timeout 10;
gzip on;
gzip_comp_level 2;
gzip_min_length 1000;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain application/x-javascript text/xml text/css application/xml;
access_log off;

error_page 497 =301 https://$host:$server_port$request_uri;

proxy_connect_timeout   30s;
proxy_send_timeout      45s;
proxy_read_timeout      3m;

server_tokens off;
proxy_pass_header Server;   

 

- Crie o arquivo proxy_cache.conf

Windows: c:\nginx\conf\proxy_cache.conf
Linux: \etc\nginx\proxy_cache.conf

 
  proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
proxy_cache_revalidate on;
proxy_cache_min_uses 3;
proxy_cache_lock on;

add_header X-Cache-Status $upstream_cache_status;   

 

- Crie o arquivo proxy_header.conf

Windows: c:\nginx\conf\proxy_header.conf
Linux: \etc\nginx\proxy_header.conf

 
  proxy_redirect off;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;   

 

- Crie o arquivo edoc.conf

Windows: c:\nginx\conf\edoc.conf
Linux: \etc\nginx\conf.d\edoc.conf

 
  # No Linux é necessário criar o diretório /data/nginx/cache/edoc
# No Windows é necessário alteras este diretório /data/nginx/cache/edoc para "C:/Desenvolvimento/nginx/cache/edoc"
proxy_cache_path /data/nginx/cache/edoc levels=1:2 keys_zone=edoc_proxy_cache:10m inactive=24h  max_size=1g; 

upstream edoc {
    server 127.0.0.1:8081; #
    server 127.0.0.1:8082; # MODIFIQUE DE ACORDO COM SEUS IP/PORTA
    server 127.0.0.1:8083; # E QUANTIDADE DE SERVIDORES
    server 127.0.0.1:8084; #   http://nginx.org/en/docs/http/ngx_http_upstream_module.html  
    server 127.0.0.1:8085; #
}

server {

    listen 8080;

    include server.conf;


    ### Requisições de GUI ###

    location ~* ^.+\.(?:css|cur|js|jpe?g|gif|htc|ico|png|htm?l|xml|otf|ttf|eot|woff|svg|map)$ {
        proxy_pass http://edoc;
        access_log off;
        expires 10d;
        tcp_nodelay off;
        include proxy_header.conf;
        proxy_cache_valid 200 1d;
        include proxy_cache.conf;
    }
 
    location ~* (.*)/(nfe|nfce|nfse|cte|mdfe|cfe)/modo {
        if ($args ~* getConfig) {
            proxy_pass http://edoc;
        }
        if ($request_method ~* (POST|GET)) {
            proxy_pass http://edoc;
        }
        include proxy_header.conf;
        proxy_cache edoc_proxy_cache;
        proxy_cache_valid 200 10m;
        include proxy_cache.conf;
    }

    location ~* /spdNewGUI/(obtermodosaas|documentosvisiveis|cidades-habilitadas) {
        proxy_pass http://edoc;
        include proxy_header.conf;
        proxy_cache edoc_proxy_cache;
        proxy_cache_valid 200 12h;
        include proxy_cache.conf;
    }


    ### Rotas de consulta e imprime sem cache ###

    location ~* (.*)/(consulta|imprime) {
        proxy_pass http://edoc;
        include proxy_header.conf;
    } 


    ### Demais requisições para ManagerAPIWeb ###
      
    location ~* /ManagerAPIWeb/ {
        proxy_pass http://edoc;
        include proxy_header.conf;
    }


    ### Qualquer outra requisição diferente das demais ###

    location ~* / {
        proxy_pass http://edoc;
        include proxy_header.conf;
        proxy_cache edoc_proxy_cache;
        proxy_cache_valid 200 1d;
        include proxy_cache.conf;
    } 
 
}   

 

Feito isso, basta reiniciar o NGINX

Windows: 
- Abra o cmd
- $ cd c:\nginx
- nginx -s reload

Linux:
- No terminal
- $ systemctl restart nginx

Agora é só testar:
- Abra o navegador de sua preferência e digite: http://localhost:8081
- Deve exibir a GUI do Manager eDoc


Pronto :)