Nginxでヘッダーにアンダースコアが使えない件

 

Nginxでヘッダーにアンダースコアが使えない!!!

 

◼︎解決方法

  •  ヘッダーのアンダースコア( _ )をハイフン( - )に変更する
  • (代替案) nginx.confに underscores_in_headers on を追記する

 

◼︎調べたこと

curl -i -H 'ACCESS_TOKEN: f1dea7d27c4ffd8************' -X GET http://hoge.com/api/v1/users/1

 

こんな感じでNginxに乗っけたAPIに、カスタムヘッダーを使ってリクエスト投げてたんですがうまく拾えてないみたい。調べてみたらこんなの出て来ました。

underscores_in_headers」ってオプション。

 

  

でもデフォルトでoffなのなぜ?調べたらHTTPの仕様で、ヘッダーに評価できない文字が含まれていたらアンダースコアに変換するらしい。なるほど。

 

Environment Variables in Apache – Apache HTTP Server Version 2.5

 

curl -i -H 'ACCESS-TOKEN: f1dea7d27c4ffd8************' -X GET http://hoge.com/api/v1/users/1

 

ヘッダを修正する方がよさそうですね。アンダースコアをハイフンに変更したらうまく拾ってくれました。

 

cronでawscliの実行にはまった件

amazon web serviceのサービスをコマンドで操作できるスクリプトがawscliです。

 

導入については、以下のリンクを読めばおけ。

 

今回、cronで動かしていたバッチでawscliコマンドが実行されていない問題がありました。基本的なところでしたが、地味にはまったのでメモです。

 

結論から言うと、

原因は.aws以下の認証ファイルをcron実行時の環境変数で参照できていなかったことです。

 

awscliでは、$HOME直下の.awsを参照しにいくため、cron実行時の環境変数で.awsの認証ファイルを見つけることができていなかったというくそミス。cron実行権限での環境変数を確認したほうがいいです。

 

今回は、cron実行権限での$HOME直下に、.awsのシンボリックリンクを貼って対応。

 

認証ミスが確認できるようなエラーを吐かなかった(むしろ普通に実行できた)ので、的外れなとこから確認始めたせいで少し時間がかかった。

 

 

■参考URL

dockerコンテナ上のサービスに別ホストからアクセスする

 

dockerコンテナで動いているREST APIにiPhoneアプリから接続する。

前提として、接続端末が同一のネットワークにいる必要がある。

今回は、macbookとiPhoneをUSBケーブルで接続。macbookのネットワーク設定から、iPhone USBをネットワークに加えた。

 

環境

osx10.9.5(virtualbox上のdockerコンテナにサービスが立ち上がっている)

ios8.2(今回の別ホストにあたる)

 

方法

virtualbox上のboot2dockerは、デフォルトの状態ではホストオンリーのネットワーク設定になっているので、iPhoneから接続できるようにブリッジ接続の設定をしてやる必要がある。まず、boot2dockerを停止する。virtualboxのGUIのネットワーク設定を開き、アダプター3を有効に、割り当てをブリッジアダプターに変更する。その後、OKを押してboot2dockerを起動。接続ipに関しては、boot2dockerにssh接続して、ifconfigコマンドで調べれば準備おっけー。

 

ブリッジ接続に割り当てられているipをiphoneから入力して接続確認をしてみてください。