これはハマった。
既存で動いているNginx + Ruby + Rails + Sidekiqの開発環境(Docker)を再構築していると、以下のように出落ち並に403が返ってくる。
ちなみにSidekiqは非同期処理を行いたい時に使うライブラリで、複数のジョブを同時に実行するとメモリーを節約すること可能。
今回やっとのことで原因解明したのでブログします!
■Cannot render console from 10.100.0.1! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
1 2 3 4 5 6 7 8 9 10 11 |
# cd log # ls development.log sidekiq.log unicorn.log # tail -f * ==> development.log <== Started GET "/sidekiq" for 127.0.0.1 at 2018-09-21 04:18:57 +0000 Cannot render console from 10.100.0.1! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255 ==> unicorn.log <== W, [2018-09-21T04:18:57.482253 #54151] WARN -- : attack prevented by Rack::Protection::IPSpoofing |
上記のようにエラーログから見ていきましょう。2つあります。
まずはRails/Dockerのエラーなので、下記のように追加すればエラーはなくなります。(これは楽ちん)
1 2 3 |
$ cd config/environments/ $ vim development.rb config.web_console.whitelisted_ips = '0.0.0.0/0' #追加 |
■WARN — : attack prevented by Rack::Protection::IPSpoofing
https://github.com/mperham/sidekiq/issues/3671
これや!!
え、Nginxの設定漏れか!?
・nginx.conf
1 2 3 4 5 |
~省略~ upstream unicornapp { server unix:/tmp/unicorn.sock; } ~省略~ |
・conf.d/adachin.jp.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
server { listen 80; server_name adachin.jp; # force https if ($http_x_forwarded_proto != https) { return 301 https://$server_name$request_uri; } # ELB SSL Termination set $elb_https off; if ($http_x_forwarded_proto = https) { set $elb_https on; } root /var/www/adachin; location / { proxy_pass http://unicornapp; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Ssl on; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Frame-Options SAMEORIGIN; proxy_set_header X-Sendfile-Type X-Accel-Redirect; } access_log /var/log/nginx/access.log main; error_log /var/log/nginx/error.log warn; |
ドメインはadachin.jpでござんす。
ハマったのはNginxのプロキシの部分。X-Forwarded-Forの設定漏れだった。。
/sidekiqにアクセスできるようにするにはroutes.rbに以下を追記すれば閲覧OK!!
1 2 3 4 5 6 7 |
# cat routes.rb Rails.application.routes.draw do # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html # sidekiq require 'sidekiq/web' mount Sidekiq::Web => '/sidekiq' end |
・restart
https://github.com/RVIRUS0817/shellscripts/tree/master/init.d
起動スクリプト系はギッハブに置いてるのでぜひ。
1 2 3 |
# /etc/init.d/unicorn restart # /etc/init.d/sidekiq restart # /etc/init.d/nginx restart |
https://adachin.jp/sidekiq
■まとめ
しかしコード自体がダメ!!!と疑うのはアカン。
0件のコメント