概要: Nginxにおけるポート80(HTTP)と443(HTTPS)の基本的な設定から、効果的なリダイレクト方法、さらにはポート競合や共存の解決策までを解説します。運用上のよくある課題と解決策を通して、Nginxの安定稼働をサポートする知識を提供します。
Nginxポート80/443設定の基本と効率的な運用戦略
HTTP(80)とHTTPS(443)の役割とNginxの重要性
ウェブ通信において、ポート80はHTTP(Hypertext Transfer Protocol)の標準ポートであり、ポート443はHTTPS(Hypertext Transfer Protocol Secure)の標準ポートとして機能します。HTTPはデータが暗号化されない平文で送受信されるため、盗聴や改ざんのリスクが伴います。これに対し、HTTPSはTLS/SSL(Transport Layer Security/Secure Sockets Layer)プロトコルによって通信が暗号化されるため、データのセキュリティが大幅に向上し、現在のWebサイト運用における必須規格となっています。
Nginxは、単に静的ファイルを配信するだけでなく、リバースプロキシとして非常に重要な役割を担います。具体的には、外部からのアクセスを一元的に受け付ける「入口の集約」を行い、ポート80と443の通信を効率的に管理します。さらに、HTTPS通信の暗号化と復号を行う「TLS終端」機能を提供することで、バックエンドのアプリケーションサーバーがセキュリティ処理の負担から解放され、より効率的なサービス提供が可能になります。これにより、Webサーバー全体のパフォーマンスとセキュリティの両面で大きなメリットがもたらされます。
現在のウェブ環境では、ユーザーのプライバシー保護とデータセキュリティの観点から、HTTPのみでの運用は推奨されません。Nginxを活用することで、安全なHTTPS通信を確立しつつ、高速かつ安定したWebサービスを提供できる基盤を構築できます。
常時SSL化の重要性とNginxでの基本的な実現方法
「常時SSL化」とは、Webサイトのすべてのページ、すべての通信をHTTPSで行うことを指し、現在のWebサイト運用において不可欠なセキュリティ対策です。総務省のガイドラインでも、インターネットに公開するWebサイトでは情報の盗聴や改ざん防止のため、常時SSL化が強く推奨されています。世界中の安全なWebサイトにおいて、安全なデータ転送のためにHTTPSが使用されている割合は95%以上にも上り(Private Internet Access、2026年7月時点)、国内主要企業サイトにおける常時SSL化対応状況も約10割に達しているとの調査結果もあります(王道DX、2023年8月28日時点)。これらのデータからも、常時SSL化がグローバルスタンダードであることが明確に伺えます。
Nginxで常時SSL化を実現するには、主に以下の手順を踏みます。まず、信頼できる認証局からSSL/TLS証明書を取得し、サーバーに配置します。次に、Nginxの設定ファイル(通常は/etc/nginx/nginx.confや/etc/nginx/conf.d/内のファイル)を編集し、ポート443でHTTPS通信を受け付けるserverブロックを設定します。この設定では、取得したSSL証明書と秘密鍵のパスを指定します。同時に、ポート80でHTTP通信を受け付けるserverブロックも用意し、そこからのアクセスはすべてポート443のHTTPSへリダイレクトするように設定します。
このように設定することで、ユーザーが誤ってHTTPでアクセスした場合でも自動的にHTTPSに切り替わり、常に安全な通信が保証されます。これにより、ユーザーの信頼を得られるだけでなく、検索エンジンの評価向上にも繋がる可能性があります。また、ポート80をリダイレクト専用と割り切ることで、セキュリティ上のリスクを最小限に抑えつつ、効率的な運用を継続できるでしょう。
Nginxのイベント駆動モデルによる高効率な処理の仕組み
Nginxが現代のWebシステムで広く採用されている理由の一つに、その独自の「イベント駆動方式」アーキテクチャがあります。この仕組みは、大量のリクエストを少数のプロセスで非常に効率的に処理することを可能にします。従来のプロセス・スレッドベースのWebサーバーでは、一つのリリクエストごとに新しいプロセスやスレッドを生成することが多く、同時接続数が増加するとメモリ消費量やCPU負荷が増大し、パフォーマンスが低下する傾向がありました。しかし、Nginxのイベント駆動方式では、単一のプロセスで複数の接続を非同期的に処理するため、リソースの消費を抑えつつ、高い同時接続数を安定して捌くことができます。
具体的には、Nginxはクライアントからのリクエストが発生した際に、そのイベントを検知し、適切なワーカープロセスに処理を割り当てます。ワーカープロセスは、データ転送中にブロックされることなく、他の接続からのイベントを並行して処理できるため、システムの応答性が向上します。この高効率なアーキテクチャは、ポート80/443からの多様なアクセスをスムーズに受け付け、必要に応じてバックエンドのアプリケーションサーバーへ安全かつ迅速に転送する上で非常に有利です。
特に、リバースプロキシとしてTLS終端を行う場合、証明書の処理や暗号化・復号化のオーバーヘッドが発生しますが、Nginxのイベント駆動モデルはこの処理も効率的にこなします。これにより、バックエンドのアプリケーションは複雑な暗号化処理をNginxに任せ、本来のビジネスロジックに集中できるため、システム全体の安定性とパフォーマンスが向上します。Nginxは、ピーク時でも安定したサービス提供を可能にする、堅牢なWebサーバー基盤を構築するために不可欠な要素と言えるでしょう。
出典:Private Internet Access、王道DX、総務省、Qiita
HTTPからHTTPSへ!Nginxリダイレクト設定の具体的な手順
HTTP(80)からのリダイレクト設定の基本
NginxでWebサイトを常時SSL化する上で、ポート80(HTTP)からのアクセスをポート443(HTTPS)へ自動的にリダイレクトする設定は必須です。この設定により、ユーザーがURLに「http://」と入力したり、ブックマークからHTTPでアクセスしたりした場合でも、確実に安全なHTTPS接続に誘導することができます。リダイレクトは、Nginxのserverブロック内でシンプルに設定可能です。
基本的な設定としては、まずポート80をlistenするserverブロックを作成します。このブロック内では、return 301 https://$host$request_uri;というディレクティブを使用します。301は永続的なリダイレクトを意味するHTTPステータスコードであり、検索エンジンに対してもURLが恒久的に変更されたことを伝え、SEOの観点からも推奨されます。$host変数にはリクエストされたホスト名が、$request_uri変数にはリクエストされたURIが自動的に挿入されるため、どのようなURLでアクセスされても正しいHTTPSのURLへ転送されます。
例えば、example.comへのHTTPアクセスをHTTPSにリダイレクトする場合、以下のような設定をNginxの設定ファイルに記述します。この設定を適用する際は、Nginxのコンフィグレーションファイルが正しい構文であるかsudo nginx -tコマンドで確認し、問題なければsudo nginx -s reloadコマンドでNginxを再起動またはリロードすることを忘れないでください。この手順を踏むことで、効率的かつ確実に常時SSL化を実現できます。
ワイルドカードと正規表現を用いた柔軟なリダイレクト設定
複数のドメインやサブドメインをNginxで管理している場合、一つ一つリダイレクト設定を記述するのは手間がかかり、設定ミスを招く可能性もあります。このような場合に役立つのが、ワイルドカード(*)や正規表現を用いた柔軟なリダイレクト設定です。これにより、複数のserver_nameに対して共通のリダイレクトルールを適用できるようになり、設定の簡素化と管理の効率化が図れます。
例えば、Nginxのserver_nameディレクティブでワイルドカードを使用することで、*.example.comのように複数のサブドメインをまとめて指定し、それらすべてからのHTTPアクセスをHTTPSにリダイレクトさせることが可能です。また、より複雑なリダイレクトロジックが必要な場合は、locationブロック内で正規表現を用いたrewriteディレクティブを活用できます。例えば、特定のパス以下のみを別のURLにリダイレクトしたい、といった場合に有効です。
ただし、正規表現の使用は非常に強力である反面、複雑になりすぎると意図しない動作を引き起こしたり、Nginxのパフォーマンスにわずかながら影響を与えたりする可能性もあります。設定を行う際は、正規表現の挙動を十分に理解し、事前にテスト環境で徹底的に検証することが重要です。また、永続的なリダイレクト(301)を多用しすぎると、ブラウザキャッシュによる問題が発生することもあるため、適切な使用を心がけましょう。
リダイレクト設定後の動作確認と注意点
Nginxのリダイレクト設定を適用した後は、その設定が意図通りに機能しているか、必ず動作確認を行う必要があります。設定の有効化は、まずsudo nginx -tコマンドで設定ファイルの構文チェックを行い、エラーがなければsudo nginx -s reload(またはrestart)コマンドでNginxをリロードします。これにより、新しい設定がシステムに反映されます。
動作確認の方法としては、ウェブブラウザを開き、対象のドメインにHTTP(http://)でアクセスしてみます。正しく設定されていれば、自動的にHTTPS(https://)に切り替わり、アドレスバーに鍵マークが表示されるはずです。さらに詳細な確認のためには、ブラウザの開発者ツール(通常はF12キーで開く)の「ネットワーク」タブを使用すると便利です。HTTPでアクセスした際のリクエストが、ステータスコード301 Moved PermanentlyでHTTPSにリダイレクトされていることを確認できます。
また、コマンドラインツールcurlを使う方法も非常に有効です。例えば、curl -I http://your_domain.comと実行することで、HTTPヘッダー情報のみが表示され、LocationヘッダーにHTTPSのURLが、ステータスコードにHTTP/1.1 301 Moved Permanentlyが含まれているかを確認できます。注意点として、一度ブラウザでHTTPアクセスを試みると、ブラウザのキャッシュによってリダイレクト情報が保持され、再確認時に正しく動作しない場合があります。この場合は、ブラウザのキャッシュをクリアするか、シークレットモード/プライベートブラウジングモードで確認すると良いでしょう。
- SSL証明書が有効期限内で、正しくインストールされているか。
- Nginx設定ファイルの構文チェック(
sudo nginx -t)でエラーがないか。 - Nginxのサービスが正常にリロードされているか(
sudo nginx -s reload)。 - ブラウザでHTTPアクセス(例:
http://example.com)がHTTPSに自動転送されるか。 - 開発者ツールや
curl -Iで301リダイレクトとLocation: https://...ヘッダーを確認できるか。 - ファイアウォール(OS、クラウド)でポート80と443が適切に開かれているか。
複数ポートやロードバランサー利用時のNginx設定例
複数ドメイン・複数サイトを単一Nginxで管理する方法
Nginxは、単一のサーバーインスタンス上で複数のドメインやサブドメイン(通称バーチャルホスト)を効率的に管理できる強力なリバースプロキシとして機能します。これは、異なるドメインからのリクエストをそれぞれ独立したWebサイトやアプリケーションへルーティングすることで実現されます。この機能は、serverブロック内のserver_nameディレクティブを適切に設定することで利用できます。
例えば、example.comとblog.example.comという二つの異なるWebサイトを一つのNginxで運用する場合、それぞれに対して独立したserverブロックを定義します。各serverブロックでは、server_nameに該当するドメインを指定し、そのドメインへのリクエストを処理するための設定(ルートディレクトリ、プロキシ先、SSL証明書など)を記述します。これにより、Nginxは受け取ったリクエストのHostヘッダーを見て、どのserverブロックの設定を適用すべきかを判断し、適切なコンテンツを配信したり、バックエンドのアプリケーションサーバーへ転送したりします。
HTTPSを適用する際は、各ドメインに対して個別のSSL証明書が必要となる場合があります。Let’s Encryptのようなサービスを利用すれば、複数のドメインに対して無料で証明書を取得し、自動更新の仕組みを構築することも可能です。このように、Nginxを活用することで、物理サーバーの台数を抑えつつ、柔軟かつスケーラブルなWebサービス運用環境を構築できます。
ロードバランサーとしてのNginx設定とアップストリーム活用
Nginxは、単なるWebサーバーやリバースプロキシに留まらず、ロードバランサーとしても優れた機能を発揮します。複数のアプリケーションサーバー(バックエンドサーバー)がある環境において、Nginxをロードバランサーとして配置することで、クライアントからのリクエストをこれら複数のサーバーに分散させ、システムの可用性とパフォーマンスを向上させることができます。
ロードバランシングをNginxで設定する基本的な方法は、まずupstreamブロックを用いてバックエンドサーバーのグループを定義することです。このupstreamブロック内で、IPアドレスやポート番号、あるいはドメイン名で複数のバックエンドサーバーを指定します。例えば、upstream backend_servers { server 192.168.1.100:8080; server 192.168.1.101:8080; }のように記述します。その後、Nginxのserverブロック内で、クライアントからのリクエストをこのupstreamグループにプロキシするようproxy_pass http://backend_servers;のように設定します。
Nginxは複数のロードバランシングアルゴリズムをサポートしており、デフォルトでは「ラウンドロビン」(順番にリクエストを分散)が使用されます。他にも、クライアントのIPアドレスに基づいて特定のサーバーに固定する「IPハッシュ」や、最も接続数の少ないサーバーにリクエストを転送する「least_conn」など、用途に応じたアルゴリズムを選択できます。これにより、特定のサーバーへの負荷集中を防ぎ、全体として安定したサービス提供を実現することが可能です。
TLS終端と内部通信のセキュリティ戦略
Nginxをリバースプロキシおよびロードバランサーとして利用する際、特に重要なのが「TLS終端」(SSLオフロード)の概念と、内部通信のセキュリティです。TLS終端とは、外部からのHTTPS通信をNginxが受け付け、そこで暗号化を復号してから、HTTP(平文)または別の暗号化されたチャネルでバックエンドのアプリケーションサーバーへ転送する仕組みを指します。これにより、アプリケーションサーバー側でSSL証明書の管理や暗号化・復号の処理を行う負担が軽減され、アプリケーションは本来のビジネスロジックに集中できるようになります。
しかし、TLS終端によってNginxとバックエンドサーバー間の通信がHTTPになる場合、この内部通信経路のセキュリティが新たな課題となります。もしこの内部ネットワークが外部からアクセス可能な環境にあると、データが盗聴されるリスクが発生する可能性があります。そのため、Nginxとアプリケーションサーバー間の通信は、可能であればプライベートネットワーク上に配置するか、あるいは両者間でも追加の暗号化や認証を施すことが強く推奨されます。例えば、内部通信にもHTTPSを使用したり、VPNを介したりする方法が考えられます。
セキュリティは多層防御の考え方に基づき、Nginxの外部に面する部分だけでなく、システム全体の構成において考慮されるべきです。適切なネットワーク分離、ファイアウォール設定、そして内部通信の保護を組み合わせることで、強固なセキュリティ体制を構築できるでしょう。
出典:Qiita
Nginxポート設定で陥りやすいトラブルとその回避策
ポート競合の診断と解決策
Nginxのポート設定で最も頻繁に遭遇するトラブルの一つが、ポート競合です。これは、Nginxが使用しようとしているポート(特にWebサーバーで一般的なポート80や443)が、すでにシステム上で別のプロセスによって占有されている場合に発生します。Nginxが起動しない、または指定したポートでリクエストを受け付けない場合、まずこのポート競合の可能性を疑うべきです。
ポート競合を診断するためには、Linuxシステムで利用できるコマンドラインツールが非常に役立ちます。例えば、sudo netstat -tulnp | grep :80やsudo lsof -i :443といったコマンドを実行することで、特定のポートをリッスンしているプロセスとそのPID(プロセスID)を特定できます。これらのコマンドの結果から、Nginx以外のプロセスが目的のポートを使用していることが判明した場合、それが競合の原因である可能性が高いです。
解決策としては、競合しているプロセスを特定し、そのプロセスを停止するか、またはNginxのlistenポートを変更するかのいずれかを選択します。例えば、Apacheなどの別のWebサーバーが同じポートを占有している場合は、一方のサービスを停止するか、ポート番号を変更して衝突を避けます。不要なサービスがポートを占有している場合は、そのサービスを無効化またはアンインストールすることも検討してください。ポート設定変更後は、必ずsudo nginx -tで設定ファイルの構文をチェックし、sudo nginx -s reloadで設定を反映させることを忘れないでください。
ファイアウォール設定とセキュリティグループの問題
Nginxの設定が正しく、ポート競合も発生していないにもかかわらず、外部からWebサイトにアクセスできない場合、ファイアウォールやセキュリティグループの設定が原因である可能性が高いです。サーバーのファイアウォール(例えばLinuxのiptables, firewalld, ufwなど)や、AWSやGCP、Azureといったクラウドサービスにおけるセキュリティグループ(ネットワークACL)は、特定のポートやIPアドレスからの通信を許可または拒否するためのルールを定めています。
Nginxがポート80(HTTP)とポート443(HTTPS)でリクエストを受け付けるように設定されていても、これらのポートがファイアウォールやセキュリティグループによって外部からのアクセスがブロックされていると、ユーザーはWebサイトに到達できません。この問題を解決するためには、まずサーバーで稼働しているファイアウォールの状態を確認します。例えばUbuntuなどではsudo ufw statusコマンドでUFW(Uncomplicated Firewall)のルールを確認でき、必要に応じてsudo ufw allow 80/tcpやsudo ufw allow 443/tcpといったコマンドでポートを開放します。
クラウド環境を利用している場合は、プロバイダーの管理コンソールにログインし、該当するインスタンスやサービスに適用されているセキュリティグループのインバウンドルール(受信ルール)を確認してください。ポート80と443に対して、適切な送信元IPアドレス(例えば0.0.0.0/0でどこからでも許可)からのTCP通信が許可されていることを確認することが重要です。また、SSH接続に使用するポート(通常22番)も同時に確認し、自身の管理用IPアドレスからのみアクセスを許可するなどのセキュリティ対策も講じると良いでしょう。
SSL証明書エラーと設定ミスの特定
HTTPS通信が確立できない、またはウェブブラウザでセキュリティ警告が表示されるといった問題は、SSL証明書に関連するエラーやNginxの設定ミスに起因することが非常に多いです。SSL証明書が正しく設定されていない場合、NginxはHTTPSリクエストを処理できず、クライアントは安全な接続を確立できません。
主な原因としては、SSL証明書のファイルパスが間違っている、秘密鍵と証明書が一致していない、中間証明書(Chain Certificate)が正しく設定されていない、または証明書の有効期限が切れている、といった点が挙げられます。Nginxの設定ファイル(通常nginx.conf内のserverブロック)で、ssl_certificateとssl_certificate_keyディレクティブで指定されたファイルパスが正しいか、そしてそれらのファイルがサーバー上に存在し、Nginxが読み取る権限を持っているかをまず確認してください。中間証明書が必要な場合は、ssl_trusted_certificateまたはssl_certificateに証明書と中間証明書を連結したファイルを指定する必要があります。
証明書の有効期限切れは特に見落としがちなトラブルです。openssl x509 -in /path/to/your_certificate.crt -noout -datesコマンドを実行することで、証明書の開始日と終了日を確認できます。期限が切れている場合は、新しい証明書を取得し、更新する必要があります。また、オンラインのSSLチェッカーツール(例: SSL LabsのSSL Server Test)を利用すると、証明書チェーンの欠落や設定の不備、脆弱性などを包括的に診断できるため、問題特定の強力な手助けとなります。これらの確認を一つずつ行うことで、HTTPS接続の問題を効率的に解決できるでしょう。
【ケース】ポート競合によるサービス停止から学ぶ設定最適化
架空のケーススタディ:ウェブサーバーの突然の停止
ある日、あなたのウェブサイトが突然アクセス不能になったとします。ユーザーからの報告で事態を把握し、緊急対応が始まりました。サーバーにログインしてNginxの稼働状況を確認すると、どうやらNginxサービス自体が起動していない、あるいはポートが応答していない状況です。システムログやNginxのエラーログを確認しても、直接的なエラーメッセージが見つからない、あるいは「ポートがすでに使用されている」といった曖昧なメッセージが表示されるだけです。
この架空のケースでは、トラブルの原因はポート競合でした。実は、数日前に開発チームが新しいアプリケーションをデプロイする際、誤ってApacheサーバーがNginxと同じポート80および443をlistenするように設定してしまっていたのです。Nginxはシステム起動時に先にこれらのポートを確保しようとしますが、すでにApacheが占有していたため、起動に失敗するか、あるいは部分的にしか機能しない状態に陥っていました。ウェブサイトの停止は、この競合によってNginxが適切に機能しなかった結果でした。
このような状況は、複数のWebサービスを同じサーバーで運用しようとする際や、既存の設定を見直す際に不注意で発生しやすいトラブルです。特に、自動起動設定やスクリプトが意図しないプロセスを起動させてしまい、知らず知らずのうちにポートを占有してしまうケースも考えられます。ウェブサイトの停止はユーザー体験を大きく損ない、ビジネスにも影響を与える可能性があるため、迅速な原因特定と解決が求められます。
トラブルシューティングと根本原因の特定手順
ウェブサーバーのサービス停止という緊急事態に直面した場合、迅速なトラブルシューティングが求められます。架空のケースでは、Nginxが起動しない、または応答しないことが確認されました。この場合、以下の手順で根本原因を特定し、解決へと導くことができます。
- Nginxログの確認: まず、
/var/log/nginx/error.logを確認します。ここで「address already in use」のようなメッセージがあれば、ポート競合の強い兆候です。 - システムログの確認:
journalctl -xeや/var/log/syslogなどを確認し、システム起動時やNginx起動試行時に何らかのエラーや警告が出ていないかを調べます。 - ポート占有プロセスの特定:
sudo netstat -tulnp | grep ":80"およびsudo netstat -tulnp | grep ":443"コマンドを実行します。これにより、ポート80と443をリッスンしているプロセスとそのPIDを特定できます。このケースでは、NginxのPIDではなく、ApacheのPIDが表示され、Apacheがポートを占有していることが明らかになりました。 - 競合プロセスの停止: 特定されたApacheサービスを
sudo systemctl stop apache2(またはhttpd)コマンドで一時的に停止します。 - Nginxの再起動: Apacheが停止されたことを確認した後、
sudo systemctl start nginxでNginxを再起動します。この時、Nginxが正常に起動し、ウェブサイトにアクセスできることを確認します。
この一連の作業により、応急処置としてウェブサイトの復旧が可能です。しかし、これはあくまで一時的な対応であり、根本的な再発防止策を講じる必要があります。
再発防止と設定の最適化戦略
サービス停止の原因がポート競合であると特定された後、最も重要なのは再発防止と設定の最適化です。架空のケースでは、開発チームが誤ってApacheを起動してしまったことが原因でした。このようなヒューマンエラーや設定ミスを防ぐための戦略を講じることが重要です。
まず、ポート利用状況の事前確認を徹底することが挙げられます。新しいサービスをデプロイする前や、既存の設定を変更する際は、必ずnetstatやlsofコマンドを用いて、目的のポートが他のプロセスによって占有されていないかを確認する手順を導入しましょう。また、デプロイ前のテスト環境での十分な検証は不可欠です。本番環境と類似した環境で、新しい設定やサービスが既存のシステムと競合しないかを確認するプロセスを組み込みます。
次に、Nginxの設定ファイルをバージョン管理システム(例: Git)で管理することを強く推奨します。これにより、誰がいつ、どのような変更を加えたかを追跡できるようになり、問題発生時に迅速に以前の正常な状態にロールバックすることが可能になります。設定変更時には、レビューステップを設けることで、複数の目で確認し、設定ミスを発見しやすくすることも有効です。
さらに、監視ツールの導入も重要です。ポートの状態やNginxプロセスのヘルスチェックを常時行う監視システムを構築することで、ポート競合やNginxの停止といった異常を早期に検知し、サービス停止に至る前に対応できる体制を整えることができます。自動アラート機能と組み合わせることで、管理者が迅速に行動できる環境を構築できるでしょう。これらの最適化戦略によって、将来的なトラブルのリスクを大幅に軽減し、サービスの安定稼働に貢献することが可能です。
まとめ
よくある質問
Q: Nginxでポート80と443を共存させるには?
A: Nginxの設定ファイルで`listen 80;`と`listen 443 ssl;`を異なるserverブロックまたは同じserverブロック内で定義することで共存可能です。これによりHTTPとHTTPSの両方でアクセスを受け入れられます。
Q: HTTPからHTTPSへのリダイレクト設定はどのように行いますか?
A: `listen 80;`を持つserverブロック内で`return 301 https://$host$request_uri;`を設定することで、HTTPアクセスをHTTPSへ恒久的にリダイレクトできます。
Q: 「nginx 80 already in use」エラーの原因は何ですか?
A: このエラーは、別のプロセス(Apache、別のNginxインスタンスなど)が既にポート80を使用している場合に発生します。netstatコマンドなどで競合するプロセスを特定し、停止またはポートを変更する必要があります。
Q: NginxでLayer 7ロードバランサーを構築する際のポイントは?
A: upstreamブロックでバックエンドサーバーを定義し、proxy_passディレクティブでトラフィックを転送します。セッション永続化やヘルスチェックの設定も重要で、トラフィック分散を最適化します。
Q: Nginxで404 Not Foundエラーのカスタムページを表示するには?
A: serverブロック内に`error_page 404 /404.html;`のようなディレクティブを追加し、指定したパスにカスタムエラーページを配置することで対応可能です。
