質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.40%
nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

1回答

343閲覧

SSL設定をしたのですが、表示が404 Not Found

wozniac777

総合スコア5

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2024/07/06 03:44

実現したいこと

SSL設定が正常に稼働して、鍵付きのURLにしたい。

ネットで調べながら以下の設定は全て行いました。
cd /etc/nginx/ssl

①プライベートキーの作成
openssl genrsa -des3 -out server.key 2048

②CSRファイルの作成
openssl req -new -key server.key -out server.csr

③conohaのコントロールでCSRファイルのコピー
④証明書の発行
⑤サーバーに証明書を配置(証明書PEMと中間証明書ICAのコピペ)
vim server.crt→コピペ
⑥SSLの設定ファイルをconf.d内に作成
vim /etc/nginx/conf.d/ssl.conf
server{
listen 443 ssl;
server_name www.ドメイン.com;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
}
server{
listen 443 ssl;
server_name ドメイン.com;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
}

⑦443ポートの開放
firewall-cmd --add-port=443/tcp --zone=public --permanent
firewall-cmd --reload

⑧nginxの再起動
sudo systemctl restart nginx

発生している問題・分からないこと

SSL設定をしたのですが、表示が404 Not Foundでhttps://ドメイン名で表示されません。ちなみにhttp://ドメイン名では表示されています

nginxの再起動をした際に、以下のエラーが発生

nginx: [emerg] cannot load certificate key "/etc/nginx/ssl/server.key": PEM_read_bio_PrivateKey() failed (SSL: error:1400006B:UI routines::processing error:while reading strings error:048000>

このエラーを調べたところ、
原因:プライベートキーにはパスフレーズ要件がありますが、nginxはパスフレーズを使用するように設定されていません。

と言うことでしたので、
mv server.key server_pass.key(ファイル名変更)

再度、パスフレーズ無でプライベートキーを作成しました
openssl rsa -in server_pass.key -out server.key

これが正直あっているのか分かりません。全てやり直しでしょうか?

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

「SSL設定 conohaVPS」
や「SSL 404 not found」などで調べましたが、同様のエラーが見つかりませんでした。

補足

CentOS Stream9Nginx+uWSGI

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wozniac777

2024/07/06 05:44

MENTAにも解決のために募集をかけました。問題解決が出来ましたら、今回の解決方法を載せたいと思います。
otn

2024/07/06 06:57

> 再度、パスフレーズ無でプライベートキーを作成しました の後の状況が書かれてませんが、PEM_read_bio_PrivateKey() failed のエラーは無くなったが、 ブラウザからのリクエストには、全く同じ応答(404 Not Found)ということでしょうか?
wozniac777

2024/07/06 07:14

はい。エラーはなくなりnginxを再起動させて、正常に動作しています。
wozniac777

2024/07/06 07:16

ブラウザのリクエストは相変わらず、404のままです。ちなみに何ですが、SSLの証明書を取得して浸透時間などあるのでしょうか? 全くどうしていいものか検討が付きません
dodox86

2024/07/06 07:30

> server{ > listen 443 ssl; > server_name ドメイン.com; > ssl_certificate /etc/nginx/ssl/server.crt; > ssl_certificate_key /etc/nginx/ssl/server.key; > } 質問文中での記載を省略しているのかもしれませんが、serverディレクティブの中にrootディレクティブが正しく設定されていないだけ、と言うことはありませんか。http用のものと比べてみてください。以下のようなもののはずです。 server { root /var/www/html; }
wozniac777

2024/07/06 08:03

ありがとうございます。 試してみます!
wozniac777

2024/07/06 15:56

いくつか調べたサイトが省略だとは思いませんでした。前に書いたnginx.confの残りの行全てコピペしたら、表示できました。MENTAに募集していましたが、解決出来て、本当に助かりました。教えていただき、ありがとうございます。もしかしたら、同じ問題で躓く人がいるかもしれないので、コードを載せておきます。 server{ listen 443 ssl; server_name ドメイン.com; ssl_certificate /etc/nginx/ssl/server.crt; ssl_certificate_key /etc/nginx/ssl/server.key; 以下を追加 charset utf-8; client_max_body_size 75M; root /var/www/ドメイン; location / { try_files $uri @myapp; } location @myapp { include uwsgi_params; uwsgi_pass unix:/var/www/ドメイン/app_uwsgi.sock; } }
wozniac777

2024/07/06 16:00

dodox86さんのコメントにより、解決出来ました。 ベストアンサーに選びたいです。回答じゃないからなのかな?ベストアンサーに選ぶ方法が良く分からないです。凄く感謝しています。ありがとうございます。
dodox86

2024/07/06 18:31

解決できて良かったですね。先だっての私のコメントは回答ではなく、 「SSLの証明書の問題はとりあえず置いておいて、404(Not Found)だからnginxの設定のrootかlocationが正しく設定されてないんじゃないかな? 質問文中では全部の設定の記載を省略しているのかもしれないけど」 と思っての確認でした。 ※nginxの公式のリファレンスです https://nginx.org/en/docs/http/ngx_http_core_module.html#root > ベストアンサーに選びたいです。回答じゃないからなのかな?ベストアンサーに選ぶ方法が良く分からないです。 回答は質問者さんご自身が投稿して「自己解決」として終わらせることができます。原因と修正した内容を記載して、閉じてもらえれば結構です。よろしくお願いします。
wozniac777

2024/07/06 22:18

本当にありがとうございました。 では、自己解決として閉じさせて頂きます。
otn

2024/07/07 00:01

nginxの設定を自分でやったことはないのですが、ドキュメントルートの指定がなくてもデフォルト値のディレクトリーになるはずなので、404にはなるまいと思っていました。 ググってみると、存在する空のディレクトリならnginxでも403になるようです(あるいは設定によりディレクトリリスティング)。 ということは、少なくともお使いの環境では、ドキュメントルートのデフォルト値は存在しないディレクトリーで、ドキュメントルートを明示的に指定しないと常に404ということなのでしょうかね。
dodox86

2024/07/07 03:39

otnさんのコメントを読み、rootの指定が無い場合に実際にどのディレクトリを参照しようとするのか、あるいは参照しないのか気になったので手持ちのnginx環境で確認してみました。WSL/Ubuntu上のnginx 1.18.0です。 まず、nginxをビルドするときのconfigureのprefix=の指定ディレクトリを元に、その下のhtml/ディレクトリを既定値とするようです。--prefix=/usr/share/nginx と指定したconfigure、ビルドした場合、/usr/share/nginx/html が既定値になります。 で、このことを踏まえるとotnさんのコメント通りで、 (1) ディレクトリが存在して、index.htmlが存在しない場合、403(Forbidden) (2) ディレクトリが存在しない、又はディレクトリが存在してindex.htmlが存在しない場合、404(Not Found) となりました。(※ nginxはaptでインストールしたものですが、configure時のオプションは nginx -V の実行で確認しました) 以上、単なる情報としてコメントしておきます。
otn

2024/07/07 05:13

情報ありがとうございます。 (1)(2)で、「ディレクトリが存在してindex.~が存在しない場合」に矛盾することが書いてあります。URLがhttps://example.com の場合はおそらく(1)の通り403だと思うのですが、(2)はコメント追記時の修正漏れですかね。https://example.com/index.html だともちろん404でしょうけど。
dodox86

2024/07/07 06:25

otnさん、ご指摘どうもありがとうございます。おっしゃるとおり記載内容が矛盾していました。試した結果の説明として以下が正しいものです。 (1) ディレクトリが存在して、index.htmlが存在しない場合 -> 403(Forbidden) (2) ディレクトリが存在しない場合 -> 404(Not Found) ※先の私の間違ったコメントは、話の流れが分かるようにそのまま残しておこうと思います。
otn

2024/07/07 07:23

dodox86さん、ありがとうございます。 wozniac777さん: > いくつか調べたサイトが省略だとは思いませんでした。 デフォルトのドキュメントルートの場所をそのまま使っているのであれば、rootを書く必要はそもそも無いので、おそらくそのサイトの方は省略しているという意識は無いと思いますよ。 同一サーバーに複数ドメイン相乗りとかだと、ドメイン毎にrootは書いていると思いますが。
wozniac777

2024/07/07 12:47

お二方、こんな質問から、ここまでのコメントを感動するレベルです。 なるほどですね。当然のようにデフォルトルートがあり、それでも問題のない構成の方もいますよね・・・。とても勉強になりました。1つの疑問からここまで、調べる能力見習いたいです。お二人とも本当にありがとうございました。
guest

回答1

0

自己解決

原因:サイトを調べながら、おこなっていたのですが、省略だと気づかなかったのが原因でした。同じ記載をするので、もとあったコードの追加で十分だと思ったのも、僕自身が未熟者だったからです。

解決したコードは以下のようになります。

server{ listen 443 ssl; server_name ドメイン.com; ssl_certificate /etc/nginx/ssl/server.crt; ssl_certificate_key /etc/nginx/ssl/server.key;

以下を追加 charset utf-8; client_max_body_size 75M; root /var/www/ドメイン; location / { try_files $uri @myapp; } location @myapp { include uwsgi_params; uwsgi_pass unix:/var/www/ドメイン/app_uwsgi.sock; } }

投稿2024/07/06 22:22

wozniac777

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.40%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問