Proxy nginx

Quando o webman precisa fornecer acesso externo diretamente, é recomendado adicionar um proxy nginx na frente do webman, o que traz os seguintes benefícios.

  • Recursos estáticos são tratados pelo nginx, permitindo que o webman se concentre no processamento da lógica de negócios
  • Permite que múltiplos webman compartilhem as portas 80 e 443, diferenciando diferentes sites por meio de nomes de domínio, permitindo a implementação de múltiplos sites em um único servidor
  • Capacidade de coexistência entre php-fpm e a arquitetura webman
  • O proxy nginx para ssl implementa https de forma mais simples e eficiente
  • Capacidade de filtrar rigorosamente algumas requisições ilegais da internet

Exemplo de Proxy nginx

upstream webman {
    server 127.0.0.1:8787;
    keepalive 10240;
}

server {
  server_name domínio_do_site;
  listen 80;
  access_log off;
  # Atenção, aqui deve ser o diretório public do webman, não o diretório raiz do webman
  root /your/webman/public;

  location ^~ / {
      proxy_set_header Host $http_host;
      proxy_set_header X-Forwarded-For $remote_addr;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_http_version 1.1;
      proxy_set_header Connection "";
      if (!-e $request_filename){
          proxy_pass http://webman;
      }
  }

  # Negar acesso a todos os arquivos que terminam com .php
  location ~ \.php$ {
      return 404;
  }

  # Permitir acesso ao diretório .well-known
  location ~ ^/\.well-known/ {
    allow all;
  }

  # Negar acesso a todos os arquivos ou diretórios que começam com .
  location ~ /\. {
      return 404;
  }

}

De modo geral, essa configuração só precisa que o desenvolvedor defina server_name e root com os valores reais, e os outros campos não precisam ser configurados.

Atenção
É especialmente importante que a opção root seja configurada para o diretório public do webman, nunca deve ser configurada diretamente para o diretório do webman, caso contrário, todos os seus arquivos podem ser baixados e acessados externamente, incluindo arquivos sensíveis como a configuração do banco de dados.