ประเด็นคือ จะเพิ่มคอนฟิกเรื่อง security ใน contianer ที่รันอยู่แล้วเป็น apache + php 7
โดย Codex แนะนำ
1. สร้างไฟล์ apache-security.conf ในโฟลเดอร์เดียวกับ docker-compose.yml:
ServerTokens Prod
ServerSignature Off
# เปลี่ยนข้อความสำหรับ URL ที่ไม่มีอยู่ โดยยังตอบ HTTP 404
ErrorDocument 404 "Not Found"
แต่ละค่าทำหน้าที่ดังนี้:
- ServerTokens Prod ซ่อนเวอร์ชันและระบบปฏิบัติการใน response header เหลือเพียง Server: Apache
- ServerSignature Off ลบบรรทัด Apache/2.X.YY (Distro Name) Server at ... ด้านล่างหน้า error
- ErrorDocument 404 เปลี่ยนหน้า 404 ให้แสดงข้อความสั้น ๆ ตามที่กำหนด
อ้างอิง เอกสารการตั้งค่า Apache
2. เพิ่ม volume ใน service www_myweb โดยเก็บรายการเดิมไว้:
volumes:
- ./html:/var/www/html
- ./php.ini:/usr/local/etc/php/php.ini
- ./apache-security.conf:/etc/apache2/conf-enabled/zz-security.conf:ro
ชื่อ zz-security.conf ช่วยให้โหลดหลังไฟล์ security.conf ปกติของ Debian และ :ro กำหนดให้ container อ่านไฟล์ได้อย่างเดียว
3. ตรวจสอบและนำค่าไปใช้:
$ docker compose config --quiet
$ docker compose up -d --no-deps --force-recreate www_myweb
$ docker compose exec www_myweb apache2ctl -t
การ recreate จะทำให้เว็บหยุดช่วงสั้น ๆ ครับ หากตรวจสอบสำเร็จควรเห็น Syntax OK
เพิ่มเติมโดย deepseek
ทั้ง 3 คำสั่งนี้เป็น pattern ที่ใช้บ่อยสำหรับ ตรวจสอบและโหลด Apache config ใหม่ภายใน Docker Compose อย่างปลอดภัย มาดูทีละคำสั่งครับ
1. docker compose config --quiet
- ตรวจสอบความถูกต้อง ของไฟล์ docker-compose.yml
- --quiet = ไม่แสดงผลลัพธ์ออกมา จะ error (exit code ≠ 0) ก็ต่อเมื่อไฟล์ผิด เช่น YAML ผิดรูป, ตัวแปรไม่ได้ประกาศ, ไฟล์ที่อ้างใน env_file/configs หาไม่เจอ
- ใช้เป็น pre-flight check ก่อนทำอะไรที่เสี่ยง
- สั่งให้ service www_myweb ทำงาน แค่ตัวเดียว
- -d = รันแบบ background (detached)
- --no-deps = ไม่ต้องไป start service ที่มันพึ่งพา (เช่น db, redis)
- --force-recreate = ลบ container เก่าแล้วสร้างใหม่ แม้จะไม่มีอะไรเปลี่ยน
- ⚠️ หมายเหตุ: คำสั่งนี้ สร้าง container ใหม่ → config ที่เพิ่งแก้จะถูกโหลดใหม่ แต่ ข้อมูลที่เขียนใน writable layer จะหาย (ยกเว้น named volume)
- รัน apache2ctl -t ข้างใน container ที่กำลังรันอยู่ เพื่อ ตรวจ syntax ของ Apache config
- ถ้า httpd.conf/apache2.conf หรือ vhost มี syntax ผิด จะฟ้อง error ทันที
ลำดับที่แนะนำ (ปลอดภัยกว่า)
ลำดับปัจจุบันตรวจ หลัง recreate ซึ่งถ้า config ผิด เว็บจะล่มทันที Pattern ที่ปลอดภัยกว่าคือ:
No comments:
Post a Comment