Tagubuntu

Acesso remoto ao MySQL – Access denied for user ‘root’@’localhost’

Estava testando o laravel homestead, e surgiu a necessidade de acessar o MySql a partir da minha máquina local. Quando tentei acessar utilizando o usuário e senha do banco apareceu o erro: ERRO 1045: ACCESS DENIED FOR USER: 'ROOT@LOCALHOST', mas, como vocês poderão ver, solucioná-lo é tão fácil quanto parece.

Como habilitar o acesso remoto MySQL

Acesso remoto ao MySQL do laravel homestead é desabilitado por padrão por razões de segurança. No entanto, pode haver momentos em que é necessário para habilitá-lo para fornecer acesso a partir de um local remoto ou simplesmente da sua máquina de desenvolvimento. Este artigo irá descrever o processo em detalhe, e é destinado a usuários familiarizados com SSH e MySQL.

Conecte-se ao servidor MySQL

O laravel homestead MySQL é acessado através de SSH. Uma vez que a conexão com o servidor foi realizado, um segundo comando fornece acesso ao servidor MySQL. O procedimento para estabelecer a ligação é como se segue:

Conecte-se ao servidor via SSH. Em seguida, conecte com o MySQL. Isso envolve a inserção do nome de usuário e senha dada especificamente para uso MySQL. O comando para iniciar a conexão é:

mysql -u root -p  

Digite a senha do MySQL quando solicitado. No caso do laravel homestead a senha é secret.

Habilitar acesso remoto ao MySQL de um IP externo

O comando a seguir irá permitir o acesso ao banco de dados MySQL a partir de um endereço IP remoto:

mysql> GRANT ALL PRIVILEGES ON *.* TO usuario@HOST IDENTIFIED BY 'senha';  

Substitua o usuario, o HOST e a senha nesse comando com os dados relevantes.
O HOST é um endereço de ip válido, por exemplo: 192.168.1.10
O usuário no laravel homestead é root e senha é secret

Habilitar acesso remoto ao MySQL de qualquer IP

Se um usuário está em um endereço IP dinâmico não será possível utilizar o método acima. Para fazer isso, use '%' no lugar do ip. Isso não é recomendado em ambientes de produção, porque é menos seguro, uma vez que permite que a conexão seja estabelecida de qualquer lugar.

mysql> GRANT ALL PRIVILEGES ON *.* TO usuario@'%' IDENTIFIED BY 'senha';  

Novamente, substitua o usuario e senha nesse comando com os dados relevantes.
O usuário no laravel homestead é root e senha é secret

Recarregar os Privilégios

Para que as novas permissões funcionem, após utilizar o grant para atribuir as permissões de acesso, é necessário recarregar os privilégios.

mysql> flush privileges;  

Agora você já pode conectar-se à seu mysql sem se deparar com o ERRO 1045: ACCESS DENIED FOR USER.

Até.

Como utilizar o gzip com mysql para importar/exportar backups

Se você está armazenando qualquer coisa em bancos de dados MySQL que você não quer perder, é muito importante fazer backups regulares de seus dados afim de evitar perda de dados. Este tutorial tem como objetivo mostrar como você pode fazer o backup e compactá-lo – bem como restaurá-lo – assim fica mais fácil movê-lo para um outro servidor.

Como fazer o backup do MySql

Como fazer backup de um único banco de dados:

Este exemplo tem um backup do banco de dados teste e gera a saída para o arquivo teste.sql

# mysqldump -u root -pSENHA teste > teste.sql

# mysqldump -u root -p[senha_de_root] [nome_do_banco] > nome_do_arquivo.sql

Como fazer backup de vários bancos de dados:

Por exemplo, se você quiser ter backup dos banco de dados producao e teste, executar o mysqldump como mostrado abaixo:

# mysqldump -u root -pSENHA --databases producao teste > producao_teste.sql

Você pode verificar se o arquivo gerado contém os dois bancos de dados utilizando o comando a seguir

# grep -i "Current database:" /tmp/producao_teste.sql
-- Current Database: `producao`
-- Current Database: `teste`

Como fazer backup de todos bancos de dados:

O exemplo a seguir faz uma cópia de segurança de todos os banco de dados da instância do MySQL.

# mysqldump -u root -pSENHA --all-databases > /tmp/todos_bancos.sql

Como fazer backup de uma tabela específica do banco de dados:

Neste exemplo, será feito o backup apenas da tabela clientes da base de dados teste.

# mysqldump -u root -pSENHA teste clientes > /tmp/teste_clientes.sql

Como exportar um banco de dados e compactar com Gzip

No exemplo a seguir, vamos fazer o backup do banco teste e em seguida redirecionar a saída para o gzip que vai compactá-lo para o arquivo teste.sql.gz

# mysqldump -u root -pSENHA teste | gzip > teste.sql.gz

Como restaurar o backup do MySql

Restaurar o banco de dados

Neste exemplo, para restaurar o banco teste, é necessário executar mysql com < como mostrado abaixo. Quando você estiver restaurando o backup em uma outra instância do banco de dados, certifique-se de criar o banco de dados teste – em nosso exemplo – antes de poder executar a restauração.

Para criar o banco você deve executar os seguintes comandos:

# mysql -u root -pSENHA

mysql> create database teste;  
Query OK, 1 row affected (0.06 sec)  

E, para efetuar a restauração

# mysql -u root -pSENHA teste < /tmp/teste.sql

# mysql -u root -p[root_password] [database_name] < arquivodebackup.sql

Como importar um banco de dados e compactado com Gzip

No exemplo a seguir, vamos descompactar o arquivo teste.sql.gz. e, redirecionar a saída para o mysql, definindo que a restauração do arquivo deve ser feita no banco teste.

gunzip < teste.sql.gz | mysql -u user -pSenha teste  

SQLSTATE[HY000]: General error: 29 File ‘file.csv’ not found (Errcode: 13)

O que é o AppArmor

O AppArmor permite que o administrador do sistema para associar a cada programa um perfil de segurança que restringe os recursos do programa.

Verificando se o AppArmor realmente é o problema

Atualemnte o Ubuntu vem com o AppArmor ativado e o perfil do MySQL pode estar sendo executado em modo forçado por padrão. Você pode verificar isso executando o comando sudo aa-status da seguinte forma:

$ sudo aa-status
apparmor module is loaded.  
5 profiles are loaded.  
5 profiles are in enforce mode.  
   /sbin/dhclient
   /usr/lib/NetworkManager/nm-dhcp-client.action
   /usr/lib/connman/scripts/dhclient-script
   /usr/sbin/mysqld
   /usr/sbin/tcpdump
0 profiles are in complain mode.  
2 processes have profiles defined.  
2 processes are in enforce mode.  
   /sbin/dhclient (1088) 
   /usr/sbin/mysqld (26214) 
0 processes are in complain mode.  
0 processes are unconfined but have a profile defined.  

Se o mysqld está incluído no modo forçado, então provavelemente você acabou de encontrar o culpado por negar a acesso e/ou gravação. As entradas também seriam escritas em seu log quando o AppArmor bloqueia as gravações e/ou acessos.

Como alterar o perfil do MySql para aceitar o acesso/gravação

O que você pode fazer é editar /etc/apparmor.d/usr.sbin.mysqld e adicionar o path de onde o arquivo se encontra ou onde deverá ser exportado, por exemplo: /data/ e /data/* perto da parte inferior da seguinte forma:

sudo vi /etc/apparmor.d/usr.sbin.mysqld  
/usr/sbin/mysqld {
...
/var/log/mysql/ r,
/var/log/mysql/* rw,
/var/run/mysqld/mysqld.pid w,
/var/run/mysqld/mysqld.sock w,
/data/ r,
/data/* rw,
}

Agora só resta reiniciar o AppArmor

$ sudo /etc/init.d/apparmor reload

Como configurar um servidor WEB com Ubuntu 14.04

Depois de criar uma VM com Ubuntu 14.04 no Azure, é hora de iniciar a instalação e configuração do mesmo, como esse será um servidor web vamos começar configurando o ssh, fail2ban e fazendo a instalação padrão do LAMP.

Antes de tudo

Antes de fazer qualquer outra coisa, é bom adquirir o hábito de atualizar os programas e também o sistema operacional:

$ sudo apt-get update
$ sudo apt-get upgrade -y

Configurando a Localidade (locale)

Se você não tem UTF-8 como sua localidade padrão, algumas coisas podem dar errado enquanto você configura seu sistema. Portanto, verifique a localidade em primeiro lugar:

# exibe o locale
locale -a  
# criaremos a localidade UTF-8 Inglês
sudo locale-gen en_US.UTF-8  
export LANG=en_US.UTF-8  
# caso existam outras localidades UTF-8 disponíveis, você pode simplesmente optar por utilizá-la.
# Por exemplo, 
export LANG=C.UTF-8  

Fazendo isso, você estará corrigindo e evitando problemas como:

UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0x* in position *: ordinal not in range(128)

Para finalizar, você deve criar o arquivo /etc/default/locale e inserir os valores:

$ sudo -s
touch /etc/default/locale  
echo LANG="en_US.UTF-8" > /etc/default/locale  
echo LANGUAGE="en_US:en" >> /etc/default/locale  

Configurando SSH

A primeira alteração que devemos fazer, é trocar porta padrão do ssh.

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.old  
sed 's/Port 22/Port 6543/' < /etc/ssh/sshd_config    >/etc/ssh/sshd_config.new  
mv /etc/ssh/sshd_config.new /etc/ssh/sshd_config  
service ssh restart  

Também é necessário verificar as configurações de PermitRootLogin e PermitEmptyPasswords.

grep "PermitRootLogin" /etc/ssh/sshd_config  

Deve retornar

PermitRootLogin no

grep "PermitEmptyPasswords" /etc/ssh/sshd_config  

Deve retornar

PermitEmptyPasswords no

Caso PermitRootLogin ou PermitEmptyPasswords retornem yes, basta entrar no seu editor de texto preferido e trocar para no. Após fazer essas alterações é necessário reiniciar o ssh.

sudo service ssh restart  

Liberando Endpoint no Azure

Após fazer essa alteração, não se esqueça de adicionar a porta 6543 no endpoint do azure, caso contrário, não será mais possível se conectar à sua VM.

Instalando e Configurando o Fail2Ban

Primeiro vamos instalar o Fail2Ban utilizando o comando abaixo

sudo apt-get -y install fail2ban  

Como você pode ver, a instalação é trivial. Agora podemos iniciar a configuração para nosso próprio uso.

Vamos editar o arquivo /etc/fail2ban/jail.local

e vamos deixá-lo da seguinte forma:

[DEFAULT]
ignoreip = 127.0.0.0/8  
bantime  = 1800  
findtime  = 1800  
maxretry = 5  
backend = gamin

[ssh]
enabled  = true  
port     = 6543  
filter   = sshd  
logpath  = /var/log/auth.log  
maxretry = 5

[vsftpd-notification]
enabled  = false  
filter   = vsftpd  
action   = sendmail-whois[name=VSFTPD, dest=adlersd@gmail.com]  
logpath  = /var/log/vsftpd.log  
maxretry = 5  
bantime  = 1800

[vsftpd-iptables]
enabled  = true  
filter   = vsftpd  
action   = iptables[name=VSFTPD, port=ftp, protocol=tcp]  
           sendmail-whois[name=VSFTPD, dest=adlersd@gmail.com]
logpath  = /var/log/vsftpd.log  
maxretry = 5  
bantime  = 1800  
failregex = vsftpd(?:\(pam_unix\))?(?:\[\d+\])?:.* authentication failure; .* rhost=<HOST>(?:\s+user=\S*)?\s*$  
\[.+\] FAIL LOGIN: Client "<HOST>"\s*$

Dessa maneira estaremos protegendo tanto nosso ssh na porta customizada(6543) como o servidor ftp, VSFTPD.

Finalmente, devemos reiniciar o fail2ban.

sudo service fail2ban restart  

Instalando e Configurando o LAMP

Vamos instalar o LAMP utilizando o tasksel, para instalá-lo basta utilizarmos o comando:

Feito isso, podemos prosseguir e instalar o LAMP, isso pode ser feito de duas maneiras utilizando o tasksel – podemos executar o comando sudo tasksel – e da maneira como vamos fazer nesse guia utilizando a sintaxe alternativa do tasksel.

Você pode instalar o LAMP em um único comando, usando o apt-get modo tasksel (não se esqueça do acento ^ no final):

sudo apt-get install lamp-server^  

Pronto, agora temos tudo o que vamos precisar para essa primeira parte.

Configurando o MySql

Primeiro, vamos reiniciar o serviço:

sudo service mysql restart  

Vamos iniciar as configurações:

sudo /usr/bin/mysql_secure_installation  

O prompt irá pedir a sua senha de root atual, porém, como acabamos de fazer a instalação, basta deixá-lo em branco pressionando enter.

Enter current password for root (enter for none):  
OK, successfully used password, moving on...  

Em seguida, a mensagem irá perguntar se você deseja definir uma senha de root. Vá em frente e escolha Y e siga as instruções.

By default, a MySQL installation has an anonymous user, allowing anyone  
to log into MySQL without having to have a user account created for  
them.  This is intended only for testing, and to make the installation  
go a bit smoother.  You should remove them before moving into a  
production environment.

Remove anonymous users? [Y/n] y  
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This  
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y  
... Success!

By default, MySQL comes with a database named 'test' that anyone can  
access.  This is also intended only for testing, and should be removed  
before moving into a production environment.

Remove test database and access to it? [Y/n] y  
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far  
will take effect immediately.

Reload privilege tables now? [Y/n] y  
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MySQL  
installation should now be secure.

Thanks for using MySQL!  

Agora, vamos criar um usuário:

Será necessário que você digite a senha que você definiu como senha de root para a sua instalação do MySql.

mysql -u root -p  
CREATE DATABASE novoBancoDeDados;  
CREATE USER novoUsuario@% IDENTIFIED BY 'novaSenha';  
GRANT ALL PRIVILEGES ON novoBancoDeDados.* TO novoUsuario@%;  
FLUSH PRIVILEGES;  
exit  

Configurando o Php

Nós precisamos fazer uma pequena mudança na configuração do php. Abra /etc/php.ini:

Encontre a linha, cgi.fix_pathinfo = 1, e mudar de 1 para 0.

cgi.fix_pathinfo=0  

Também pode ser necessário alterar os valores de algumas variáveis de ambiente.

date.timezone = America/Sao_Paulo  
short_open_tag = Off  
expose_php = off  
max_execution_time = 60  
memory_limit = 256M  
post_max_size = 128M  
upload_max_filesize = 128M  

Agora basta reiniciar o apache, para que as alterações entrem em vigor.

sudo service apache2 restart  

Como instalar o servidor FTP (vsftpd) no Ubuntu 14.04

Se você quiser configurar um servidor ftp seguro, eficiente e rápido, então você pode considerar instalar o vsftpd. É, provavelmente, o servidor FTP mais seguro e rápido para sistemas UNIX-like.

Por se pequeno para fins de velocidade e segurança, muitas configurações de FTP mais complicados são realizáveis com vsftpd. Por exemplo, é possível lidar com:

  • Configurações de IP virtuais
  • Os usuários virtuais
  • Operação independente ou inetd
  • Configuração poderosa por usuário
  • largura de banda
  • Per-source-IP configuração
  • Per-source-IP limites
  • IPv6
  • O suporte à criptografia SSL através da integração

Utilizando o passo a passo a seguir como guia para a sua configuração, você evita de se deparar com error como:

  • Error: The data connection could not be established: EHOSTUNREACH – No route to host
  • Error: Connection timed out
  • Error: Failed to retrieve directory listing

Instalando vsFTPd

  
sudo apt-get update  
sudo apt-get install vsftpd  

Configurando o vsFTPd

O servidor vai ser executado com privilégios mínimos de o usuário “nobody” e registro completo será ativado. Finalmente, vamos limitar clientes para os tempos de espera de ligação específicas e limitar os comandos que aceitará de todos os clientes FTP.

  
sudo vim /etc/vsftpd.conf  
  
#######################################################
###  vsftpd.conf   BEGIN
#######################################################
# manpage: http://vsftpd.beasts.org/vsftpd_conf.html
#
# Run in daemon mode
background=YES  
listen=YES  
#listen_address=111.111.111.111
#pasv_address=127.0.0.1
#
# The new highly restrictive seccomp filter sandbox
# If you see "OOPS: priv_sock_get_cmd" then disable seccomp
seccomp_sandbox=NO  
#
# User to run daemon as
#nopriv_user=_vsftpd
#ftp_username=_ftp
#
# Ftp ports
connect\_from\_port\_20=NO  
ftp\_data\_port=20  
listen_port=21  
pasv_enable=Yes  
pasv\_min\_port=7000  
pasv\_max\_port=7014  
pasv\_addr\_resolve=NO  
pasv_address=191.237.128.149  
pasv_promiscuous=NO  
port_enable=NO  
port_promiscuous=NO  
#
# SSL (force options for a SSL only server)
#ssl_enable=YES
#ssl_tlsv1=YES
#ssl_sslv2=NO
#ssl_sslv3=NO
#rsa_cert_file=/etc/ssl/private/vsftpd.pem
#allow_anon_ssl=YES
#force_anon_data_ssl=YES
#force_anon_logins_ssl=YES
#force_local_data_ssl=YES
#force_local_logins_ssl=YES
#
# Timeouts
connect_timeout=0  
data\_connection\_timeout=0  
idle\_session\_timeout=0  
#
# Information messages
#setproctitle_enable=YES
#banner_file=/etc/banner
dirmessage_enable=YES  
ftpd_banner=Teste ftp server  
#
# Access limits and controls
async\_abor\_enable=NO  
#cmds_allowed=ABOR,APPE,CWD,DELE,HELP,LIST,MDTM,MKD,NLST,PASS,PASV,PWD,QUIT,RETR,RMD,RNFR,RNTO,SIZE,STOR,TYPE,USER
#cmds_allowed=ABOR,CWD,DELE,LIST,MDTM,MKD,NLST,PASS,PASV,PWD,QUIT,RETR,RMD,RNFR,RNTO,SIZE,STOR,TYPE,USER,ACCT,APPE,CDUP,HELP,MODE,NOOP,REIN,STAT,STOU,STRU,SYST
delay\_successful\_login=1  
delete\_failed\_uploads=yes  
guest_enable=NO  
write_enable=YES  
max_clients=100  
max\_login\_fails=1  
max\_per\_ip=0  
pam\_service\_name=vsftpd  
allow\_writeable\_chroot=YES  
tcp_wrappers=NO  
hide_file={.*,*.mp3}  
deny_file={*.mp3}  
#
# Preferences
ascii\_upload\_enable=NO  
ascii\_download\_enable=NO  
hide_ids=YES  
ls\_recurse\_enable=NO  
use_localtime=NO  
#
# Allow anonymous FTP?
#anonymous_enable=YES
#anon_max_rate=0
#anon_mkdir_write_enable=NO
#anon_root=/disk01/ftp/
#anon_world_readable_only=YES
#anon_umask=0022
#anon_upload_enable=NO
#anon_other_write_enable=NO
#no_anon_password=NO
#
# Allow local user access?
local_enable=YES  
local\_max\_rate=0  
local_umask=0022  
chroot\_local\_user=YES  
check_shell=NO  
chmod_enable=NO  
secure\_chroot\_dir=/var/run/vsftpd/empty  
#userlist_enable=YES
userlist_deny=NO  
#userlist_file=/etc/vsftpd_users
#
# Logging
dual\_log\_enable=NO  
log\_ftp\_protocol=NO  
vsftpd\_log\_file=/var/log/vsftpd.log  
xferlog_enable=YES  
xferlog\_std\_format=NO  
xferlog_file=/var/log/xferlog  
#
# Passive

#
#######################################################
###  vsftpd.conf  END
#######################################################

Ativando o modo Passivo

Para isso nós reservar um intervalo de portas para usar em conexões FTP passivas. No exemplo abaixo, nós iremos utilizar o intervalo da porta 7000 até 7014. Normalmente é comum ser utilizado um range de portas bem maior, porém no quando você utiliza azure, existe uma limitação de 150 endpoints, por isso, vamos utilizar um range menor. Para ativar o modo passivo, será preciso editar o arquivo de configuração vsftpd.conf novamente:

  
sudo vi /etc/vsftpd.conf  

Adicionando as linhas abaixo:

  
pasv_enable=YES  
pasv\_min\_port=7000  
pasv\_max\_port=7014  
port_enable=YES  

Configurando o Firewall

Você vai precisar para ativar dois módulos do kernel para o iptables. Estes irão ligar o NAT (Network Address Translation) para FTP e rastreamento de conexão FTP. Como iptables / Netfilter é parte do kernel, precisamos usar modprobe para adicioná-los para a sessão atual, afinal você não vai querer reiniciar um servidor só por isso, e também fazer alterações em /etc/modules para que, caso seja necessário reiniciar o seu servidor mais tarde, os módulos sejam carregados durante a inicialização do mesmo.

Primeiro, nós deveremos utilizar o modprobe para usar esses dois módulos agora:

  
sudo modprobe ip_nat_ftp  
sudo modprobe ip_conntrack_ftp  

Em seguida, vamos modificar o arquivo de configuração /etc/modules assim os módulos deverão ser carregados na próxima reinicialização:

  
sudo vim /etc/modules  

Adicione as linhas:

  
ip\_nat\_ftp  
ip\_conntrack\_ftp  
  
sudo iptables -A INPUT -p tcp --destination-port 7000:7014 -j ACCEPT  

Adicionando usuários com acesso a pastas específicas

Pode ser necessário criar usuários com acesso a pastas específicas do seu servidor de FTP, para isso crie o usuário e atribua o home do mesmo para a pasta desejada.
Como meu servidor web está rodando nessa pasta estou adicionando o usuário para o grupo www-data

  
useradd -m usuarioEspecifico -s /usr/sbin/nologin -d /home/ftp/www/pasta/especifica/ -g www-data  

Garantindo permissão de escrita

Para garantir que o grupo possa escrever na pasta

  
sudo chmod go+rwx /home/ftp/www/pasta/especifica/  

Liberando as portas

Amazon EC2

Isto pode ser feito através do AWS Management Console (painel de controle web EC2 da Amazon), ou no seu próprio console:

ec2-authorize default -p 20-21
ec2-authorize default -p 7000-7014

Azure

É necessário adicionar as seguintes portas abertas no
EndPoint:
TCP 20-21
TCP 7000-7014

Reinicie o serviço vsftpd

Finalmente, você deve ter tudo que você precisa para se conectar via FTP no seu servidor:

  
sudo service vsftpd restart  

Como definir o fuso horário no Ubuntu

Uma das primeiras coisas que você deve fazer quando instala um servidor linux, é definir o fuso horário, afinal, é muito chato quando você tem que ir para o arquivo de log e encontrar todas as timestamps estão em UTC. Mas podemos definir o fuso horário do servidor para que quando seu SGBD cron e etc fiquem no mesmo horário em que o seu computador, tornando-os mais realistas.

Você pode verificar o fuso horário atual, apenas executando o comando:

  
$ date

Thu Dec 18 17:06:17 MST 2014

Para trocar a o fuso horário, basta executar o comando:

  
$ sudo dpkg-reconfigure tzdata

E selecionar o continente e o fuso horário que preferir.

Também não se esqueça de reiniciar cron, afinal, como ele não vai detectar a mudança do fuso horário ele continuará executando os seus agendamentos em UTC.

Gzip Requisições HTTP com NGINX

Se você utiliza já utiliza o Nginx, provavelmente você se importa com desempenho, e uma das maneiras mais fáceis de ganhar desempenho é compactar em Gzip as requisições HTTP. O Gzip pode não só aumentar o desempenho do seu site, como também economizar a banda.

Como o Gzip funciona

De uma forma bem simplificada, a compressão em gzip funciona, encontrando strings semelhantes dentro de um arquivo de texto, e substituindo aquelas strings temporariamente para fazer o tamanho total do arquivo menor. Esta forma de compressão é particularmente adequada para a web porque o HTML e CSS geralmente contém muitas strings repetidas, como espaços em branco, tags e definições de css.

Se você utiliza o Nginx no Linux, você, provavelmente já possui o gzip instalado.

Você pode adicionar essas diretivas no http, server ou ainda na location do seu arquivo de configuração do nginx, dependendo apenas das suas necessidades.

gzip on;  
gzip_proxied any;  
gzip_types text/plain text/css text/javascript text/xml application/xml application/xhtml+xml application/xml+rss;  
gzip_disable "MSIE [1-6].";  

Explicando as diretivas

gzip on; – Habilitamos a compressão Gzip.
gzipproxied any; – Aplica a compressão Gzip em todas as requisções. Você pode ver a lista com todos os parâmetros aqui – gzipproxied.
gziptypes text/plain text/css text/javascript text/xml application/xml application/xhtml+xml application/xml+rss; – Tipos de conteúdo que serão comprimidos com Gzip. Perceba que text/html já é habilitado por padrão, e irá gerar um aviso se você adicioná-lo aqui.
gzip*disable “MSIE [1-6].” – Serve para desabilitarmos a compressão com Gzip para as versões muito antigas do Internet Explorer.

Outras Configurações Gzip

Existem algumas outras configurações que podem ser utilizadas que não foram listadas acima. Ou seja, você pode personalizá-lo ainda mais. Eu não vejo qualquer razão para mudar estes dos valores padrão, mas acredito que valha a pena citá-los.

gzipcomplevel

Você pode aumentar o nível de compressão, pagando o preço do trabalho do servidor. O nível padrão é 1, que é o que a maioria das pessoas utilizam. É geralmente aceito que o aumento gzipcomplevel é um anti-pattern de desempenho, uma vez que leva mais tempo para comprimir do que a economia que será gerada por essa compressão extra.

gzipminlength

Com essa diretiva, você pode definir o tamanho mínimo do arquivo em bytes para que o mesmo seja comprimido utilizando Gzip. O valor padrão é de 20 bytes.

Se você quiser ler mais sobre Gzipping com o servidor nginx, recomendo a documentação oficial.

Redirecionamento 301 NGINX

Nginx é um grande servidor web, é também o servidor utilizado por este blog. Eu já utilizava o Nginx no meu ambiente de desenvolvimento e agora que eu resolvi mudar de vez da kinghost para a DigitalOcean, foi a chance que eu precisava para utilizá-lo também por aqui, para tal, eu tive que criar uma série de redirecionamentos tanto para melhorar a experiência do usuário evitando que os usuários fossem direcionados para páginas 404 quanto para indexação do motor de busca. Este post vai mostrar como criar alguns redirecionamentos 301 permanentes em seu arquivo de configuração Nginx.

Sempre que possível evite redirecionar páginas, mantendo as mesmas url’s quando você refaz um site. Mas se ainda assim você precisar redirecionar domínios, diretŕoios ou páginas em um servidor Nginx esse post vai te ajudar.

NGINX – Redirecionando Domínios

Para os sites novos, ter o www antes de seu domínio não é realmente necessário. Aqui está como redirecionar a versão www do seu site para a versão limpa, ou seja, a versão sem www.

Redirecionamento WWW para sem WWW


server   {
   server_name www.seudominio.eti.br;
   rewrite  ^/(.*)$  http://seudominio.eti.br/$1 permanent;
}

Redirecionamento sem WWW para WWW

Da mesma maneira, se o seu site já está publicado há bastante tempo, e utilizando a versão www, você pode ter certeza que os usuários serão redirecionados para a versão www.


server   {
   server_name seudominio.eti.br;
   rewrite  ^/(.*)$  http://www.seudominio.eti.br/$1 permanent;
}

NGINX Redirecionamento de Diretório

Pode ser necessário redirecionar todo um diretório de páginas para outro se você renomeá-lo. Caso você tenha que alterar a estrutura do site, possivelmente, você terá um conjunto desses em seu arquivo de configuração.

Essa diretiva vai dentro do bloco do servidor principal de seus sites de configuração NGINX.


if ( $request_filename ~ diretorio-antigo/.+ ) {
       rewrite ^(.*) http://seudominio.com/diretorio-novo/$1 permanent;
   }

if ( $request_filename ~ diretorio-antigo/.+ ) {
       rewrite ^(.*) http://seudominio.com/diretorio-novo/$1 permanent;
   }

Caso seja necessário, você pode simplesmente remover o diretório, dessa maneira:


if ( $request_filename ~ diretorio-antigo/.+ ) {
       rewrite ^(.*) http://seudominio.com/$1 permanent;
   }

Você pode reescrever a mesma regra acima, utilizando apenas uma linha, dessa forma:


location / {
    rewrite ^/diretorio-antigo/(.*) /$1 permanent;
}

NGINX Redirecionamento de Página

Quando você reconstruir um site, é comum para remover as páginas, ou renomeá-los. Se a página não tem links de outros sites, você não quer que os usuários que clicarem no link para terra em uma página de erro 404. A melhor coisa a fazer neste caso é enviar o usuário para a página seguinte mais útil.

Utilize essa diretriz no bloco de servidor para redireccionar páginas únicas.


if ( $request_filename ~ pagina-antiga/ ) {
      rewrite ^ http://seudominio.com/proxima-pagina/? permanent;
}

Você também pode utilizar o redirecionamento de página, para disponibilizar o arquivo robots.txt e o sitemap.xml.


location ~ ^/(sitemap.xml) {
    root /var/www/blog.adlerdias.eti.br/public;
}

location ~ ^/(robots.txt) {
    root /var/www/blog.adlerdias.eti.br/public;
}

abraço,
até a próxima

© 2017 Adler Dias

Theme by Anders NorénUp ↑