加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > Nginx > 正文

wordpress – Varnish nginx ssl woocommerce – wc-ajax表

发布时间:2020-12-13 21:31:50 所属栏目:Nginx 来源:网络整理
导读:所以我有点奇怪.我有一台运行Nginx,Varnish,php-fpm和wordpress / woocommerce的debian 9机器.该网站基本上有效,但我有一些奇怪的问题,添加到购物车. 测试环境为https://awstesting.amr.com.au 具体来说,在主页上有“添加到购物车”按钮.在页面加载时,您可以

所以我有点奇怪.我有一台运行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 information 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_totals,do_action('woocommerce_before_calculate_totals'),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/

  1. Nginx with PHP-FPM: same as Apache example,let’s imagine your php daemon stop working,or get’s overloaded by requests,it will not work
    properly and the all the php requests from nginx would not be served,
    so,a 502 Bad Gateway error will appear. How to fix it? Restart
    php-fpm daemon and check the logs.

理解这个评论和你的消失配置我可以想象一个场景在哪里
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/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读