WordPress极简博客 WordPress极简博客
  • 新鲜事
  • 战疫情
  • UI素材
    • UI素材
    • 电商/节日
    • PPT
      • 节日庆典
      • 工作汇报
      • 商业计划书
    • word
      • 简历竞聘
      • 合同/公文
  • 创客头条
    • 音乐分享
    • 初创文章
    • 极客头条
    • 生活趣事
    • 生活日记
    • 防骗指南
  • 编程教学
    • API日记
    • Linux安全栏目
      • Linux运维安全汇总
      • DDOS攻击防护
      • XSS攻击防护
      • SQL安全防护
    • Python技术栏目
      • Python基础入门
      • Python基础结构
    • WordPress技术栏目
      • WP主题
      • WordPress技术教程
      • RIPRO主题美化
    • WordPress漏洞发布
    • 技术教程汇总
    • 严选源码
  • 专题
  • 基友
  • 隐私
  • 注册
    登录
立即登录
  • 首页
  • 云优化
  • 新疫情
  • 新鲜事
    • 热文
    • 极客
    • 生活
  • 技术篇
    • WP主题
    • 技术教程
    • Python入门
    • Python基础
  • 专题篇
  • 友链君
首页 技术教程(干货) 为Apache服务配置Nginx反向代理,实现WordPress缓存加速

为Apache服务配置Nginx反向代理,实现WordPress缓存加速

夏柔 3月 30, 2020

前言简介

Nginx与Apache都是非常优秀的WEB服务器,不过近年来 Nginx 越来越火,而 Apache 显得有些老态,特别是在高访问量的场景下, Nginx 的处理效率确实不俗。

如果出于某种原因仍然喜欢Apache,并且想加快WordPress网站的速度,则可以在Apache前面放置一个Nginx反向代理缓存解决方案。

本文介绍的方法中,Nginx反向代理缓存会在Apache前面运行,nginx侦听端口80,而Apache侦听端口8080,nginx将负责缓存它可以缓存的所有,同时将其他请求发送到Apache,由Apache处理PHP、MySQL或MariaDB。

为Apache服务配置Nginx反向代理,实现WordPress缓存加速-WordPress极简博客

注意:不教程不适应于WooCommerce。后续可能会发布适用于WooCommerce的Nginx代理缓存教程。如果您有什么好的建议,欢迎与我们联系。

Apache配置步骤

打开Apache端口文件:

sudo nano /etc/apache2/ports.conf
将端口更改为8080:
Listen 8080
打开Apache虚拟主机配置文件:
sudo nano /etc/apache2/sites-available/wordpress.conf
将Virtualhost端口更改为8080:
<VirtualHost *:8080>
Ctrl + X,Y + Enter保存
需要更改所有Apache虚拟主机侦听端口为8080。
在安装和配置nginx之后,Apache将重新启动。

安装Nginx

安装nginx和nginx-extras软件包获取ngx_cache_purge模块,这将比nginx代理缓存更方便管理。
sudo apt-get install nginx nginx-extras -y

配置nginx:

sudo nano /etc/nginx/sites-available/reverse
粘贴nginx配置,我们需要proxy_buffer在顶部防止发生此错误:
upstream sent too big header while reading response header from upstream errors with buffers
这是nginx代理缓存配置实例(不支持WooCommerce优化):
记住要更改Web.Server.IP服务器的IP地址。
# WP zhanzhangb nginx proxy cache

# Author Mike from https://www.zhanzhangb.com

#fix 504 gateway timeouts, can go in nginx.conf

proxy_connect_timeout       600;

proxy_send_timeout          600;

proxy_read_timeout          600;

send_timeout                600;

#set the location of the cached files, zone, name, size (1000 MB) and how long to cache for 600 minutes

proxy_cache_path  /var/run/proxy_cache levels=1:2 keys_zone=WORDPRESS-PROXY:10m max_size=1000m inactive=600m use_temp_path=off;

proxy_cache_key $scheme$host$request_uri;

#prevent header too large errors

proxy_buffers 256 16k;

proxy_buffer_size 32k;

#httpoxy exploit protection

proxy_set_header Proxy "";

# add forwarded for header

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;




server {

listen          80 default;

access_log /var/log/nginx/proxy-access.log;

error_log /var/log/nginx/proxy-error.log;

# show cache status and any skip cache reason

add_header WP-Zhanzhangb-Proxy-Cache $upstream_cache_status;

add_header Cache-BYPASS-Reason $skip_reason;




# define nginx variables

set $skip_cache 0;

set $skip_reason "";




# security for bypass so localhost can empty cache

if ($remote_addr ~ "^(127.0.0.1|Web.Server.IP)$") {

    set $bypass $http_secret_header;

}




# skip caching WordPress cookies

if ($http_cookie ~* "comment_author_|wordpress_(?!test_cookie)|wp-postpass_" ) {

    set $skip_cache 1;

    set $skip_reason Cookie;

}




# Don't cache URIs containing the following segments

if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|sitemap(_index)?.xml") {

    set $skip_cache 1;

    set $skip_reason URI;

}




location / {

proxy_set_header Host $host;

    # may need to comment out proxy_redirect if get login redirect loop

    proxy_redirect off;

    proxy_cache WORDPRESS-PROXY;

    proxy_cache_revalidate on;

    proxy_ignore_headers  Expires Cache-Control;

    proxy_cache_use_stale  error timeout invalid_header updating http_500 http_502 http_503 http_504;

    proxy_cache_bypass $skip_cache;

    proxy_no_cache $skip_cache;

    proxy_cache_valid 200 301 302 500m;

    proxy_cache_valid 404 1m;

    #can rename PURGE to whatever you want, should restrict it to backend server requests for security

    proxy_cache_purge PURGE from 127.0.0.1 Web.Server.IP;

    # pass requests onto your PHP backend

    proxy_pass  http://127.0.0.1:8080;

    }




# allows purging via special URL

location ~ /purge(/.*) {

    allow 127.0.0.1;

    allow Web.Server.IP;

    deny all;

    proxy_cache_purge WORDPRESS-PROXY $scheme$host$1;

    }

}
Ctrl + X,Y + Enter保存
Symlink用于WordPress虚拟主机的Nginx反向代理缓存,当重新启动Nginx后启用。
取消默认的Nginx虚拟主机:
unlink /etc/nginx/sites-enabled/default
重新启动Apache和Nginx:
sudo service apache2 restart

sudo service nginx restart
测试Nginx反向代理缓存
我们可以使用cURL来测试nginx反向代理是否缓存了WordPress网站。
安装cURL:
sudo apt-get install curl -y
已经安装了cURL,现在可以开始在Apache前面测试nginx反向代理
在Web服务器上使用SSH运行这些cURL命令。现在测试主页是否被反向代理缓存,-I参数可以从反向代理服务器获取响应头。
curl -I https://www.zhanzhangb.com/
这里的关键值是WP-Zhanzhangb-Proxy-Cache状态,已缓存的结果示例:
HTTP/1.1 200 OK

Server: nginx/1.8.1

Date: Wed, 30 Mar 2016 17:32:24 GMT

Content-Type: text/html; charset=UTF-8

Connection: keep-alive

Vary: Accept-Encoding

WP-Zhanzhangb-Proxy-Cache: HIT
如果未缓存则WP-Zhanzhangb-Proxy-Cache为MISS:
HTTP/1.1 200 OK

Server: nginx/1.8.1

Date: Wed, 30 Mar 2016 17:35:53 GMT

Content-Type: text/html; charset=UTF-8

Connection: keep-alive

Vary: Accept-Encoding

WP-Zhanzhangb-Proxy-Cache: MISS
注意:有时,可能需要两次对同一URL进行cURL获取HIT响应。
Nginx是如何存储缓存的

如果在proxy_cache_path文件夹中查找,则会看到一堆看似随机的字母和数字,这些字母和数字由levels=1:2决定。这看起来令人困惑,因为nginx将缓存存储为基于的URL的md5哈希值proxy_cache_key。我们在上面的配置中使用了$scheme$host$uri。

  • $scheme=http
  • $host=domain
  • $request_uri=URL

例如 https://www.zhanzhangb.com/contact-us 这个页面:

  • $scheme 是 https
  • $host 是 www.zhanzhangb.com
  • $request_uri 是 /contact-us

我们可以通过md5生成器来显示它:

echo https://www.zhanzhangb.com/contact-us | md5sum
将得到这个md5值:
5e23a4727f38b99583b20a8381670e0b

nginx基于proxy_cache_path levels=1:2 来创建文件目录结构 。

这里的 levels=1:2,1(代表 7)成为顶级目录, 2(代表b1)成为其子目录, md5哈希作为文件名,所以https://www.zhanzhangb.com/contact-us这个页面存储的路径为:

/var/run/proxy-cache/7/b1/5e23a4727f38b99583b20a8381670e0b
了解nginx缓存的工作原理,可帮助有选择地从反向代理缓存中删除项目。

清除Nginx反向代理缓存

清空整个nginx反向代理缓存
如果要清除整个缓存,则只需删除proxy-cache目录中的所有内容:
rm -R /var/run/proxy-cache/*
如果需要,还可以选择性的清除根据完整URL的MD5哈希值生成的特定文件夹和子目录中特定的文件。
如果要使用正则表达式(也称为通配符)清空缓存,则唯一的选择是使用nginx Plus,但这会花费很多钱。Nginx Plus开发团队非常清楚拥有一个高性能WordPress网站,高效与灵活的缓存是相当重要的,因此很多大公司愿意为此付费。
#wordpress美化
2956
等 2956 人赞过
J2dcg1.png
猜你喜欢
  • Nginx添加跨域限制规则
  • 使用测速脚本对国内Linux服务器进行测速
  • 域名爆破之自动化信息收集脚本
  • 利用免费接口实现国家开放大学刷网课脚本
  • RiProV2定制导航条
  • 判断是否在微信浏览器打开
  • 微信内自动播放音频非百度方案
  • 利用veImageX加速您的网站,想不快都难!
  • SWAPIDC减少注册信息及防刷注册量教学
  • Python实现定时发送每日早报及生活指数
30 12月, 2022
免费API新增一位初三的开发者支持!
夏柔
站长
夏山如碧 - 怀柔天下
1697
文章
25
评论
58145K
获赞
版权声明

文章采用创作共用版权 CC BY-NC-ND/2.5/CN 许可协议,与本站观点无关。

如果您认为本文侵犯了您的版权信息,请与我们联系修正或删除。
投诉邮箱wpsite@aliyun.com

栏目推荐
Python基础入门33
WordPress技术教程267
前沿技术情报所22
城市创新——新消费11
最近有哪些不可错过的热文23
程序员的养生之道0
节
春
  • 新鲜事
  • 疫情实况
  • UI素材
  • 技术教程
  • 音乐分享
  • 专题
  • 友情
  • 隐私
  • 云优化
Copyright © 2019-2025 WordPress极简博客. Designed by 夏柔. 辽公网安备21010502000474号 辽ICP备19017037号-2