Como Otimizar o Apache no CentOS 7 com CentOS WebPanel

O Apache é um servidor web de código aberto poderoso, projetado para fornecer um equilíbrio de flexibilidade, portabilidade e desempenho. A otimização do Apache é uma tarefa importante para todo administrador de sistema.

Personalizando algumas configurações do Apache, é possível melhorar o desempenho sem adicionar hardware adicional, como RAM, CPU, etc.

Este post descreve várias opções de configuração do Apache que podem ser usadas para melhorar o desempenho do Apache sem adicionar recursos de hardware adicionais ao seu servidor.

Estas sugestões de configuração podem ser aplicadas a qualquer servidor executando o Apache 2.xx. Para simplificar a explicação, abaixo vamos abordar um servidor CentOS 7 com o Painel CentOS Web Panel .

Se não sabe onde está o httpd.conf de seu servidor web, sugiro utilizar o comando Locate. Veja Como instalar o Locate.

No CentOS 7 com Painel CentOS WebPanel edite o arquivo httpd.conf .

Nota: Caso não encontre as opções abaixo, você pode seguramente adicionar os valores após a ultima linha do seu arquivo httpd.conf

nano /usr/local/apache/conf/httpd.conf

MaxKeepAliveRequests

MaxKeepAliveRequests é o número máximo de solicitações a serem atendidas em uma conexão TCP. Esta função limita o número de solicitações permitidas por conexão. Se estiver definido como 0 (ou não definidas no arquivo), serão permitidas solicitações ilimitadas.

Mantenha essa configuração com um valor alto para o desempenho máximo do servidor.

O valor recomendado de MaxKeepAliveRequests é 500.

MaxKeepAliveRequests 500

KeepAliveTimeout

KeepAliveTimeout define o número de segundos que o Apache irá aguardar pela nova solicitação do cliente conectado, antes de fechar a conexão. (Uma vez que o servidor recebe uma requisição, a diretiva Timeout se aplica.)

O KeepAliveTimeout recomendado pode estar entre 1 a 5.

KeepAliveTimeout 5

KeepAlive

KeepAlive define se o servidor permite mais de uma solicitação por conexão. Ele pode ser usado para impedir que qualquer cliente consuma muitos dos recursos do servidor.

Por padrão, o KeepAlive está desabilitado no CentOS 7.
Uma vez que o servidor Apache está recebendo solicitações de centenas e milhares de IPs de uma só vez, essa configuração deve estar ativada.

KeepAlive On

DNS Lookups

Um grande motivo para a lentidão do servidor web Apache é o tempo necessário para realizar pesquisas de DNS. Se a opção HostnameLookups estiver on, o Apache tentará registrar o nome completo do host de cada conexão do cliente de entrada no arquivo access.log. Resolver cada nome irá demandar um pedaço significativo de tempo.

Por padrão, HostnameLookups está desativado no Apache. De qualquer forma utilize

HostnameLookups Off

Configurando MPM Prefork

O módulo MPM (Módulo de Multi-Processamento) implementa um servidor web sem encadeamento e pré-bifurcado. O Apache trabalha como padrão com o MPM Prefork. Existem ainda outros MPM como ITK , WORKER, EVENT que não iremos abordar neste post. O MPM Prefork é o mais utilizados por SysAdmins por conta de sua compatibilidade com os mais diversos hardwares, sistemas e eslabilidade.

Abaixo vamos abordar como melhorar o desempenho do Apache utilizando o módulo Apache MPM Prefork e explicar cada uma das opções:

Se você utiliza o Apache com o CentOS 7 e CentOS Web Panel, edite o arquivo httpd.conf

nano /usr/local/apache/conf/httpd.conf

localize e descomente a linha abaixo de “Server-pool management (MPM specific)” removendo o # :

Include conf/extra/httpd-mpm.conf

Agora vamos editar o arquivo httpd-mpm.conf. Porém, antes de fazer alterações, recomendo fazer um backup do arquivo:

cp /usr/local/apache/conf/extra/httpd-mpm.conf /usr/local/apache/conf/extra/httpd-mpm.conf.backup

Edite o arquivo httpd-mpm.conf , localize e substitua os valores dentro de “IfModule mpm_prefork_module

    StartServers             5
    MinSpareServers          5
    MaxSpareServers         10
    MaxRequestWorkers      150
    MaxConnectionsPerChild 3000

StartServers: define o número de processos do servidor filho, criados na inicialização. É uma boa ideia aumentar esse número em um servidor de alta carga, para que o servidor esteja pronto para lidar com muitas conexões.

MinSpareServers: define o número mínimo de processos do servidor filho ocioso. Esse valor precisará ser ajustado para servidores de alta carga.

MaxSpareServers: define o número máximo de processos do servidor filho ocioso. Quando houver mais processos do servidor filho ociosos do que os definidos pelo MaxSpareServers, o processo ocioso será eliminado.

MaxRequestWorkers: define o número máximo de solicitações simultâneas que o Apache irá tratar. Quando esse limite for atingido, qualquer outra tentativa de conexão será enfileirada.

Nota: Talvez o item de hardware mais crítico a ser levado em consideração seja a quantidade de RAM alocada para cada processo do Apache. Embora não seja possível controlar o uso diretamente, você pode restringir o número de processos filho por meio da diretiva MaxRequestWorkers (anteriormente conhecida como MaxClients no Apache 2.2), o que colocará limites no uso da RAM pelo Apache.

MaxRequestsPerChild: esta diretiva define quantas solicitações um processo filho manipulará antes de finalizar. Quando o limite for atingido, o processo filho morrerá.

Nota: Se este valor for 0, o processo nunca morrerá, obviamente consumindo mais recurso do servidor.

Conclusão

Configura o Apache para o máximo desempenho é muito fácil. Porém em servidores com alto tráfego seja necessário otimizar as configurações aqui tratadas.

Você pode experimentar as várias opções disponíveis e medir o desempenho do servidor da Web com ferramentas como ab e httperf.

Please follow and like us:

Teste a velocidade da internet do servidor via linha de comando com speedtest-cli

O speedtest-cli é uma ferramenta de linha de comando útil para administradores em servidores Linux testarem rapidamente a largura de banda, ping e outras informações. Este utilitário mantido pela Speedtest.net nos permite obter informações valiosas sobre o que está sendo oferecido pelo provedor de seu servidor linux.

Abaixo vamos abordar a instalação no CentOS/RedHat , Ubuntu/Debian e a forma manual que servirá para qualquer outra Distribuição Linux.

CentOS/RedHat

Instale o repositório Epel release

yum install epel-release -y

Instale python e python-pip

yum install python python-pip -y
pip install --upgrade pip

Instale o Speedtest-cli via pip

pip install speedtest-cli

Ubuntu

Primeiro atualize os packages do servidor

apt-get update

Instale python e python-pip

apt-get install python python-pip
pip install --upgrade pip

Instale o Speedtest-cli via pip

pip install speedtest-cli

Todas as outras Distribuições Linux/UNIX

Certifique-se que o pacote do python esteja instalado em sua distribuição linux

Faça o download do speedtest-cli

wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py

Corrija as permissões para execução

chmod +x speedtest-cli

Para executar o teste basta digitar :

./speedtest-cli
OU
python speedtest-cli

Exemplo de comandos para speedtest-cli

Execute o comando abaixo para o iniciar o teste de velocidade

speedtest-cli

Exemplo do teste

[root@gerenciandosrv~]# speedtest-cli
Retrieving speedtest.net configuration...
Testing from Multacom Corporation (173.82.115.74)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by Race Communications (Los Angeles, CA) [43.51 km]: 6.215 ms
Testing download speed................................................................................
Download: 424.74 Mbit/s
Testing upload speed................................................................................................
Upload: 250.89 Mbit/s

Para executar o teste e gerar o link do Speedtest com o resultado utlize

speedtest-cli --share

[root@gerenciandosrv ~]# speedtest-cli --share
Retrieving speedtest.net configuration...
Testing from Multacom Corporation (173.82.115.74)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by Race Communications (Los Angeles, CA) [43.51 km]: 14.157 ms
Testing download speed................................................................................
Download: 408.38 Mbit/s
Testing upload speed................................................................................................
Upload: 157.05 Mbit/s
Share results: http://www.speedtest.net/result/7978047284.png

Abaixo segue a imagem do meu teste de velocidade

Please follow and like us:

Como habilitar HTTP/2 com nginx

Nginx com http/2

O HTTP/2 torna nossas aplicações web mais rápidas, simples e robustas. O http2 abre uma série de novas oportunidades para otimizar nossas aplicações e melhorar o desempenho.

O principal objetivo do http/2 é reduzir a latência permitindo a multiplexação total de solicitações e respostas, minimizando a sobrecarga de protocolos por meio de compactação eficiente do http header, além de adicionar suporte para a priorização de solicitações e envio de dados aos servidores. Existem ainda um grande suporte de outros aprimoramentos de protocolo, como novos mecanismos de controle de fluxo, tratamento de erros e atualização, mas os recursos descritos acima são os mais importantes .

 

Mãos a obra

Notas – Antes de começar:

  • Certifique-se que você tenha instalado em seu domínio um certificado ssl válido. http/2 somente funciona com HTTPS
  • Este passo a passo foi escrito utilizando um servidor com Painel CWP Pro (CentOS Web Panel) e CentOS 6, porém, já foi testado no CentOS 7, com ou sem Painel de controle   (foram necessárias apenas algumas adaptações lógicas).

– Acesse o SSH de seu servidor como root

Atualizando os packs do OS para a última versão


yum clean all
yum -y update

Atualizando Autoconf:


cd /usr/local/src
rm -rf autoconf-*
wget https://ftp.gnu.org/gnu/autoconf/autoconf-latest.tar.gz
tar zxvf autoconf-latest.tar.gz
cd autoconf-*
./configure --prefix=/usr
make && make install

Atualizando Openssl:


cd /usr/local/src
rm -rf openssl-*
wget https://www.openssl.org/source/openssl-1.0.2q.tar.gz
tar zxvf openssl-1.0.2q.tar.gz
cd openssl-*
./config --prefix=/usr --openssldir=/usr/lib64 shared
make && make install

Instalando Nghttp2:


cd /usr/local/src
rm -rf nghttp2-* yum install libtool -y wget https://github.com/nghttp2/nghttp2/releases/download/v1.35.1/nghttp2-1.35.1.tar.gz tar zxvf nghttp2-1.35.1.tar.gz cd nghttp2-* ./configure --prefix=/usr make && make install

Acesse o diretório de configuração do nginx


cd /etc/nginx/conf.d/vhosts/

Edite o arquivo “seudodominio_ssl.conf”


nano seudodominio_ssl.conf

Localize:


server {
listen xxx.xx.xxx.xx:443;

xxx é apenas um exemplo. não altere o ip

Adicione após “:443” ssl http2


server {
listen xxx.xx.xxx.xx:443 ssl http2;

Salve e saia do editor nano ( “ctrl+x “ e “y” )

Reiniciei o nginx


service nginx restart

Agora, vamos verificar se está tudo certo, acesse https://tools.keycdn.com/http2-test
digite a url de seu site para verificar se o HTTP/2 está ativo

 

 

 

 

 

Please follow and like us:

Como instalar e configurar, Linux, Nginx, MySQL, PHP 7 no CentOS 7 (LEMP)

LEMP - Linux, Nginx, Mysql, PHP

LEMP é um grupo de Software Livre. A sigla LEMP significa Linux, Nginx (pronuncia-se Engine x), MySQL e PHP .

Nginx é um software de servidor Web de código aberto robusto, pequeno, de alto desempenho, servidor proxy reverso e também servidor proxy de E-mail.
Os dados do site serão armazenados em um banco de dados MySQL (usando MariaDB) e o conteúdo dinâmico será processado pelo PHP 7.

O Pré Requisito para continuar com esse tutorial é que você já tenha o Linux CentOS 7 instalado.

Primeiro passo – Instalar o Nginx

No CentOS o Nginx não está disponível no repositório padrão. Vamos adicionar o repositório EPEL para que possamos instalar o Nginx através do yum.

yum install epel-release

Com o repositório EPEL instalado no servidor, vamos instalar o nginx

yum install nginx

Vamos iniciar o nginx

systemctl start nginx

Nós já podemos acessar utilizando o IP de seu servidor, a página “default” do nginx e certificar que tudo está ok. Caso não saiba ou tenha certeza de qual é o IP utilize:


ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

ou

curl http://icanhazip.com

Se está utilizando o CentOS 7, provavelmente precisará de uma nova regra ao Firewall padrão (firewalld), para permitir tráfego na porta 80.




Adicionando nova regra ao Firewalld

firewall-cmd --permanent --zone=public --add-service=http

ou

firewall-cmd --permanent --zone=public --add-port=80/tcp

Restart firewalld

systemctl restart firewalld.service

Abra seu Browser e acesse:


http://IP_do_Seu_Servidor

Você verá a página Default do NGINX, que é exibida para fins de informação e teste.

Página Default do NGINX
Página Default do NGINX

Segundo Passo – Instalar MySQL(MariaDB)

Agora que temos o servidor web NGINX instalado e configurado, vamos instalar o MariaDB, que irá armazenar e gerenciar os dados do site. O MariaDB é mantido pela comunidade de desenvolvedores originais do antigo e conhecido MySQL.

O MariaDB vem com repositórios padrão do CentOS, vamos utilizar o Yum para instalá-lo.

yum install mariadb-server mariadb

Vamos iniciar o MariaDB no servidor e habilitá-lo para iniciar automaticamente após o reboot.

systemctl start mariadb
systemctl enable mariadb

Com o MariaDB(MySQL) iniciado, precisamos executar um script de segurança que irá remover algumas configurações default e deixará nossa instalação mais segura.

mysql_secure_installation

A primeira opção irá perguntar qual é a senha do root para o MariaDB. Como acabamos de instalar o MariaDB, você deverá deixar esta opção em branco e pressionar enter para continuar. Na próxima questão será solicitado que digite uma senha para o root do MariaDB e confirme.

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

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

New password: password
Re-enter new password: password
Password updated successfully!
Reloading privilege tables..
 ... Success!

Para as outras questões digite Y.

Remove anonymous users? [Y/n] Y
...
Disallow root login remotely? [Y/n] Y
...
Remove test database and access to it? [Y/n] Y
...
Reload privilege tables now? [Y/n] Y

Teceiro Passo – Instalar o PHP 7


O PHP é o responsável em processar o código para exibir conteúdo dinâmico. Ele poderá executar scripts, conectar-se ao bancos de dados MySQL para obter informações e entregar o conteúdo processado ao seu servidor da Web para exibição.

O primeiro passo será instalar o repositório do CentOS que contém os pacotes de instalação do PHP 7.2

wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm
rpm -Uvh remi-release-7.rpm

Habilitar o repositório do php72:

yum install yum-utils -y
yum-config-manager --enable remi-php72

Instalar pacotes do PHP:

yum --enablerepo=remi,remi-php71 install php-fpm php-common

Instalando módulos comuns:

yum --enablerepo=remi,remi-php71 install php-opcache php-pecl-apcu php-cli php-pear php-pdo php-mysqlnd php-pgsql php-pecl-mongodb php-pecl-redis php-pecl-memcache php-pecl-memcached php-gd php-mbstring php-mcrypt php-xml

Configurando o processamento do PHP

Nós já temos agora, o php 7.2 e componentes instalados no servidor mas precisamos fazer algumas modificações para manter o servidor mais seguro.

Edite o arquivo principal de configuração do php:

nano /etc/php.ini

Vamos configurar o PHP para aceitar apenas URLs de arquivos que realmente existem no servidor. Isso atenua uma vulnerabilidade de segurança em que o interpretador PHP pode ser induzido a permitir a execução de código arbitrário se o arquivo .php solicitado não estiver presente no sistema de arquivos.

Localize cgi.fix_pathinfo altere para 0 , isso irá desabilitar essa função.Lembre-se de Remover o “;” antes do nome para descomentar essa função.

cgi.fix_pathinfo=0

Salve e saia do editor nano. ( ctrl+x , y)

Abra e edite o arquivo de configuração do php-fpm www.conf:

nano /etc/php-fpm.d/www.conf

Procure a linha “listen =” e modifique conforme abaixo:

listen = /var/run/php-fpm/php-fpm.sock

Localize listen.owner e listen.group . Descomente removendo o “;” antes das funções e altere para :

listen.owner = nginx
listen.group = nginx

Localize user e group. Altere os valores de apache para nginx

user = nginx
group = nginx

Salve e saia do editor nano. ( ctrl+x , y)

Agora, precisamos apenas iniciar nosso processador de PHP e habilitar para iniciar após o boot.

systemctl start php-fpm
systemctl enable php-fpm

Quarto Passo – Configurar Nginx para processar páginas PHP 7.2

Agora vamos criar um novo arquivo de configuração para o Nginx . Substitua em server_name “nome_dominio_ou_IP_do_Seu_Servidor” para o IP de seu servidor :

nano /etc/nginx/conf.d/default.conf

Insira o código abaixo:

server {
    listen       80;
    server_name  nome_dominio_ou_IP_do_Seu_Servidor;

    # note that these lines are originally from the "location /" block
    root   /usr/share/nginx/html;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Salve e saia do editor nano. ( ctrl+x , y)

Reinicie o nginx para que as modificações sejam carregadas.

systemctl restart nginx

Para Finalizar, vamos criar um arquivo de teste em php que trará informações sobre nosso servidor e php .

nano /usr/share/nginx/html/info.php

Insira o código:

phpinfo

Salve e saia do editor nano. ( ctrl+x , y) .

Agora acesse :

http://ip_do_seu_servidor/info.php
.

Será exibido uma página semelhante a :

PHP Info 7.2

Agora você tem o LEMP instalado e configurado em seu servidor da melhor forma possível. Com estas configurações você poderá hospedar em seu servidor os mais diversos sistemas, como por exemplo WordPress, Joomla, etc…

Espero que tenha gostado!

Please follow and like us: