Nginx   发布时间:2022-05-11  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了wordpress – Varnish nginx ssl woocommerce – wc-ajax表现不佳大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

所以我有点奇怪.我有一台运行Nginx,Varnish,php-fpm和wordpress / woocommerce的debian 9机器.该网站基本上有效,但我有一些奇怪的问题,添加到购物车.

测试环境为https://awstesTing.amr.com.au

具体来说,在主页上有“添加到购物车”按钮.在页面加载时,您可以添加2个不同的产品,但是如果您尝试使用第3个产品,它将使用502的ajax调用失败.

这是点击添加到购物车时的常规标题部分:

request URL: https://awstesTing.amr.com.au/?wc-ajax=add_to_cart
request Method: POST
Status Code: 502 
Remote Address: 13.236.17.191:443
Referrer Policy: no-referrer-when-downgrade

我现在将添加我的Varnish配置:(我正在使用Varnish 5.2)

vcl 4.0;

BACkend default {
        .host = "127.0.0.1";
        .port = "8080";
        .connect_timeout = 600s;
        .firsT_Byte_timeout = 600s;
        .between_bytes_timeout = 600s;
        .max_connections = 800;
}

acl purger {
        "localhost";
        "127.0.0.1";
}

sub vcl_recv {

    # pipe on weird http methods
    if (req.method !~ "^GET|HEAD|PUT|POST|TRACE|OPTIONS|deletE$") {
        return(pipE);
    }

    if (req.method != "GET" && req.method != "HEAD") {
        return(pass);
    }

    if (req.http.X-requested-With == "XMLhttprequest"){
      return (pass);
    }

    if (client.ip != "127.0.0.1" && req.http.host ~ "awstesTing.amr.com.au") {
            set req.http.x-redir = "https://awstesTing.amr.com.au" + req.url;
            return(synth(850,""));
    }

    if (req.method == "PURGE") {
            if (!client.ip ~ purger) {
                   return(synth(405,"This IP is not allowed to send PURGE requests."));
            }
            return (purgE);
    }

    set req.http.cookie = regsuball(req.http.cookie,"wp-setTings-\d+=[^;]+(; )?","");
    set req.http.cookie = regsuball(req.http.cookie,"wp-setTings-time-\d+=[^;]+(; )?","");

    # Unset Cookies except for wordpress admin and WooCommerce pages
    if (!(req.url ~ "(wp-login|wp-admin|cart|my-account/*|wc-api*|checkout|addons|logout|lost-password|product/*)")) {
        unset req.http.cookie;
    }

    # Pass through the WooCommerce dynamic pages
    if (req.url ~ "^/(cart|my-account/*|checkout|wc-api/*|addons|logout|lost-password|product/*)") {
        return (pass);
    }

    # Pass through the WooCommerce add to cart
    if (req.url ~ "\?add-to-cart=" ) {
        return (pass);
    }

    # Pass through the WooCommerce API
    if (req.url ~ "\?wc-api=" ) {
        return (pass);
    }

    if (req.http.cookie == "") {
           unset req.http.cookie;
    }

}

sub vcl_synth {
        if (resp.status == 850) {
                set resp.http.LOCATIOn = req.http.x-redir;
                set resp.status = 302;
                return (deliver);
        }
}

sub vcl_purge {
        set req.method = "GET";
        set req.http.X-Purger = "Purged";
        return (restart);
}



sub vcl_BACkend_response {

    if (beresp.status >= 300) {
        if (beresp.status == 500) {
            return (retry);
        }
        set beresp.uncacheable = true;
        set beresp.ttl = 2s;
    }
    else
{
        set beresp.ttl = 24h;
        set beresp.grace = 1h;
    }

    if (bereq.url !~ "wp-admin|wp-login|product|cart|checkout|my-account|/?remove_item=|/?wc-ajax=") {
        unset beresp.http.set-cookie;
    }

}

sub vcl_deliver {
        if (req.http.X-Purger) {
                set resp.http.X-Purger = req.http.X-Purger;
        }
}

sub vcl_pipe {
        return (pipE);
}

sub vcl_pass {
        return (fetch);
}

这是我的Nginx配置:

server {
   listen  443 ssl spdy http2;
   listen  [::]:443 ssl spdy http2;
   server_name  awstesTing.amr.com.au;
   port_in_redirect off;
   server_tokens off;
   more_clear_headers Server;

   ssl on;
   ssl_certificate_key /etc/letsencrypt/keys/0000_key-certbot.pem;
   ssl_certificate /etc/letsencrypt/live/awstesTing.amr.com.au/fullchain.pem;

   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   ssl_ciphers 'ECDHE-ECDSA-CHACHA20-poly1305:ECDHE-RSA-CHACHA20-poly1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECD$
   ssl_prefer_server_ciphers   on;

   ssl_session_cache   shared:SSL:20m;
   ssl_session_timeout 60m;
   ssl_session_tickets off;

   # Diffie-Hellman parameter for DHE ciphersuites,recommended 2048 bits
   ssl_dhparam /etc/Nginx/ssl/dhparam.pem;

   add_header Strict-Transport-Security "max-age=31536000";
   add_header X-Content-Type-Options nosniff;
   add_header x-frame-options "SAMEORIGIN";
   add_header X-XSS-Protection "1; mode=block";

  # enable ocsp stapling (mechanism by which a site can convey certificate revocation @R_435_4036@ion to visitors in a privacy-preserving,scalable mAnner)
  # http://blog.mozilla.org/security/2013/07/29/ocsp-stapling-in-firefox/
  resolver 8.8.8.8 8.8.4.4;
  ssl_stapling on;
  ssl_stapling_verify on;
  ssl_trusted_certificate /etc/letsencrypt/live/awstesTing.amr.com.au/fullchain.pem;

   LOCATIOn / {
     proxy_pass http://127.0.0.1:80;
     proxy_http_version 1.1;
     proxy_read_timeout     300;
     proxy_connect_timeout  300;
     proxy_set_header Connection "";

     proxy_set_header Host $http_host;
     proxy_set_header X-ForWARDed-Host $http_host;
     proxy_set_header X-Real-IP $remote_addr;
     proxy_set_header X-ForWARDed-For $proxy_add_x_forWARDed_for;
     proxy_set_header X-ForWARDed-Proto https;
     proxy_set_header httpS "on";

     access_log /var/www/logs/ssl-access.log;
     error_log  /var/www/logs/ssl-error.log notice;

     }
}

server {
   listen 8080;
   listen [::]:8080;
   server_name  awstesTing.amr.com.au;
   root /var/www/wordpress;
   index index.php;
   port_in_redirect off;

   LOCATIOn / {
      try_files $uri $uri/ /index.php?$args;
   }

   LOCATIOn ~ \.php${
       try_files $uri $document_root$fastcgi_script_name =404;
       fastcgi_split_path_info ^(.+\.php)(/.+)$;
       include fastcgi_params;
       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILename $document_root$fastcgi_script_name;
       fastcgi_param httpS on;
       fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;


       }
}

此配置具有后端http服务器和将请求传递给varnish的前端代理https.

香港专业教育学院尝试了一些不同的清漆配置,但无济于事.所以我有点迷失了什么.我可以清楚地看到服务器正在返回502,我怀疑这意味着http Nginx服务器无法确定将产品添加到购物车的意图.

非常感激任何的帮助.

提前致谢,

麦克风

编辑:

Nginx错误日志:

root@ip-172-31-1-180:/var/log/Nginx# tail error.log
2018/06/24 23:19:24 [error] 532#532: *4694 FastCGI sent in stderr: "php message: product_type was called incorrectly. Product properties should not be accessed directly. BACktrace: require('wp-blog-header.php'),require_once('wp-includes/template-loader.php'),do_action('template_redirect'),WP_Hook->do_action,WP_Hook->apply_filters,WC_AJAX::do_wc_ajax,do_action('wc_ajax_add_to_cart'),WC_AJAX::add_to_cart,apply_filters('woocommerce_add_to_cart_validation'),WC_Min_Max_Quantities->add_to_cart,WC_Min_Max_Quantities_Addons->is_composite_product,WC_Abstract_Legacy_Product->__get,wc_doing_it_wrong. This message was added in version 3.0.
php message: product_type was called incorrectly. Product properties should not be accessed directly. BACktrace: require('wp-blog-header.php'),WC_Cart->add_to_cart,do_action('woocommerce_add_to_cart'),WC_Cart->calculate_@R_451_10586@ls,do_action('woocommerce_before_calculate_@R_451_10586@ls'),check_for_starter_pack,wc_doing_it_wrong. This message was added in version 3.0.
php message: The WC_Cart::get_checkout_url function is deprecated since version 2.5. replace with wc_get_checkout_url" while reading response header from upstream,client: 127.0.0.1,server: awstesTing.amr.com.au,request: "POST /?wc-ajax=add_to_cart http/1.1",upstream: "fastcgi://unix:/var/run/php/php7.1-fpm.sock:",host: "awstesTing.amr.com.au",referrer: "https://awstesTing.amr.com.au/"
2018/06/24 23:19:26 [error] 532#532: *4694 FastCGI sent in stderr: "php message: product_type was called incorrectly. Product properties should not be accessed directly. BACktrace: require('wp-blog-header.php'),WP_Hook-
2018/06/24 23:19:27 [error] 532#532: *4694 FastCGI sent in stderr: "php message: product_type was called incorrectly. Product properties should not be accessed directly. BACktrace: require('wp-blog-header.php'),WP_Hook-
2018/06/24 23:19:27 [error] 532#532: *4694 upstream sent too big header while reading response header from upstream,referrer: "https://awstesTing.amr.com.au/"

清漆日志:

127.0.0.1 - - [27/Jun/2018:01:38:56 +0000] "POST http://awstesTing.amr.com.au/wp-admin/admin-ajax.php http/1.1" 502 575 "https://awstesTing.amr.com.au/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/67.0.3396.99 Safari/537.36"
127.0.0.1 - - [27/Jun/2018:01:38:58 +0000] "POST http://awstesTing.amr.com.au/?wc-ajax=add_to_cart http/1.1" 200 24759 "https://awstesTing.amr.com.au/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/67.0.3396.99 Safari/537.36"
127.0.0.1 - - [27/Jun/2018:01:39:01 +0000] "POST http://awstesTing.amr.com.au/?wc-ajax=add_to_cart http/1.1" 200 29339 "https://awstesTing.amr.com.au/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/67.0.3396.99 Safari/537.36"
127.0.0.1 - - [27/Jun/2018:01:39:08 +0000] "POST http://awstesTing.amr.com.au/?wc-ajax=add_to_cart http/1.1" 200 33927 "https://awstesTing.amr.com.au/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/67.0.3396.99 Safari/537.36"
127.0.0.1 - - [27/Jun/2018:01:39:10 +0000] "POST http://awstesTing.amr.com.au/?wc-ajax=add_to_cart http/1.1" 200 33927 "https://awstesTing.amr.com.au/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/67.0.3396.99 Safari/537.36"
127.0.0.1 - - [27/Jun/2018:01:39:12 +0000] "POST http://awstesTing.amr.com.au/?wc-ajax=add_to_cart http/1.1" 200 33927 "https://awstesTing.amr.com.au/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/67.0.3396.99 Safari/537.36"
127.0.0.1 - - [27/Jun/2018:01:39:13 +0000] "POST http://awstesTing.amr.com.au/?wc-ajax=add_to_cart http/1.1" 200 33927 "https://awstesTing.amr.com.au/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/67.0.3396.99 Safari/537.36"
127.0.0.1 - - [27/Jun/2018:01:39:18 +0000] "POST http://awstesTing.amr.com.au/?wc-ajax=add_to_cart http/1.1" 200 38439 "https://awstesTing.amr.com.au/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/67.0.3396.99 Safari/537.36"
127.0.0.1 - - [27/Jun/2018:01:39:19 +0000] "POST http://awstesTing.amr.com.au/?wc-ajax=add_to_cart http/1.1" 502 575 "https://awstesTing.amr.com.au/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/67.0.3396.99 Safari/537.36"

编辑2:

所以罪魁祸首竟然是清漆.我绕过了清漆,网站表现得如预期的那样.我假设清漆对标题大小有更严格的规则,因此连接断开.

如果我最终解决了这个问题,我将更新这篇文章.

最佳答案
正如这些网站解释
https://www.scalescale.com/tips/nginx/502-bad-gateway-error-using-nginx/

理解这个评论和你的消失配置我可以想象一个场景在哪里
Vanish Proxy将Ajax请求传递给
Nginx Web服务器本身想要传递给它
php,但最终仍然忙于处理wordpress之前的请求.
因此,Nginx Web服务器将报告错误502错误网关

我建议你禁用Varnish Cache并尝试在没有它的情况下操作wordpress站点,看看错误是wordpress应用程序还是Varnish Cache的问题.
还会在日志中显示请求的处理时间.

我还观察到Nginx日志与Varnish Logs与timestamps不匹配.

看到Nginx活动日志以查看哪些请求实际转发以及它们在Web服务器中具有哪些响应将是非常有趣的.
如文档中所述:
https://docs.nginx.com/nginx/admin-guide/monitoring/logging/

大佬总结

以上是大佬教程为你收集整理的wordpress – Varnish nginx ssl woocommerce – wc-ajax表现不佳全部内容,希望文章能够帮你解决wordpress – Varnish nginx ssl woocommerce – wc-ajax表现不佳所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: