カテゴリーアーカイブ インフラ

takahashi 著者:takahashi

[要注意] nginx バーチャルホストで複数ポートかつSSL有効化したら平文通信できなくなった話

家のサーバーのnginxの設定をしていたら完全にドジってはまったのでそのメモ。
自分のサーバー環境は諸事情でリバースプロキシ経由でウェブサーバー本体に接続する構成に変更中でして、Nginxをリバースプロキシとして設定していました。
構成は以下の通り。

自分のサイトは、もともとそれぞれサブドメインを割り当てたバーチャルホストが複数稼働している環境だったため、nginx側もバーチャルホストに対応すべく下のような設定にしていました。

すると

BadRequestのエラーが。
いろいろ試してもエラーが解消されず頭を抱えていたのですが、調べていたら以下のサイトを発見。

nginx連載6回目: nginxの設定、その4 – TLS/SSLの設定 – インフラエンジニア way
https://heartbeats.jp/hbblog/2012/06/nginx06.html

>sslディレクティブをonに設定すると、SSLが有効になります。ただし、listenディレクティブでsslパラメータを指定したときには不要です。

>ssl on;

>listenディレクティブにsslパラメータを付けると、そのポートでSSLを有効にして待ち受けるようになります。そのポートに関して後述するsslディレクティブをonにしたのと同じ動作になるため、sslディレクティブの記述は不要になります。

>listen 443 ssl;

あっ、なるほど…!
ssl on;
の記述をしてしまうと
server{}
内で定義されている全ポートにsslが有効になるので、80番ポートでアクセスしてもssl通信と解釈されてしまい、エラーが出ていたようです。
443ポートだけsslにしたい場合は

listen 443 ssl;

とだけ指定しておけば443ポートだけsslを有効にできるようです。

てっきり
“ssl on;”
を入れないとsslが有効にならないものと勘違いしていました(苦笑

さっきの設定を修正すると以下のようになりました。

これでnginxを再起動したところ、無事80番ポートの平文通信と443ポートのSSL通信両方ともできるようになりました。

分かってしまえばなんともくだらない間違いですが、大分焦りました。

もっと勉強せねば…


この記事は、以前筆者が書いた記事を一部変更したものです。

  • この記事いいね! (0)
著者:ym

WinSCP で AWS S3 ファイル操作

WinSCP が Amazon S3 に対応した様です

FFFTP はメンテ停止公表後、 2.0 リリースに向けて活動しているようですが、私自身はワンタイムパスワードとか使う機会はないので、すべて WinSCP になりました。ディレクトリ同時移動、SCP、SFTP、SSH トンネル越え SCP などにも対応しているので便利。

設定も簡単でした。Amazon S3 を選択して、アクセスキーとシークレットを登録するだけ。

AWS CLI もよいけど WinSCP コマンドでスクリプト制御もありかな。

  • この記事いいね! (0)
takahashi 著者:takahashi

Linux(Unix)のscreenの外からコマンドを実行する方法

LinuxやUnixでSSHにつなぎながら作業する際、時間のかかる処理を行わせたりでしばらく放置しておく機会と言うのはしばしばあります。

そんなときに、途中でインターネット接続が切れてしまうと最悪です。また、トラブル以外でもは会社の業務終了時間になって退社する時するなどでマシンの電源を落とさないといけない場面があったりします。

そんなときにscreenコマンドは便利です。
サーバー側に仮装のターミナルを作成し、そこで様々な処理を実行することが出来ます。
途中でSSHが切断されてしまっても、screenはサーバーの中で動作しているので、処理も続行されます。途中で処理させながらscreenターミナルから抜けることも、再度入ることも可能です。

また、スクリプトを簡易的にデーモンっぽく動作させる使い方もできます。

このscreenコマンドですが、実は外部からコマンドや文字列を与えることができるのはご存知でしょうか。

例えば、s1という名前でスクリーンを作成し、

$ screen -S s1

s1スクリーン内でpythonのプロンプトを起動しておきます。

$ python

Python 2.7.5 (default, Aug  4 2017, 00:39:18) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

このs1スクリーンに、外からs1の標準入力に対して文字列を入力したい場合、
まず、ctrl+a d でスクリーンをデタッチした後で、

$ screen -S s1 -X stuff 'print "Hello world!"
'`echo -ne '\015'`

とした後、再度screen -r s1 でアタッチすると

>>> print "Hello world!"
Hello world!
>>> 

と表示されているはずです!

これは例えば、screenで実行中のプログラムに文字列を渡したい時や、特定のscreenでのみ定期的にプログラムを実行したいときに有効です。

予めシェルスクリプトにしておけば、cronで回すことも出来ます。
便利なので、ぜひ一度試してみてはいかがでしょうか?

参考サイト:
Minecraftサーバをscreenとcronでプラグインを使わずに自動再起動する – 純規の暇人趣味ブログ

別ターミナルで動いているscreenに外部からコマンド実行 – 戯術者の日記

  • この記事いいね! (0)
takahashi 著者:takahashi

WindowsへのMeltdown対策によるCPUベンチマークの変化をMSが公表。旧CPUでは著しい速度低下も。

先日、Microsoftが気になるデータを公表しました。

プロセッサの脆弱性、Microsoftの対策パッチでパフォーマンス大幅低下も – IT Media エンタープライズ

先日発覚したCPUの脆弱性 Meltdown/Spectre の脆弱性対策としてMicrosoftが公開したWindowsへの対策パッチを適用した際のベンチマークを比較したところ、IntelCPUの 第6世代にあたるSkylake以降は特に目立った速度低下はないものの、第4世代にあたる Haswell以前のIntelCPUは相当な減速が確認された、という内容です。
特にHaswellを含むそれよりも古いCPUを搭載したWindows Server機はかなりのスペックダウンが発生する可能性があるようです。

Skylakeが初めてIntelから発売されたのが2015年8月ごろになる(Wikipedia)ので、少なくともこれより前に発売されたIntelCPU、およびそのCPUを搭載したPCはすべてこのスペックダウンの影響を大きく受ける可能性があるということになります。

比較的新しいCPUでもスペックダウンの対象になってしまっているという点で、なかなかショッキングな内容です。
ちなみに、僕が現在所有しているマシンは一番新しいもので第5世代のbroadwellのマシンなので、全滅でした。

なお、LinuxOSにおいても影響が出ているようです。
CPU脆弱性Meltdownのパッチ適用でベンチマークスコアが25%低下した – Qiita

ここまで影響が大きいと、ゲーム用のマシンや企業向けサーバーなどののスペックダウンに各方面からの悲鳴も聞こえてきそうですね。
現にAWSでかなり影響が出ているという報告もあるようです。
チップ脆弱性の修正パッチが招いた、サーヴァーの性能低下という「二次災害」の深刻度 – WIRED

引き続き、Intelや各OSベンダーがさらなる対策を行ってくれることを祈ります。

  • この記事いいね! (0)
takahashi 著者:takahashi

NginxでBASIC認証をプロキシするときの注意点

今回。hamamatsu-gnss.orgのサーバー切り替えを行ったのですが、移行先サーバでサービスの再起動後何故かBASIC認証が通らなくなる問題が発生。
80番ポートはWebページとポートを共有しているので、webサーバーとntripサーバーの前にNginxを置いて、ドメインで通信を振り分けています。
旧サーバーでは問題なく動いていたのですが、まったく同じ設定をコピーした新サーバーでは、RTKLIBからntripへ401ステータスで接続できなくなってしまいました。

ちなみに直で新サーバー側のntripへ接続すると、認証も問題なく通り、ログにも異常は見られなかったので、原因がNginxなのは間違いなさそうです。

認証の要らないsourcetableはNginx経由でも問題なく表示できたため、恐らくBASIC認証の際に必要なヘッダ情報が渡せていないのだろうと推測しました。
そこでいろいろ調べてみると、参考になりそうなサイトを発見。

Nginx を認証プロキシとして使う – Docker-docs-ja

正常にプロキシするには

      proxy_pass                          http://example.com;
      proxy_set_header  Host              \$http_host;   
      proxy_set_header  X-Real-IP         \$remote_addr; 
      proxy_set_header  X-Forwarded-For   \$proxy_add_x_forwarded_for;
      proxy_set_header  X-Forwarded-Proto \$scheme;

の記述が必要だったのですが、新サーバーの設定ファイルと見比べたところ

proxy_set_header  X-Forwarded-Proto \$scheme;

の記述が抜けていることがわかりました。
この一行を追記し、Nginxをリロード、もう一度試してみると…

無事接続できました!

Nginxはプロキシする際、バックエンドへ渡すヘッダー情報を自由に指定・編集することができるので、抜けがあると今回のようなことが起きます。
Nginxでシステムを構築した際は、こういう部分も気を付けてチェックしたいですね。

いやーしかし、今回は症状がちょっと奇妙だったのでちょっとだけ焦りました…(笑

  • この記事いいね! (0)
著者:ym

ホームゲートウェイとフレッツジョイント

NTT HGW (ホームゲートウェイ)

NTT HGW (ホームゲートウェイ)

以前まで他社のルータを使っていましたが、先日やむを得ず NTT のレンタルルータへ差し替えをしました。一般家庭向けに提供されるひかり電話対応ルータの為、至って簡単なルータなのですが、これがまた意外と簡単。今ではNTTルータへソフトウェアを自動配信する機能に対応している為、一晩ほっておけばソフトウェアがルータに配信され、インターネットにつながってしまうのです。しかも自動でソフトウェアバージョンも上がっていく。

それがフレッツジョイント機能。

フレッツ・ジョイント|フレッツ光公式|NTT西日本

しかし逆に今回の IPv6 化は PPPoE 接続は出来なくなってしまいます。でも、これはこれで複数接続が必要な場合は問題あり。そのうちまた戻す予定ですが、このスピードを味わうとなかなか戻れません。

ホームゲートウェイ(レンタル)|フレッツ光公式|NTT西日本

  • この記事いいね! (0)