WWW-Authenticate header | PHP-FPM clear env – YIL 19/2/2020

1. WWW-Authenticate header

WWW-Authenticate response header được server trả về cùng với Status 401 Unauthorized giúp client biết được phương thức xác thực nào được hỗ trợ. Qua đó client có thể gửi thông tin xác thực với phương thức tương ứng qua Authorization header.

Ví dụ khi server response với header WWW-Authenticate: Basic thì trình duyệt sẽ hiện lên hộp thoại yêu cầu người dùng nhập username và password.

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic
Basic Auth Dialog

Xem thêm tại https://phpnews.io/feeditem/401-unauthorized

2. php-fpm clear env

Trong quá trình làm việc thì mình gặp một vấn đề là khi chạy bằng PHP CLI thì ứng dụng của mình có thể đọc được biến mối trường (biến môi trường của hệ điều hành chứ không phải trong file .env) nhưng khi chạy qua Nginx & php-fpm thì lại không có.

Sau một hồi tìm hiểu là php-fpm có 1 config là clear_env. Chi tiết https://www.php.net/manual/en/install.fpm.configuration.php#clear-env

#/etc/php/7.3/fpm/pool.d/www.conf
; Clear environment in FPM workers
; Prevents arbitrary environment variables from reaching FPM worker processes
; by clearing the environment in workers before env vars specified in this
; pool configuration are added.
; Setting to "no" will make all environment variables available to PHP code
; via getenv(), $_ENV and $_SERVER.
; Default Value: yes
;clear_env = no

Mặc định clear_env sẽ được đặt là yes và php-fpm worker sẽ không đọc được các biết môi trường.

Để ứng dụng có thể đọc được biến môi trường khi chạy bằng php-fpm thì có thể dùng 1 trong 2 cách sau:

  1. Sửa config clear_env của php-fpm thành no
  2. Dùng PHP CLI load biến môi trường ra 1 file rồi sau đó ứng dụng sẽ load các biến từ file đó. Laravel framework có built-in lệnh php artisan config:cache dùng để cache lại config, nếu đặt giá trị của config lấy từ biến môi trường thì giá trị biến môi trường sẽ được cache lại.