php-fpm 액세스 로그 권장 설정(www.conf)

3702 단어 php-fpmPHPConfig
LEMP 환경 & Laravel이라면 php-fpm의 기본 설정은 액세스 로그에 필요한 정보를 출력하지 않으므로,
로그에 출력할 수 있는 파라미터를 모두 실제로 출력 검증해, 이것이 있는 편이 좋다고 하는 것을 정리했습니다.

개요


  • 환경 정보
  • 기본 access.log 형식
  • 추천 access.log 형식
  • 해설
  • 번외편

  • 환경 정보


  • Centos7
  • php7.4
  • Laravel 6.0
  • nginx1.16.1
  • 대상 설정 파일 : www.conf (php-fpm)

  • 기본 access.log 형식



    다음은 기본 설정 내용입니다.

    www.conf
    access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"
    
    ※アクセスログフォーマットに設定可能なパラメータの簡易解説
     %C : CPU 使用率
      %d : リクエストの処理にかかった時間
      %e : 環境変数($ _ENV / $ _SERVER)
      %f : script filename
      %l : content-length of the request (for POST request only)
      %m : request method
      %M : PHPで使用したメモリのピーク
     %n : pool name
      %o : output header
      %p : PID of the child that serviced the request
      %P : PID of the parent of the child that serviced the request
      %q : クエリストリング
      %Q : the '?' character if query string exists
      %r : the request URI (without the query string, see %q and %Q)
      %R : remote IP address
      %s : status (response code)
      %t : server time the request was received
      %T : time the log has been written (the request has finished)
      %u : remote user
    

    실제로 이 설정으로 출력되는 결과는 이쪽↓

    192.168.1.1 - 1/Aug/2020:01:01:01 +0000 "GET/index.php"200/var/www/html/test.com/public/index.php 1111 12211 30.11%

    이 경우 로그 조사를 할 때 다음과 같은 문제점이 있습니다.
  • 어떤 화면에 액세스가 있었는지 모르겠다 (출력되는 패스는 모두 /var/www/html/test.com/public/index.php)
  • 여러 호스트를 관리하는 경우 어떤 호스트에 액세스했는지 알 수 없습니다 (모두 엉망이됨)
  • 요청이 완료되는 데 걸린 시간이 "밀리"단위로 보기 힘들다

  • 추천 access.log 형식



    그 때문에, 여러가지 시험한 결과, 이하와 같이 포맷으로 변경했습니다.

    www.conf
    access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{HTTP_HOST}e %{REQUEST_URI}e %q %{seconds}d %{kilo}M %C%% %{HTTP_REFERER}e"
    

    이 포맷으로 실제로 출력되는 결과는 이쪽↓

    192.168.1.1 - 1/Aug/2020:01:01:01 +0000 "GET/index.php"200/var/www/html/test.com/public/index.php test.com:443/test/home 1.111 12211 30.11% htps // st. 코 m : 443 / st / ㎉

    아래에서 설명합니다.

    해설



    추가·편집한 파라미터는 이하의 5개가 됩니다.


    매개변수
    설명
    출력 예


    %{HTTP_HOST} e
    현재 요청의 Host: 헤더
    test.com:443

    %{REQUEST_URI}e
    페이지에 액세스하기 위해 지정된 URI
    /test/home

    %q
    쿼리 문자열
    a=1

    %{seconds}d
    요청 처리에 소요된 시간을 초 단위로 표시
    1.111

    %{HTTP_REFERER}e
    현재 페이지로 전환하기 전에 사용자가 본 페이지의 URL
    htps // st. 코 m : 443 / st / ㎉


    위에서도 설명이 있었습니다만, 「%e」로 $_SERVER変数 의 값을 취득할 수 있으므로 주로 이쪽을 사용했습니다.
    실제로 출력해 본 느낌이라면, 사용할 수 있을 것 같은 $_SERVER変数는 상기 정도였습니다만, 기호로 추가해 보세요.

    정리하면
    상기 5개의 파라미터를 추가·편집함으로써,
    어떤 호스트 화면에 액세스했는지, 요청 처리에 몇 초가 걸렸습니까?
    또한 전환 전의 체류 화면까지 알게 되었습니다.

    이것으로 서비스 운용해 가는데 조금은 살아갈까 생각합니다.
    꼭 참고하십시오

    번외편



    다른 매개 변수로 사용할 수 있다고 생각 했지만 실제로 출력 해보십시오.
    사용할 수 없다고 판단한 파라미터들입니다.


    매개변수
    설명
    출력 예


    %r
    설명에서는 「the request URI」이지만, 유저가 액세스한 URI는 아니었다.
    /index.php

    %R
    클라이언트 IP가 아니라 nginx 서버의 IP를 가져오기 때문에 이번에는 사용할 수 없다. IP에 관해서는 nginx쪽으로 취득하면 OK.
    192.168.1.1

    %{REMOTE_ADDR}e
    %R과 같은 이유
    192.168.1.1

    좋은 웹페이지 즐겨찾기