Definições:

  • NGINX (Engine X) ⇒ Servidor WEB open source e proxy reverso para os protocolos HTTP, SMTP, POP3 e IMAP
  • PHP7 ⇒ Linguagem de programação adequada especialmente para o desenvolvimento web.
  • MariaDB ⇒ Servidor de banco de dados baseado no MYSQL.

Procedimentos:

 

Passo 1: Atualize os componentes do Ubuntu 16 (pacotes, kernel, patch de segurança):
sudo apt udpate
sudo apt upgrade -y
Passo 2 – Altere o nome do host da sua máquina caso necessário:

Você pode alterar o nome do host sem precisar reiniciar a máquina com o comando abaixo, para terminar o tutorial:

sudo hostname web.exemplo.com.br

Mas para que o mesmo permaneça fixo e necessário alterar os arquivos de hosts:

sudo nano /etc/hostname
sudo nano /etc/hosts
Passo 3 – Instale os seguintes utilitários, para facilitar o gerenciamento do servidor:
  • net-tools ⇒ Pacote que inclui ferramentas para controlar o sub-sistema de rede do kernel linux.
  • wget ⇒ Utilitário para recuperar arquivos da web.
  • curl ⇒ Ferramenta de linha de comando para transferir dados com sintaxe de URL.
sudo apt install net-tools wget curl bash-completion -y
Passo 4 – Instalação do servidor NGINX a partir do repositório oficial:
sudo apt install nginx -y

Poderá ser utilizado os comandos abaixo apara verificar se NGINX está escutando na porta 80. 

sudo netstat -tlpn

Poderá verifcar os status do daemon NGINX

sudo systemctl status nginx.service

Passo 5 – Ativando o protocolo HTTP/2.0 no nginx:
As versões mais recentes do NGINX já fornecem o protocolo HTTP/2.0, incorporado com no protocolo TSL/SSL, que pode ser usada para aumentar a velocidade de seu site.
Todos os navegadores modernos (Chrome, Firefox, Edget 14+) suportam este protocolo.
Para habilitar no NGINX é necessário algumas alterações no arquivo de configuração.
Faça um backup dos seus arquivos de configuração:
sudo cp /etc/nginx/sites-available/default{,.backup}
Crie um arquivo de configuração um novo arquivo de configuração para utilizar o protocolo TSL/SSL
sudo nano /etc/nginx/sites-available/default-ssl

server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
#server_name www.domain.tld;
server_name _;

root /var/www/html;

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

#SSL Certificates
ssl_certificate "/etc/nginx/ssl/cert.pem";
ssl_certificate_key "/etc/nginx/ssl/privekey.pem";
ssl_dhparam /etc/nginx/ssl/dhparam.pem;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;

ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

add_header Strict-Transport-Security "max-age=31536000;
#includeSubDomains"
always;

location / {
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$args $uri/ =404;
}

set $cache_uri $request_uri;

location ~ /.well-known {
allow all;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}

Passo 6 – Gerando as chaves TLS/SSL:

Crie um diretório onde serão armazenadas as chaves de segurança:

sudo mkdir /etc/nginx/ssl

Gere suas chaves de segurança

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/privekey.pem -out /etc/nginx/ssl/cert.pem

Gerando a criptografia troca de chaves de Diffie-Hellman, um pouco lento :), para a gerar:

sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
Passo 7 – Finalmente o próximo passo e habilitar sua configuração junto ao nginx:
sudo ln -s /etc/nginx/sites-available/default-ssl /etc/nginx/sites-enabled/

Teste a sintaxe dos arquivos de configuração para verificar se ficou tudo certo, caso contrário reveja os passos:

sudo nginx -t

Reinicie seu servidor web

sudo /etc/init.d/nginx restart

Verifique se o NGINX está escutando a porta 443.

Você poderá testar seu o protocolo HTTP/2.0 neste link.

Passo 8 – Instalação do PHP7:

Vamos instalar o php-fpm (FastCGI) a partir do repositório oficial

sudo apt install php7.0 php7.0-fpm php7.0-curl php7.0-gd -y

Você pode querer instalar alguns outros módulos para PHP, pois sua aplicação pode necessitar disso, exemplo caso queira utilizar o MYSQL com PHP é necessário instalar o modulo php7.0-mysql.

Você pode utilizar o comando apt search php7.0, para localizar os módulos que necessita, abaixo estamos instalando os módulos que precisamos:

sudo apt-get install php7.0-common php7.0-mysql php7.0-imap php7.0-cli php-pear php-auth php7.0-mcrypt mcrypt imagemagick php7.0-intl php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl php-imagick php-gettext php7.0-zip php7.0-mbstring -y

Verifique se existe o bloco de configuração abaixo no seu arquivo /etc/nginx/sites-available/default-ssl

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}

Abra o arquivo nano php.ini

e altere as seguintes linhas

sudo nano /etc/php/7.0/fpm/php.ini

; descomente esta linha e altere o valor
cgi.fix_pathinfo=0
;Você poderá encontrar os fusos horários disponíveis em (/usr/share/zoneinfo)
date.timezone="Brazil/East"

Reinicie seu serviço PHP
sudo /etc/init.d/php7.0-fpm restart
Passo 9 – Instalação MariaDB:

Finalmente por último para completar nosso servidor instalação do servidor de banco de dados MariaDB, utilizaremos o repositório oficial

sudo apt install mariadb-server mariadb-client -y

Por padrão uma conta de root ou com privilégios root pode acessar o banco de dados sem fornecer uma senha, podemos alterar isso para ele passe a exigir.

sudo mysql

MariaDB › use mysql;
MariaDB › update user set plugin='' where User='root';
MariaDB › flush privileges;
MariaDB › exit

Executaremos o script de segurança fornecido pelo pacote de instalação para proteger o MariaDB e alterar a senha de root

sudo mysql_secure_installation

Enter current password for root (enter for none): ⇒ pressionar enter
Set root password? [Y/n] ⇒ y
New password:⇒ Digite a nova senha root aqui
Re-enter new password: ⇒ Repetir a senha root
Remove anonymous users? [Y/n] ⇒ y
Disallow root login remotely? [Y/n] ⇒ y
Reload privilege tables now? [Y/n] ⇒ y

mysql -uroot -p -e 'show databases'

Pronto, agora temos instalado um servidor web NGINX, um servidor de banco de dados MariaDB e linguagem para programação PHP, agora podemos criar nossos sites dinâmicos ou aplicativos para os visitantes.