เซิร์ฟเวอร์ Nginx ไฟล์สแตติกเก่าหลังจากคอมไพล์คอมมิท


2

ฉันใช้ Nginx เพื่อให้บริการไฟล์คงที่ (ในขณะที่ใช้เป็น reverse proxy สำหรับ NodeJS express RestAPI ของฉัน) ปัญหาคือเมื่อฉันกด git ใหม่ไปยังเซิร์ฟเวอร์ผู้ใช้จะยังคงได้รับไฟล์เก่า (การแก้ไขครั้งล่าสุด) วิธีแก้ปัญหาในตอนนี้คือผู้ใช้ล้างแคชในเบราว์เซอร์

อะไรคือสาเหตุของสิ่งนี้ ฉันเดาว่านี่คือการกำหนดค่าแคชฝั่งเซิร์ฟเวอร์ผิดหรือเปล่า? ดูด้านล่างการตั้งค่า nginx ของฉัน (พื้นฐาน + รวม)

ดังที่คุณเห็นด้านล่างไฟล์สแตติก (.html, .js, .css) จะอยู่ภายใต้ / var / www / frontend

##
# Basic Settings
##

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;

# server_names_hash_bucket_size 64;
# server_name_in_redirect off;

include /etc/nginx/mime.types;
default_type application/octet-stream;

listen 80;

server_name **REMOVED_FOR_PRIVACY_REASONS**;

proxy_cache_valid 404 1m;

location / {
        root /var/www/frontend;
        index index.html
        try_files try_files $uri $uri/ =404;

        #proxy_cache backcache;
        #proxy_cache_bypass $http_cache_control;
        #add_header X-Proxy-Cache $upstream_cache_status;
    }

    location /api/ {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

คำตอบ:


1

ฉันก็คิดว่าสิ่งนี้เกี่ยวข้องกับการแคชฝั่งไคลเอ็นต์

ฉันจะเริ่มแก้จุดบกพร่องนี้กับ firebug หรือสิ่งที่คล้ายกันโหลดหน้าและตรวจสอบส่วนหัวแคช (etag / แก้ไขล่าสุด / ควบคุมแคช / หมดอายุ)

ขณะที่เราอยู่ที่นี่ฉันพบว่าเอกสารนี้เกี่ยวกับการแคช HTTP:

https://www.mnot.net/cache_docs/

ทำจากหนึ่งในคนที่ทำให้มาตรฐาน HTTP อย่างไรก็ตาม


ฉันได้ตรวจสอบแล้วและ Last-Modified ไม่สมเหตุสมผล ฉันผลักไฟล์ html เวอร์ชันใหม่ แต่ส่วนหัว Last-Modified กำลังแสดงวันที่เก่า นี่เป็นปัญหาของฉันหรือไม่ Nginx คำนวณส่วนหัวนี้อย่างไร
etaiso

1

ฉันคิดว่านี่ไม่ใช่การกำหนดค่าแคชฝั่งเซิร์ฟเวอร์ที่ผิดพลาด เบราว์เซอร์ไฟล์แบบคงที่ถูกแคชโดยเบราว์เซอร์โดยอัตโนมัติ คุณต้องมีการกำหนดเวอร์ชันไฟล์สแตติกเพื่อบังคับให้เบราว์เซอร์อ่านแหล่งที่แก้ไขของคุณ:

<link src="/static/style.css?v=xxxx">
<script language="javascript" type="text/javascript" src="/js/app.js?v=xxxx"></script>

0

นอกจากคำตอบอื่น ๆ แล้วให้ดูที่hashbusterซึ่งเป็นเครื่องมือที่เขียนด้วยไพ ธ อนเพื่อแก้ไขปัญหาเช่นนี้ คำอธิบายอ่าน: "hashbuster เป็นเครื่องมือสำหรับเพิ่มสตริงข้อความค้นหาที่ป้องกันการแคชในURLในไฟล์ HTML ของคุณ

หากคุณทำการเปลี่ยนแปลงเว็บไซต์จำนวนมากแคชของเบราว์เซอร์และพร็อกซีอาจเป็นสิ่งที่คุณมีอยู่จริง หากคุณต้องบอกให้ลูกค้าล้างแคชของเบราว์เซอร์เพื่อดูรหัสล่าสุดของคุณแสดงว่า hashbuster เหมาะสำหรับคุณ "

คุณสามารถเรียกใช้เครื่องมือดังกล่าวได้ผ่านทางตะขอหลังการรับ gitบนเซิร์ฟเวอร์ของคุณ

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