กฎ nginx ที่แตกต่างกันตามผู้อ้างอิง


12

ฉันใช้ WordPress กับ WP Super Cache ฉันต้องการผู้เข้าชมที่มาจาก Google (นั่นรวมถึงผู้อ้างอิงเฉพาะทุกประเทศเช่น google.co.in, google.co.uk และอื่น ๆ ) เพื่อดูเนื้อหาที่ไม่ได้ล้าง

มีกฎ nginx ของฉันที่ไม่ทำงานตามที่ฉันต้องการ:

server {
    server_name  website.com;
    location / {
        root   /var/www/html/website.com;
        index  index.php;
           if ($http_referer ~* (www.google.com|www.google.co) ) {
                   rewrite . /index.php break;
           }
           if (-f $request_filename) {
                   break;
           }
           set $supercache_file '';
           set $supercache_uri $request_uri;
           if ($request_method = POST) {
                   set $supercache_uri '';
           }
           if ($query_string) {
                   set $supercache_uri '';
           }
           if ($http_cookie ~* "comment_author_|wordpress|wp-postpass_" ) {
                   set $supercache_uri '';
           }
           if ($supercache_uri ~ ^(.+)$) {
                   set $supercache_file /wp-content/cache/supercache/$http_host/$1index.html;
           }
           if (-f $document_root$supercache_file) {
                   rewrite ^(.*)$ $supercache_file break;
           }
           if (!-e $request_filename) {
                   rewrite . /index.php last;
           }
    }
    location ~ \.php$ {
            fastcgi_pass    127.0.0.1:9000;
            fastcgi_index   index.php;
            fastcgi_param   SCRIPT_FILENAME /var/www/html/website.com$fastcgi_script_name;
            include         fastcgi_params;
    }
}

ฉันควรทำอย่างไรเพื่อให้บรรลุเป้าหมาย

คำตอบ:


3

ฉันไม่คุ้นเคยกับ WP Supercache แต่ถ้าคุณแค่ต้องเขียนใหม่ไปที่ index.php เพื่อหลีกเลี่ยงแคชมันไม่ควรยากเกินไป

ตัวกรองที่มีอยู่ของคุณไม่ครอบคลุมเนื่องจากจะตรวจสอบเฉพาะ google.com และ google.co เท่านั้น จากรายการนี้มี TLD จำนวนมากที่ Google ใช้ซึ่งจะไม่ตรงกันเช่น google.de, google.fr เป็นต้น

ตัวกรองต่อไปนี้ควร จำกัด ให้คุณอ้างอิงผู้ที่ขึ้นต้นด้วย www.google และลงท้ายด้วยอักขระ TLD 2-3 ตัวใด ๆ

if ($http_referer ~* ^www.google.[a-z]{2,3}(.[a-z]{2})?$ ) {
    # do whatever you need to do here to avoid caching
}

2

คุณเกือบจะอยู่ที่นั่น

ครั้งแรกกฎ WP Super Cache ยุ่งมาก พวกเขาจำเป็นต้องได้รับการออกแบบใหม่ตั้งแต่แรก แต่เป็นโครงการสำหรับวันอื่น

เพื่อให้การทำงานนี้ไม่กลับมาในทันทีให้ตั้งค่าการ$supercache_uri = ''ตรวจสอบอื่น ๆ ทั้งหมดแทน ตัวอย่างเช่น

if ($http_referer ~* (www.google.com|www.google.co) ) {
    set $supercache_uri '';
}

สิ่งนี้จะต้องปรากฏขึ้นหลังจุดที่$supercache_uriเป็นsetจุดเริ่มต้นไม่ใช่จุดเริ่มต้นที่คุณมี


0

สิ่งนี้อาจใช้งานได้กับ $ http_referer:

       if ($http_referer ~* (www.google.com|www.google.co) ) {
               break;
       }
       if (!-e $request_filename) {
               rewrite . /index.php break;
       }

สิ่งนี้ยังใช้งานไม่ได้

-1

ลองสิ่งนี้

if ($http_referer ~* (www.example.com|example.com.au) ) {
           return 301 http://your-url.example/custom-path;
}

2
ฉันไม่เข้าใจ
Pierre.Vriens

1
ฉันไม่เข้าใจเหมือนกัน การเปลี่ยนเส้นทางเบราว์เซอร์ไปยัง URL อื่นจะหลีกเลี่ยงการแคชฝั่งเซิร์ฟเวอร์ได้อย่างไร
Michael Hampton
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.