最新公告
  • 欢迎您光临源库坊,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • 为Apache服务配置Nginx反向代理,实现WordPress缓存加速

    前言简介

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

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

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

    注意:不教程不适应于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网站,高效与灵活的缓存是相当重要的,因此很多大公司愿意为此付费。

    1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
    2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
    3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
    4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
    5. 如有链接无法下载、失效或广告,请联系管理员处理!
    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    7. 如遇到加密压缩包,默认解压密码为"www.yuankufang.com",如遇到无法解压的请联系管理员!
    源库坊 » 为Apache服务配置Nginx反向代理,实现WordPress缓存加速

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    源库坊
    一个高级程序员模板开发平台
    • 353会员总数(位)
    • 1198资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 1492稳定运行(天)

    提供最优质的资源集合

    赞助本站svip 了解详情