質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.52%

  • Ruby on Rails 5

    1749questions

  • nginx

    837questions

    nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

【nginx】logの出力先がconfファイル通りにならない

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,377

gogoackman3

score 88

発生している問題

Nginxのエラーログ及びアクセスログが生成されるパスが自動的に以下になってしまいます。

/var/www/rails/プロジェクト名/log

本来ログを出力したいのは以下のパスです。

/var/log/nginx

なお、nginx.confの設定は以下の通りです。(コメントアウトしている部分は一部割愛)

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;

# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

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

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    index   index.html index.htm;

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  localhost;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        }

        # redirect server error pages to the static page /40x.html
        #
        error_page 404 /404.html;
            location = /40x.html {
        }

        # redirect server error pages to the static page /50x.html
        #
        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
}

またnginx.conf.defaultの設定は以下の通りです。(コメントアウトしている部分は一部割愛)

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;
    }
}

confファイルの権限は以下のようになっていました。

➜  nginx ll /etc/nginx
total 68K
drwxr-xr-x 2 root root 4.0K Sep 12 16:47 conf.d
drwxr-xr-x 2 root root 4.0K Mar 16  2017 default.d
-rw-r--r-- 1 root root 1.1K Mar 16  2017 fastcgi.conf
-rw-r--r-- 1 root root 1.1K Mar 16  2017 fastcgi.conf.default
-rw-r--r-- 1 root root 1007 Mar 16  2017 fastcgi_params
-rw-r--r-- 1 root root 1007 Mar 16  2017 fastcgi_params.default
-rw-r--r-- 1 root root 2.8K Mar 16  2017 koi-utf
-rw-r--r-- 1 root root 2.2K Mar 16  2017 koi-win
-rw-r--r-- 1 root root 3.9K Mar 16  2017 mime.types
-rw-r--r-- 1 root root 3.9K Mar 16  2017 mime.types.default
-rw-r--r-- 1 root root 3.7K Mar 16  2017 nginx.conf
-rw-r--r-- 1 root root 2.6K Mar 16  2017 nginx.conf.default
-rw-r--r-- 1 root root  636 Mar 16  2017 scgi_params
-rw-r--r-- 1 root root  636 Mar 16  2017 scgi_params.default
-rw-r--r-- 1 root root  664 Mar 16  2017 uwsgi_params
-rw-r--r-- 1 root root  664 Mar 16  2017 uwsgi_params.default
-rw-r--r-- 1 root root 3.6K Mar 16  2017 win-utf

また本来ログを出力したい/var/log/nginxの中にあるファイルの権限を確認しようとしたところ以下になりました。

log

さらに/var/log/nginx自体の権限は以下の通りです。

drwx------ 2 nginx nginx 4.0K Jan 10 03:23 nginx

環境

・amazonのEC2を利用(OSはAmazon Linuxを利用)
・Rails5+Puma+Nginx

聞きたい事(この質問自体は解決済み)

なぜconfファイルで設定しているパスとは違う場所にnginxのログファイルが生成されてしまうのでしょうか?

追記(聞きたい事の解決と追加の質問)

/var/log/nginxの権限を変更し、中を確認すると正しくlogファイルが生成されていることがわかりました。

-rw-r--r-- 1 nginx nginx  2746414 Jan 11 08:08 access.log
-rw-r--r-- 1 nginx nginx  3079253 Jan  2 03:31 access.log-20180102.gz
-rw-r--r-- 1 nginx nginx  2597317 Jan  3 03:28 access.log-20180103.gz
-rw-r--r-- 1 nginx nginx  2385272 Jan  4 03:35 access.log-20180104.gz
-rw-r--r-- 1 nginx nginx  2428705 Jan  5 03:43 access.log-20180105.gz
-rw-r--r-- 1 nginx nginx  2288535 Jan  6 03:20 access.log-20180106.gz
-rw-r--r-- 1 nginx nginx  2392137 Jan  7 03:07 access.log-20180107.gz
-rw-r--r-- 1 nginx nginx  2657834 Jan  8 03:22 access.log-20180108.gz
-rw-r--r-- 1 nginx nginx  2618195 Jan  9 03:08 access.log-20180109.gz
-rw-r--r-- 1 nginx nginx  1967811 Jan 10 03:23 access.log-20180110.gz
-rw-r--r-- 1 nginx nginx 43857980 Jan 11 03:38 access.log-20180111
-rw-r--r-- 1 nginx nginx        0 Sep 13 03:12 error.log
-rw-r--r-- 1 nginx root        81 Sep 13 03:12 error.log-20170913.gz

結果的には/var/log/nginx/var/www/rails/プロジェクト名/logのどちらにもnginxのlogが書き込まれていて、/var/www/rails/プロジェクト名/logの方はローテーションされていないので「nginx.access.log」という1ファイルにログが書き込まれ続けているようでした。

そこで/etc/nginx/conf.d内の「プロジェクト名.conf」というファイルを確認すると以下のようになっていました。

#Log directory
error_log /var/www/rails/○○/log/nginx.error.log;
access_log /var/www/rails/○○/log/nginx.access.log;

#max body size
client_max_body_size 200M;

upstream ○○ {
  # for UNIX domain socket setups
  server unix:/var/www/rails/○○/tmp/sockets/puma.sock fail_timeout=0;
}

server{
  listen 10001;
  server_name ○○.jp;

  location / {
    return 301 https://○○.jp$request_uri;
  }
}

server {
  listen 80;
  server_name ○○.jp;


  # nginx so increasing this is generally safe...
  keepalive_timeout 65;

  # path for static files
  root /var/www/rails/○○/public;

  # page cache loading
  try_files $uri/index.html $uri.html $uri @app;

  location @app {
    # HTTP headers
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://○○;
  }

  # Rails error pages
  error_page 500 502 503 504 /500.html;
  location = /500.html {
    root /var/www/rails/○○/public;
  }
}

おそらくこれが/var/log/nginxに加え、/var/www/rails/プロジェクト名/logにもnginxのlogが書き込まれていた原因だと思うのですが、前述の通り/etc/nginx内の「nginx.conf」にlogの出力先(access_log  /var/log/nginx/access.log  main;)を記載しているので、こちらはコメントアウトしてしまっても問題ないのでしょうか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

/etc/nginx/default.d/ 以下の .conf ファイルで、server {} (バーチャルホスト)が設定されていて、その中で access_log が設定されているのではないでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/11 08:24

    ありがとうございます。まさしくその通りで、設定されていました。本文に追記として情報を追加したのですが、/etc/nginx/conf.d内の.confファイルでのlogの出力先指定はコメントアウトしても大丈夫なのでしょうか??

    キャンセル

  • 2018/01/11 23:17

    > /etc/nginx/conf.d内の.confファイルでのlogの出力先指定はコメントアウトしても大丈夫なのでしょうか?

    好きにしていいと思いますが、今後、他のプロジェクトを追加するのであれば、プロジェクトごとにログを分けた方がいいのでは?
    /etc/logrotate.d/nginx で「/var/log/nginx/*.log /var/www/rails/*/log/*.log { (略) }」と複数設定することもできます。

    キャンセル

  • 2018/01/12 00:22

    なるほど、確かにそうですね。色々とありがとうございました!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Ruby on Rails 5

    1749questions

  • nginx

    837questions

    nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。