No processo de utilização do WordPress para construir um site, muitos “desvios” foram feitos para otimizar o desempenho do WordPress e acelerar o acesso ao site. Quando o acesso ao site é lento e a memória da CPU se esgota, a primeira coisa que penso é atualizar a configuração do servidor. Mais tarde, descobri que alguns comerciantes VPS inescrupulosos restringem severamente os recursos nos bastidores e é realmente prejudicial pagar mais. atualizar.
A maior experiência é que, com a mesma configuração, executo o mesmo site de diferentes comerciantes VPS. Sob as mesmas condições de tráfego, um está tranquilo e o outro está travado. Você deve comparar cuidadosamente as avaliações de outras pessoas, especialmente as avaliações de desempenho dos hosts VPS, caso contrário, você gastará muito dinheiro facilmente.
Mais tarde, ao otimizar o WordPress, concentrei-me no cache de páginas. Os plug-ins de cache que usei antes incluem, mas não estão limitados a, WordPress Super Cache, WP Fastest Cache, W3 Total Cache, cos-html-cache, Cachify... Em geral. , eu instalei o cache do plug-in ainda é eficaz para acelerar, mas também traz muitos problemas.
Por exemplo, configurações complexas, regras geradas, conflitos de plug-ins e incapacidade de lidar com tráfego repentino, o que significa que o uso de plug-ins de cache ainda não consegue lidar com o impacto de um grande tráfego. Por fim, por recomendação de um amigo, habilitei o cache Nginx fastcgi_cache e usei diretamente o Nginx para gerar cache para a página. A eficiência é muito maior do que usar o plug-in de cache PHP, que é especialmente adequado para uso em VPS com pequeno porte. configurações.
Para mais artigos de experiência sobre WordPress e otimização de servidor, aqui estão:
- O processo de experiência de otimização php-fpm do Linux ocupa muita memória e não libera problemas de memória
- WordPress adiciona exemplos de produção de botão de recompensa Alipay, WeChat e link de recompensa Paypal.me
- Linux Crontab comando tarefa agendada sintaxe básica e tutorial de operação-VPS/Server Automation
PS: Atualizado em 19 de dezembro de 2018, A pesquisa no site que vem com o WordPress não é apenas lenta, mas também não pode pesquisar mais palavras-chave. Podemos criar uma nós mesmos ou usar uma pesquisa de terceiros para incorporar. no WP: Pesquisa de site aprimorada - Baidu, pesquisa personalizada do Google e pesquisa autoconstruída do Elasticsearch.
PS: Atualizado em 29 de setembro de 2019, Devido ao artefato de otimização de servidor ngx_pagespeed desenvolvido pelo Google, ele integra um conjunto completo de ferramentas de otimização, como carregamento atrasado de imagem, webp adaptativo, otimização JS e CSS e imagem otimização: o artefato de otimização do servidor PageSpeed-Nginx implanta o módulo ngx_pagespeed e experimenta efeitos acelerados.
1. Instale o módulo Nginx ngx_cache_purge
local na rede Internet:
- HTTP://labs.Frick.com/files/
1.1 LNMP
Se você estiver usando o pacote de instalação de um clique LNMP, edite o arquivo lnmp.conf no diretório do pacote de instalação lnmp, adicione –add-module=/root/ngx_cache_purge-2.3 entre aspas simples de Nginx_Modules_Options=" , salve e atualizar o nginx é instalado com um clique, e outros módulos também podem consultar isso.
ngx_cache_purge-2.3 requer que você baixe o pacote de instalação do site oficial frickle.com e descompacte-o. A versão mais recente é 2.3.
1.2 Oneinstack
Se estiver usando o painel OneinStack, você pode compilar o módulo ngx_cache_purge com o seguinte comando.
# nginx -V 2>&1 | grep -o ngx_cache_purge 查看ngx_cache_purge是否安装,没有数据表示未安装 cd /root/oneinstack/src wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz tar xzf ngx_cache_purge-2.3.tar.gz #以下几个安装包都是Oneinstack自带的,不同的版本可能会不同,请根据情况调整 tar xzf nginx-1.14.0.tar.gz tar xzf pcre-8.42.tar.gz tar xzf openssl-1.0.2o.tar.gz cd /root/oneinstack/src/nginx-1.14.0 nginx -V #查看nginx编译参数,最后加上--add-module=../ngx_cache_purge-2.3 ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-http_v2_module --with-http_ssl_module --with-http_gzip_static_module --with-http_realip_module --with-http_flv_module --with-http_mp4_module --with-openssl=../openssl-1.0.2o --with-pcre=../pcre-8.42 --with-pcre-jit --with-ld-opt=-ljemalloc --add-module=../ngx_cache_purge-2.3 make #编译 mv /usr/local/nginx/sbin/nginx{,_`date +%F`} #备份nginx cp objs/nginx /usr/local/nginx/sbin nginx -V 2>&1 | grep -o ngx_cache_purge # 显示ngx_cache_purge表示已经安装成功
Ao usar Nginx -V
para visualizar parâmetros de compilação e adicionar add-module, certifique-se de operar de acordo com seus próprios parâmetros de compilação Nginx, ou seja, mantenha os parâmetros originais do Nginx e adicione add-module. Por exemplo o meu:
2. Nginx permite cache fastcgi_cache - exemplo de configuração
2.1 Exemplo de configuração
Abaixo, posto diretamente um exemplo do Nginx do wzfou.com habilitando a configuração do cache fastcgi_cache. As instruções detalhadas são as seguintes:
#路径需要提前创建好 fastcgi_cache_path /tmp/nginx-cache levels=1:2 keys_zone=WORDPRESS:250m inactive=1d max_size=500m; fastcgi_temp_path /tmp/nginx-cache/temp; fastcgi_cache_key "$scheme$request_method$host$request_uri"; fastcgi_cache_use_stale error timeout invalid_header http_500; #忽略一切nocache申明,避免不缓存伪静态等 fastcgi_ignore_headers Cache-Control Expires Set-Cookie; server { listen 80; listen 443 ssl http2; …………………此部省略…………………… set $skip_cache 0; #post访问不缓存 if ($request_method = POST) { set $skip_cache 1; } #动态查询不缓存 if ($query_string != "") { set $skip_cache 1; } #后台等特定页面不缓存(其他需求请自行添加即可) if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|/zhuye/|/wzfou.com/||/question/|/bbs/|/dongtai/|/haoyou/|/qun/|index.php|sitemap(_index)?.xml") { set $skip_cache 1; } #对登录用户、评论过的用户不展示缓存 if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") { set $skip_cache 1; } #这里请参考你网站之前的配置,特别是sock的路径,弄错了就502了! location ~ [^/].php(/|$) { #fastcgi_pass remote_php_ip:9000; fastcgi_pass unix:/dev/shm/php-cgi.sock; fastcgi_index index.php; include fastcgi.conf; add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"; #新增的缓存规则 fastcgi_cache_bypass $skip_cache; fastcgi_no_cache $skip_cache; add_header X-Cache "$upstream_cache_status From $host"; add_header Cache-Control max-age=0; add_header Nginx-Cache "$upstream_cache_status"; add_header Last-Modified $date_gmt; add_header X-Frame-Options SAMEORIGIN; # 只允许本站用 frame 来嵌套 add_header X-Content-Type-Options nosniff; # 禁止嗅探文件类型 add_header X-XSS-Protection "1; mode=block"; # XSS 保护 etag on; fastcgi_cache WORDPRESS; fastcgi_cache_valid 200 301 302 1d; } #缓存清理配置(可选) location ~ /purge( /.*) { #为防止转义,请去掉{ /之间的空格 allow 127.0.0.1; #此处填写你的服务器IP allow 89.208.xxx.xxx; deny all; #请注意此处的WORDPRESS要与上面的keys_zone保持一致 fastcgi_cache_purge WORDPRESS "$scheme$request_method$host$1"; } …………………此部分省略…………………… }
2.2 Instruções
Local ou memória? Em fastcgi_cache_path e fastcgi_temp_path, alguém sugeriria configurá-lo para o caminho da memória, por exemplo: /dev/shm/nginx-cachelevels=1:2 keys_zone=WORDPRESS:100m inactive=60m;
, se seu If o IO do disco é muito lento, é recomendado usar este método. Afinal, a velocidade de leitura e gravação da memória é muito rápida.
add_header Cache-Control
Se o conteúdo dinâmico precisar ser atualizado em tempo real, ele pode ser definido como 0, caso contrário, o tempo pode ser definido por mais tempo.
3. Instale o plug-in Nginx Helper - atualize o cache automaticamente
Através do método acima, configuramos o cache fastcgi_cache. Em seguida, temos que resolver o problema de atualização automática da página de cache do Nginx quando o WordPress tem novos comentários e novos artigos. Procure diretamente o plug-in Nginx Helper para baixar, configure-o, primeiro habilite-o e selecione os arquivos locais como método de limpeza.
O plug-in também fornece outras configurações, como atualizar o cache do Nginx ao publicar novos artigos e novos comentários.
Como o caminho do cache definido pelo autor do plug-in é /var/run/nginx-cache, e podemos personalizar o caminho do cache de acordo com a situação real do servidor, a diferença no caminho do cache fará com que o plug-in não conseguir encontrar o arquivo de cache e excluí-lo!
A solução é adicionar o seguinte código ao wp-config.php no diretório raiz do WordPress:
//根据实际情况定义缓存的存放路径 define( 'RT_WP_NGINX_HELPER_CACHE_PATH','/tmp/wpcache');
Se você achar que o código que define o caminho acima não funciona, você pode seguir o conselho do blogueiro "natural":
A primeira é modificar o plug-in e alterar o caminho do plug-in para o seu próprio. A segunda é usar links virtuais, /var/run/nginxcache e /tmp/wpcache.
3. Visualização do efeito Nginx fastcgi_cache
Depois de habilitar o Nginx fastcgi_cache, podemos ver que ele foi atingido nas informações do cabeçalho do navegador.
Para páginas que foram configuradas para não serem armazenadas em cache, o Nginx fastcgi_cache exibirá diretamente BYPASS.
Além disso, o Nginx fastcgi_cache também irá BYPASS diretamente para usuários que fizeram login e usuários que postaram comentários.
Ao mesmo tempo, o arquivo de cache gerado pelo Nginx fastcgi_cache também pode ser visto no caminho do cache do nosso servidor.
Se você descobrir que os usuários que comentaram sobre você ainda estão usando cache, o WP não se lembra dos cookies. Basta adicionar o seguinte código a functions.php
.
add_action('set_comment_cookies','coffin_set_cookies',10,3); function coffin_set_cookies( $comment, $user, $cookies_consent){ $cookies_consent = true; wp_set_comment_cookies($comment, $user, $cookies_consent); }
4. Resumo
Habilitar o cache fastcgi_cache no Nginx é muito importante para acelerar a velocidade de resposta da página da web e economizar recursos do servidor. A imagem a seguir é o resultado do teste do alibabacloud.com.
Quando wzfou.com escava o site para habilitar o cache fastcgi_cache, descobre que as informações de Cache-Control são adicionadas ao arquivo de configuração Nginx, mas nem sempre têm efeito. As informações do cabeçalho HTTP sempre conterão as seguintes informações:
Cache-Control: no-store,no-cache,must-revalidate,post-check=0,pre-check=0 e Pragma: no-cache,
Após investigação, o problema está na parte de configuração do PHP.ini de session.cache_limiter
nos pacotes de um clique LNMP e Oneinstack. O valor padrão é nocache e precisamos defini-lo como nenhum.