Tag Archive Performance

Byphunsanit

nginx: cache static asset

ตัว nginx มีข้อดีตรงที่จัดการไฟล์ที่ไม่เปลี่ยนตาม user เวลา ( static asset ) เช่น css, jpeg, png, gif, ico พวกนี้ เราไม่ได้เปลี่ยนแปลงบ่อย ๆ การที่สั่งให้ chrome cache เอาไว้จะช่วยให้ประหยัด bandwidth ไว้เยอะเลย

  1. ติดตั้ง nginx โดยคำสั่ง
    brew install nginx
  2. ดูการติดตั้งโดยใช้
    brew info nginx
    จะเห็น message กลับมา เช่น
    ==> nginx: stable 1.27.0 (bottled), HEAD
    HTTP(S) server and reverse proxy, and IMAP/POP3 proxy server
    https://nginx.org/
    Installed
    /opt/homebrew/Cellar/nginx/1.27.0 (27 files, 2.4MB) *
    Poured from bottle using the formulae.brew.sh API on 2024-07-20 at 19:38:15
    From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/n/nginx.rb
    License: BSD-2-Clause
    ==> Dependencies
    Required: openssl@3 ✔, pcre2 ✔
    ==> Options
    –HEAD
    Install HEAD version
    ==> Caveats
    Docroot is: /opt/homebrew/var/www
    The default port has been set in /opt/homebrew/etc/nginx/nginx.conf to 8080 so that
    nginx can run without sudo.
    nginx will load all files in /opt/homebrew/etc/nginx/servers/.
    To restart nginx after an upgrade:
    brew services restart nginx
    Or, if you don’t want/need a background service you can just run:
    /opt/homebrew/opt/nginx/bin/nginx -g daemon\ off\;
    ==> Analytics
    install: 12,297 (30 days), 43,162 (90 days), 162,914 (365 days)
    install-on-request: 12,264 (30 days), 42,989 (90 days), 162,428 (365 days)
    build-error: 13 (30 days)
    จะเห็นข้อมูลสำคัญ 3 จุดคือ
    • เวอร์ชั่นที่ติดตั้งคือ 1.27.0
    • document root จะอยู่ที่ Docroot is: /opt/homebrew/var/www
    • ตัวไฟล์ config จะอยู่ที่ /opt/homebrew/etc/nginx/nginx.conf
  3. เปิดไฟล์ config ขึ้นมาเช่น
    nano /opt/homebrew/etc/nginx/nginx.conf
    เพิ่มใน server {


    }
    ให้เพิ่ม
    #cache static asset
    location ~* \.(?:css(\.map)?|js(\.map)?|jpe?g|png|gif|ico)$ {
    access_log off;
    expires 7d;
    log_not_found off;
    }
  4. เทสว่าเขียน configuration ถูกมั๋ยโดยใช้คำสั่ง
    nginx -T
    ถ้าไม่มีแจ้ง error กลับมาก็ใช้ได้
  5. restart nginx โดยคำสั่ง
    brew services restart naginx
  6. ทดสอบโดยการเรียก
    http://localhost/favicon.ico
    ถ้าเปิด developer mode เท็บ Network column Transfered ควรจะเป็น cached