Neste tutorial vamos configurar um servidor web com NGINX (lê-se “engine x”), o concorrente do Apache. NGINX é um servidor web (HTTP e IMAP/POP3/Proxy) rápido, leve e com inúmeras possibilidades de configuração para melhor performance. O Apache, sem dúvidas, é o servidor web mais popular. No entanto, o NGINX a cada ano ganha mais popularidade e está sendo a preferência dos novos projetos. Também estarei instalando o banco de dados PostgreSQL e phpPgAdmin como gerenciador web.
Distribuição utilizada: Debian 12 Bookworm / Instalação Limpa
NGINX 1.22
https://www.nginx.com
Vamos instalar-lo e remover a assinatura para que não vejam a versão do mesmo (Boas praticas)
1 # apt install nginx 2 # sed -i 's/# server_tokens/server_tokens/' /etc/nginx/nginx.conf 3 # systemctl restart nginx Copiar
Acesse agora em seu navegador http://IP-SERVIDOR/
Pronto nosso NGINX está rodando!
PostgreSQL
1 # apt install postgresql postgresql-contrib Copiar
Torne-se o usuário postgres, para poder criar o banco de dados.
1 # su - postgres Copiar
Execute para entrar no terminal de comandos do banco.
1 $ psql Copiar
Para definir a senha do usuário postgres e instalar o adminpack.
1 postgres=# \password postgres 2 Digite nova senha para postgres: 3 Digite-a novamente: 4 postgres=# CREATE EXTENSION adminpack; 5 CREATE EXTENSION 6 postgres=# \q 7 $ exit Copiar
Ajustes no pg_hba.conf, assim toda alteração será necessaria validação do postgres com a senha que acabou de definir.
1 # vim /etc/postgresql/15/main/pg_hba.conf Copiar
Altere as seguintes linhas:
1 local all postgres peer 2 local all all peer Copiar
Para:
1 local all postgres md5 2 local all all md5 Copiar
Reinicie o postgres
1 # systemctl restart postgresql Copiar
Volte para o postgres
1 # su - postgres Copiar
Agora para toda ação será necessário autenticar.
1 $ psql 2 Senha para usuário postgres: !!SUA_SENHA!! 3 psql (15.3 (Debian 15.3-0+deb12u1)) 4 Type "help" for help. 5 postgres-# \q Copiar
Para demonstração irei criar um banco/usuário teste, não esqueça de alterar a senha.
1 $ createuser --pwprompt teste 2 Digite a senha para a nova role: << NOVA SENHA PARA O USUÁRIO TESTE 3 Digite-a novamente: << REPITA 4 Senha: << SENHA DO QUE SETOU ANTES NO COMANDO "\password postgres" Copiar
Agora crie o banco e vincule ao usuário.
1 $ createdb -O teste meubd 2 Senha: <<< SENHA DO POSTGRES Copiar
Verifique se o mesmo foi criado.
1 $ psql -l 2 Senha para usuário postgres: 3 Lista dos bancos de dados 4 Nome | Dono | Codificação | Collate | Ctype | Privilégios de acesso 5 -----------+----------+-------------+-------------+-------------+----------------------- 6 meubd | teste | UTF8 | pt_BR.UTF-8 | pt_BR.UTF-8 | 7 .... 8 .... Copiar
Acessamos agora o bd teste.
1 $ psql -U teste -d meubd 2 Senha do usuário teste: 3 psql (15.3 (Debian 15.3-0+deb12u1)) 4 Digite "help" para ajuda. 5 6 meubd=> Copiar
Vamos fazer uma “brincadeira” só para testar, criaremos uma tabela e inseriremos dados nela.
1 meubd=> CREATE TABLE doacao ( id int,nome text, valor text ); 2 meubd=> INSERT INTO doacao (id,nome,valor) values (1,'Rudimar Remontti','R$ 5,00'); 3 meubd=> SELECT * FROM doacao; 4 5 id | nome | valor 6 ----+------------------+--------- 7 1 | Rudimar Remontti | R$ 5,00 8 9 meubd=> \q Copiar
Se deseja remover o banco/usuário teste.
1 $ dropdb meubd 2 Senha: << SENHA DO POSTGRES 3 $ dropuser teste 4 Senha: << SENHA DO POSTGRES Copiar
Volte para root
1 $ exit Copiar
PHP 8.2
Incluirei algumas extensões do PHP que são normalmente utilizada também na instalação.
1 # apt install --no-install-recommends \ php php-{fpm,cli,mysql,pear,gd,gmp,bcmath,mbstring,curl,xml,zip,json,pgsql}Copiar
Agora vamos fazer a “integração” do PHP com o NGINX. Moveremos o arquivo defaul.
1 # mv /etc/nginx/sites-available/default /etc/nginx/sites-available/default.original Copiar
Crie um novo:
1 # vim /etc/nginx/sites-available/default Copiar
Ajuste:
1 server { 2 listen 80; 3 listen [::]:80; 4 5 root /var/www/html; 6 index index.php index.html index.htm; 7 8 server_name _; 9 10 location / { 11 try_files $uri $uri/ =404; 12 } 13 14 location ~ \.php$ { 15 include snippets/fastcgi-php.conf; 16 fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; 17 } 18 } Copiar
Teste a configuração se não tem nada errado e restart os serviços:
1 # nginx -t 2 # systemctl restart nginx php8.2-fpm Copiar
Vamos criar um arquivo em PHP para testa se nosso NGINX está interpretando o PHP.
1 # echo '<?php phpinfo();' >> /var/www/html/teste.php Copiar
Acesse em seu navegador http://IP-SERVIDOR/teste.php
Servidor WEB com PHP está funcionando!
Exemplo para multiplos domínios/subdomínios
1 # vim /etc/nginx/sites-available/sub1.conf Copiar
Neste ex: vou representar o sub1.remontti.com.br
1 server { 2 listen 80; 3 listen [::]:80; 4 5 root /var/www/sub1; 6 index index.php index.html index.htm; 7 8 add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; 9 10 server_name sub1.remontti.com.br; 11 12 location / { 13 try_files $uri $uri/ =404; 14 } 15 16 location ~ \.php$ { 17 include snippets/fastcgi-php.conf; 18 fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; 19 } 20 } Copiar
1 # vim /etc/nginx/sites-available/sub2e3.conf Copiar
Neste ex: vou representar o sub2.remontti.com.br e sub3.remontti.com.br
1 server { 2 listen 80; 3 listen [::]:80; 4 5 root /var/www/sub2e3; 6 index index.php index.html index.htm; 7 8 server_name sub2.remontti.com.br sub3.remontti.com.br; 9 10 add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; 11 12 location / { 13 try_files $uri $uri/ =404; 14 } 15 16 location ~ \.php$ { 17 include snippets/fastcgi-php.conf; 18 fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; 19 } 20 } Copiar
Link os arquivos no diretório “/etc/nginx/sites-available” que será carregado as novas configurações
1 # ln -s /etc/nginx/sites-available/sub1.conf /etc/nginx/sites-enabled/ 2 # ln -s /etc/nginx/sites-available/sub2e3.conf /etc/nginx/sites-enabled/ Copiar
Crie os diretórios referente a cada server_name.
1 # mkdir /var/www/sub1 2 # mkdir /var/www/sub2e3 3 # echo '<?php echo "Olá mundo do sub1!"; ?>' >> /var/www/sub1/index.php 4 # echo '<?php echo "Olá mundo do sub2e3!"; ?>' >> /var/www/sub2e3/index.php Copiar
Verifique se não tem nenhum erro e reinicie o serviço:
1 # nginx -t 2 # systemctl restart nginx Copiar
:: Let’s Encrypt ::
Criando certificado grátis para seus sub/domínios.
1 # apt install certbot python3-certbot-nginx Copiar
Para gerar o certificado use o comando:
1 # certbot Copiar
Não esqueça de colocar no seu cron para ele renovar o certificado, pois a cada 90 ele expira. Neste exemplo todo dia primeiro tento renovar.
1 # certbot -q renew Copiar
Para testar acesse: https://www.cdn77.com/tls-test/
Gostou?
Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!