Webサーバ

Nginxの設定反映時に「nginx: [warn] the “ssl” directive is deprecated」の警告が出る

yum で Nginx のバージョンも更新されたし、久し振りに再起動してもしておこうかと思ったのが間違いの始まり。

後から yum のログを確認したところ、以下のバージョン変更が行われていました。

[前回]
nginx-1.14.1-2.34.amzn1.x86_64

[今回]
nginx-1.16.1-1.37.amzn1.x86_64

再起動すると以下の警告メッセージ(エラーメッセージ)が表示されます。

SNI(Server Name Indication)で 10 個ほどのドメインを動かしているので、すべてのサイト設定において警告が出ている・・・。

nginx: [warn] the “ssl” directive is deprecated,
use the “listen … ssl” directive instead in /etc/nginx/conf.d/hoge.conf:9

今回はこの問題を解決してきたいと思います。

警告表示の原因

どうやら、冒頭でも書いた通り、nginx1.14 から nginx1.16 の間に何か仕様が変わった可能性があります。

そこで Nginx のリリースノートをチェックです。

なぜか 1.14 と 1.16 は CHANGE LOG があるのに 1.15 は見当たらないので、すべての変更をチェックします。

Changes with nginx 1.15.0 05 Jun 2018

*) Change: the “ssl” directive is deprecated; the “ssl” parameter of the
“listen” directive should be used instead.

CHANGES

Nginx の ssl ディレクティブのリファレンスにも以下の記載があります。

This directive was made obsolete in version 1.15.0. The ssl parameter of the listen directive should be used instead.

ssl directive

どうやら、Nginx1.15 で ssl ディレクティブが非推奨に変わったようですね。

代わりに listen ディレクティブに書けよということのようです。

リリースが 2018 年の 6 月なので、Amazon Linux の パッケージ更新がかなり遅かったのでしょうか。

1.15 は公式には世に出なかったのかもしれないので、1.16 になったタイミングで影響を受けたようですね。

対応方法

上記で書いた通り、ssl ディレクティブは削除(コメントアウトなど)して、listen ディレクティブに定義すれば問題ありません。

listen 443 ssl;
#ssl on;

後は Nginx のサービスを再起動して完了です。