Aqui estarei mostrando algumas das configurações que uso em um servidor web linux.
Eu costumo instalar programas necessários para o sistema, programas esses que são necessários independete da aplicação web.
sudo apt -y install software-properties-common curl apt-transport-https ca-certificates gnupg
Para aplicações em php eu gosto de instalar todas as dependências do php, para evitar erros em aplicações conhecidas.
LC_ALL=C.UTF-8 add-apt-repository -y ppa:ondrej/php
sudo apt -y install php8.1 php8.1-{common,cli,gd,mysql,mbstring,bcmath,xml,fpm,curl,zip}
Como servidor web eu costumo usar muito o nginx, por ser uma plataforma mais estável e configurável.
sudo apt -y install nginx
Pronto, vamos agora configurar o nginx, primeiro vamos abrir a pasta /etc/nginx, dentro dela vamos configurar algumas coisas.
No arquivo nginx.conf
, eu costumo descomentar a seguinte linha
# server_tokens off;
Essa opção evita que a versão do nginx seja exposto, isso pode evitar alguns ataques em versões especifica, o ideal é sempre manter o nginx atualizado, mas com essa configuração ativa você dificulta a ação de ataques imediatos.
Vamos aos sites, saindo do arquivo nginx.conf
vamos a pasta /etc/nginx/sites-available/
Muinta gente comete o erro de configurar os sites na pasta /etc/nginx/sites-enabled/
Eu particulamente prefiro configurar na pasta sites-available
e depois linkar usando o comando ln
.
Assim facilita caso você precisa desativar uma aplicação especifica.
Então vamos criaru m novo arquivo na pasta /etc/nginx/sites-available/
, esse arquivo pode conter . conf no final ou não, exemplo: forum.conf
Então vamos lá.
Essa configuração eu costumo usar em sites com ssl.
Lembre-se de trocar o exemplo.com
para o seu domínio vinculado ao site.
server {
listen 80;
server_name exemplo.com;
return 301 https://$server_name$request_uri;
}
server {
set $domain exemplo.com;
listen 443 ssl;
server_name $domain;
#local onde os arquivos do site será lido
root /var/www/html;
index index.php index.html;
#logs
access_log /var/log/nginx/$domain-access.log;
error_log /var/log/nginx/$domain-error.log error;
client_max_body_size 100m;
client_body_timeout 120s;
sendfile off;
#ssl
ssl_certificate /etc/letsencrypt/live/$domain/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/$domain/privkey.pem;
#php
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param PHP_VALUE "upload_max_filesize = 100M \n post_max_size=100M";
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTP_PROXY "";
fastcgi_intercept_errors off;
fastcgi_buffer_size 16k;
fastcgi_buffers 4 16k;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
include /etc/nginx/fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
Essas configurações são para uma aplicação simples em php, lembrando que algumas aplicações podem exigir que você defina o index.php como arquivo central, ou seja caso ele n encontre o arquivo ele redireciona para o index.php, para isso basta adicionar a seguinte configuração.
location / {
try_files $uri $uri/ /index.php?$query_string;
}
Pronto, antes de habilitar essa aplicação vamos primeiro gerar um certificado ssl, para manter nosso site seguro.
Primeiro vamos nas configurações do nosso domínio e iremos apontar para o ip da nossa máquina/vps.
Após isso vamos instalar o certbot, atualmente o certbot é a melhor ferramenta para gerar um certificado fácil e rápido, e melhor, grátis, caso queira você pode usar sites de terceiros para gerenciar seus certificados, porém você precisará colocar em uma pasta separada, e mudar nas configurações.
Comando para instalar o certbot para o nginx.
sudo apt -y install certbot python3-certbot-nginx
Comando para gerar o certificado.
certbot certonly --nginx -d exemplo.com
Pronto, para habilitar o site só usar o comando ln, lembrando de mudar o nome forum.conf
para o nome do seu arquivo.
sudo ln -s /etc/nginx/sites-available/forum.conf /etc/nginx/sites-enabled/forum.conf
Agora só reiniciar o nginx.
sudo systemctl restart nginx
O nginx também tem uma opção de reload, para você aplicar as configurações sem que o servidor web fique offline desnecessáriamente.
sudo systemctl reload nginx