45189


「nginx+unicorn+rails5.2.0」で、capistranoを使って、でサーバの構築を行いましたが、nginxの画面しか見えませんでした。一応、ゲストサーバーに入って、unicornの動作を確認しましたが、動いているようです。

> ops@ubuntu-14:/var/www/awesome-events/current$ ps aux | grep unicorn  
>  ops 3355 0.0 7.8 266192 80176 ? Sl 22:05 0:02 unicorn master -c
> config/unicorn.rb -E none -D  
>  ops 3374 0.0 7.4 267220 75544 ? Sl 22:05 0:00 unicorn worker[0] -c
> config/unicorn.rb -E none -D  
>  ops 3376 0.0 7.4 267220 75540 ? Sl 22:05 0:00 unicorn worker[1] -c
> config/unicorn.rb -E none -D  
>  ops 3523 0.0 0.0 11744 924 pts/0 S+ 22:56 0:00 grep --color=auto unicorn

そこで、エラーログ（log/unicorn-
stderr)の確認を行ったところ、下記のようなメッセージがありました。しかし、どこで、エラーが出ているのか分かりません。どこで、エラーが出ているのか教えて頂けませんでしょうか？また、他にもエラー原因が分かる方法があれば教えて頂けると助かります。（log/unicorn-
stdoutでは、何も表示されていませんでした。）

> I, [2018-06-10T22:05:34.389710 #3337] INFO -- : Refreshing Gem list  
>  I, [2018-06-10T22:05:36.394854 #3337] INFO -- : listening on
> addr=127.0.0.1:3000 fd=8  
>  I, [2018-06-10T22:05:36.399762 #3337] INFO -- : master process ready  
>  I, [2018-06-10T22:05:36.400916 #3341] INFO -- : worker=0 ready  
>  I, [2018-06-10T22:05:36.404272 #3344] INFO -- : worker=1 ready  
>  I, [2018-06-10T22:05:36.438856 #3355] INFO -- : executing
> ["/var/www/awesome-events/shared/bundle/ruby/2.5.0/bin/unicorn", "-c",
> "config/unicorn.rb", "-E", "none", "-D", {8=>#}] (in /var/www/awesome-
> events/releases/20180610220523)  
>  I, [2018-06-10T22:05:36.439046 #3355] INFO -- : forked child re-
> executing...  
>  I, [2018-06-10T22:05:36.692161 #3355] INFO -- : inherited
> addr=127.0.0.1:3000 fd=8  
>  I, [2018-06-10T22:05:36.692392 #3355] INFO -- : Refreshing Gem list  
>  I, [2018-06-10T22:05:38.419510 #3355] INFO -- : master process ready  
>  I, [2018-06-10T22:05:38.422386 #3374] INFO -- : worker=0 ready  
>  I, [2018-06-10T22:05:38.425321 #3376] INFO -- : worker=1 ready  
>  I, [2018-06-10T22:05:38.518200 #3337] INFO -- : reaped # worker=0  
>  I, [2018-06-10T22:05:38.518296 #3337] INFO -- : reaped # worker=1  
>  I, [2018-06-10T22:05:38.518337 #3337] INFO -- : master complete

大雑把に言うと、以下のとおり構築しました。  
（コードは、必要でしたでしょうか？ファイルが大量ににありすぎるので。。。とりあえず、この様な感じで構築しています。）  
⑴「vagrant」でboxをアップし、「chef」でサーバーの構成を行う。  
この時、オペレータユーザを作成して、nodeとしてサーバー情報を追加しまし、プロビジョニングしました。もちろん、nginxのレシピもセットしました。  
⑵railsアプリにunicornを追加し、staging環境をセットしました。  
※「RAILS_ENV=staging rake db:setup」⇨「rails s -e
staging」を実行したところ、staging環境の画面がブラウザに立ち上がりました。  
⑶capistranoを下記のとおり設定し、デプロイしました。  
github経由でアプリファイルを仮想サーバに移し、railsに必要な処理を走らせたのち、unicornを再起動するように設定してしました。  
⑷「localhost:8080」をブラウザに入力したところ、nginxの画面しか確認出来ません。  
※vagrantfileで、「config.vm.network :forwarded_port, guest: 80, host:8080」とした。

ちなみに、nginxの画面は確認できるし、エラーログを見たところ、unicornとnginxもつながっている？？ようにみえるので、以下の点が気になっていますが、どこを確認すればいいのか分からない状態です。  
①画面への出力が逆になっている。（エラーでないログが、stderr_logに表示されるため）  
②unicornとrailsの接続がうまく行っていない。または、railsが動いていない？  
（正直、unicornとrailsがどのように関わっているのか理解していない。ただ、unicorn．rbファイルをconfigフォルダの下にいれてあればつながると思っています。）

nginx_setting.rb(site-cookbooksのtemplates)  
⇨/etc/nginx/sites-available/default  
※node["rails_book_cookbook"]["server_name"]=vagrant.local

[code]

    server {
      listen 80; 
      server_name node["rails_book_cookbook"]["server_name"];
      access_log /var/log/nginx/node["rails_book_cookbook"]["server_name"].access.log;
      root /var/www/awesome-events/current/public;
      location / { 
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
       if (!-f $request_filename) {
         proxy_pass http://127.0.0.1:3000;
         break;
        }   
      }
    }
    
[/code]

**nginx.conf**

[code]

    user www-data;
    worker_processes 2;
    error_log  /var/log/nginx/error.log;
    pid        /var/run/nginx.pid;
    events {
      worker_connections  1024;
    }
    http {
      include       /etc/nginx/mime.types;
      default_type  application/octet-stream;
      charset_types text/css text/plain text/vnd.wap.wml application/javascript application/json application/rss+xml application/xml;
      access_log    /var/log/nginx/access.log;
      sendfile on;
      tcp_nopush on;
      tcp_nodelay on;
      keepalive_requests 100;
      keepalive_timeout  65;
      gzip  on;
      gzip_http_version 1.0;
      gzip_comp_level 2;
      gzip_proxied any;
      gzip_vary off;
      gzip_types text/plain text/css application/x-javascript text/xml application/xml application/rss+xml application/atom+xml image/svg+xml text/javascript application/javascript application/json text/mathml;
      gzip_min_length  1000;
      gzip_disable     "MSIE [1-6]\.";
      variables_hash_max_size 1024;
      variables_hash_bucket_size 64;
      server_names_hash_bucket_size 64;
      types_hash_max_size 2048;
      types_hash_bucket_size 64;
      include /etc/nginx/conf.d/*.conf;
      include /etc/nginx/sites-enabled/*;
    }
    
[/code]

**conf.d/default.conf**

[code]

    server {
        listen       80;
        server_name  localhost;
        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
       error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }
    
[/code]

**sites-available/default**

[code]

    server {
      listen 80;
      server_name vagrant.local;
      access_log /var/log/nginx/vagrant.local.access.log;
      location / {
        root /var/www/awesome-events/current/public;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
       if (!-f $request_filename) {
         proxy_pass http://127.0.0.1:3000;
         break;
        }
      }
    }
    
[/code]

**「ls -al /etc/nginx/sites-available/default」の結果**

> ops@ubuntu-14:~$ ls -al /etc/nginx/sites-enabled  
>  total 8  
>  drwxr-xr-x 2 root root 4096 Jun 28 09:16 .  
>  drwxr-xr-x 7 root root 4096 Jun 30 03:36 ..  
>  lrwxrwxrwx 1 root root 34 Jun 28 09:16 000-default -> /etc/nginx/sites-
> available/default

**awesome-events/current/public」確認結果**

> ps@ubuntu-14:~$ ls -l /var/www/awesome-events/current  
>  lrwxrwxrwx 1 ops ops 47 Jul 1 03:56 /var/www/awesome-events/current ->
> /var/www/awesome-events/releases/20180701035403  
>  ops@ubuntu-14:~$ ls -l /var/www/awesome-events/current/public  
>  total 16  
>  -rw-rw-r-- 1 ops ops 1722 Jun 26 11:07 404.html  
>  -rw-rw-r-- 1 ops ops 1705 Jun 26 11:07 422.html  
>  -rw-rw-r-- 1 ops ops 1635 Jun 26 11:07 500.html  
>  -rw-rw-r-- 1 ops ops 0 Jun 26 11:07 apple-touch-icon.png  
>  -rw-rw-r-- 1 ops ops 0 Jun 26 11:07 apple-touch-icon-precomposed.png  
>  lrwxrwxrwx 1 ops ops 44 Jul 1 03:54 assets -> /var/www/awesome-
> events/shared/public/assets  
>  -rw-rw-r-- 1 ops ops 0 Jun 26 11:07 favicon.ico  
>  -rw-rw-r-- 1 ops ops 98 Jun 26 11:07 robots.txt

**/var/log/nginx/vagrant.local.access.log**

> 10.0.2.2 - - [01/Jul/2018:03:59:55 +0000] "GET / HTTP/1.1" 403 169 "-"
> "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/605.1.15
> (KHTML, like Gecko) Version/11.1 Safari/605.1.15"

**sites-available/defaultの修正（tyr_filesディレクティブ）**

> server {  
>  listen 80;  
>  server_name vagrant.local;  
>  access_log /var/log/nginx/vagrant.local.access.log;  
>  root /var/www/awesome-events/current/public;  
>  location / {  
>  try_files $uri $uri/ @app;  
>  }  
>  location @app {  
>  proxy_set_header X-Real-IP $remote_addr;  
>  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
>  proxy_set_header Host $http_host;  
>  proxy_redirect off;  
>  proxy_pass <http://127.0.0.1:3000>;  
>  }  
>  }


CC BY-SA 4.0
2018-06-10T22:58:10.880
44674
2018-07-03T11:28:31.940
2018-07-01T06:14:32.273
28416
28416
question
ruby-on-rails nginx capistrano unicorn
unicornは動いているのに、アプリの画面が表示されない。


"conf.d/default.conf" で定義された server と、"sites-available/default" で定義さた server
がどちらも、80番ポートでリッスンされていることが問題ではないでしょうか?

試しに、"conf.d/default.conf" のリッスンポートを 8080 とかに変更し、 nginx を再起動すれば、 "sites-
available/default" の server に 80番ポートでアクセスできるようになるのではないでしょうか?


CC BY-SA 4.0
2018-06-30T08:12:38.597
45189
2018-06-30T08:12:38.597
44674
answer


`sites-available/default` が次になるように Chef の方を修正してみてください。`default_server`
オプションをつけることで明示的に `sites-available/default` の方をデフォルトにしています。

[code]

    server {
      listen 80 default_server;
      server_name vagrant.local;
           ::::
    
[/code]

もしくは、`nginx.conf` で `include /etc/nginx/conf.d/*.conf;`
の行をコメントアウトすれば、`conf.d/default.conf` の内容が無視されるので、結果的に `site-available/default`
の内容がデフォルトになると思います。（他にもファイルがある場合は、話が変わってしまうので 先述の方法のがおすすめです。）

もう一つの回避方法は、Webクライアント側の PC?で `vagrant.local` に対する名前解決が出来るようにしてください。具体的には hosts
ファイルに次の行を追加します。

[code]

    xxx.xxx.xxx.xxx   vagrant.local
    
[/code]

※「xxx.xxx.xxx.xxx」はサーバーのIPアドレス

こうすると、`sites-available/default` の方のバーチャルサーバーが応答を返すと思います。


CC BY-SA 4.0
2018-07-03T11:19:19.793
45269
2018-07-03T11:28:31.940
2018-07-03T11:28:31.940
5008
5008
44674
answer