Nginxはドメイン名のアクセス方法を定義しています

Nginxはドメイン名のアクセス方法を定義しています

最近Nginxを構築しているのですが、ドメイン名でアクセスできません。

nginx 構成ファイル nginx.conf 内のサーバー構成は次のとおりです。

 サーバー{
  聞く 80;
  サーバー名 hehe.weige.com;
  #文字セット koi8-r;
  #access_log ログ/host.access.log メイン;
位置 / {
   ルート html-hehe;
   インデックス index.html index.htm;
  }
}

設定後、sbin ディレクトリで ./nginx -s reload コマンドを実行して設定ファイルを再読み込みします。

読み込み後、ブラウザのアドレスバーにhehe.weige.comと入力しましたが、アクセスできませんでした。

私は一日中この問題に悩まされていました。

たくさんの素晴らしいブログを検索しましたが、設定に問題は見つかりませんでした。後になってようやく自分でも分かりました。最も基本的でシンプルな2つの質問

1 同じドメイン名は1つのIPにしか対応できず、同じIPは複数のドメイン名に対応できる

2 ウェブサイトにアクセスすると、システムはまずローカル ホスト (C:\windows\system32\drivers\etc) ファイルを検索します。ドメイン名が存在する場合は、ドメイン名に対応する IP アドレスにアクセスします。

存在しない場合は、インターネットで探します。

2 番目のポイントに注目してください。ローカル ホスト ファイルにはドメイン名 www.weige.com がまったく設定されていないため、インターネットで検索しました。このドメイン名は私がカスタマイズしたもので、インターネット上では絶対に見つかりません。アクセスに失敗しました

最初の写真のような状況が発生しました。偉大なブロガーの誰もこの問題を強調しませんでした。彼らはそれを見落としたのでしょうか、それとも私の基礎知識が乏しいのでしょうか? ? ? ? なぜ!もう苦情はありません。ホストを構成すると、次の図が表示されます。

次に、コンピューターを再起動します (コンピューターを再起動せずにこれを行う方法があるかどうかはわかりません。読者の皆さんが方法を知っている場合は、ぜひ共有してください。ありがとうございます!)

ブラウザにもう一度 hehe.weige.com を入力すると、アクセスが成功します。

追加知識: Nginxはドメイン名(またはサブドメイン)とウェブサイトのバインディングを指定します

問題の原因

ブロガーは最近、CentOS に別の Web サイトを展開しましたが、ポート番号でアクセスしたくありませんでした。ポート番号は SEO 最適化に役立たず、ユーザー アクセスが面倒だからです (ドメイン名を使用する目的は、ユーザー アクセスを容易にすることではないでしょうか。ポート番号を導入することは、ドメイン名を使用する目的と矛盾しませんか)。そこで、CentOS のポート 80 で 2 つの Web サイトを同時に実行したいと考えました。Nginx は、要求されたドメイン名を介して対応するルート ディレクトリの下の Web サイトを返し、ポート 80 を多重化して複数の Web サイトを同時に実行するという目的を達成しました。

実装手順

パスの確認を容易にするために、この記事では、パスが必要な場合にブロガーの現在のステップのパスを出力し、確認できるようにする pwd コマンドを具体的に使用しています。

nginx 設定ファイルのパスを確認する (重要)

注意: この手順は非常に重要です。間違った nginx 構成ファイルを変更すると、すべての変更が無効になります。数時間調査しても、変更が無効である理由がわからない場合もあります。

コマンドを使用する

$ nginx -V

次のように、nginx の設定情報を確認してみましょう (コンテンツはブロガーのものと異なる場合がありますが、影響はありません)。

nginx バージョン: nginx/1.12.2
gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) で構築
OpenSSL 1.0.2k-fips で構築 2017年1月26日
TLS SNIサポートが有効
引数の構成:-prefix =/usr/share/nginx  -  sbin-path =/usr/sbin/nginx =/usr/lib64/nginx/modules  -  conf-path =/etc/nginx/nginx.conf-error-log-path =/var/ngginx/var/grog-path。 log -http-client-body-temp-path =/var/lib/nginx/tmp/client_body  -  http-proxy-temp-path =/var/lib/nginx/tmp/proxy  -  http-fastcgi-temp-path =/lib/nginx/tmp/fastcgi-http-pidgi-http-pp-p-p-p-p-p-p-ppis nginx/tmp/uwsgi  -  http-scgi-temp-path =/var/lib/nginx/tmp/scgi  -  pid-path =/run/nginx.pid  -  lock-path =/run/lock/subsys/nginx -user = nginx -group = nginx-with-with-a-a-a-his-a-with-hat ule -with-http_ssl_module -with-http_v2_module -with-http_realip_module -with-http_addition_module -with-http_xslt_module = dynamic -with-http_image_filtter_module = dynamic-wothtp tp_sub_module -with-http_dav_module -with-http_flv_module -with-http_mp4_module -with-http_gunzip_module -with-http_gzip_static_module -with-http_random_index_module -with-hindex_module -with-http_random_index_module -http_degradation_module -with-http_slice_module -with-http_status_module -with-http_perl_module = dynamic -with-mail = dynamic -with-mail_ssl_module -with-with-pcre-jim ule -with-google_perftools_module  -  with-debug  -  with-cc-opt = '-o2 -g-pipe -wall -wp、-d_furtify_source -fstack-protector-strong -param = ssp-buffer-size = 4 -grecord-gck-switches -cc1 -m64 -mtune = generic '-with-ld-opt ='  -  wl、-z、relro -specs =/usr/lib/rpm/redhat/redhat-hardened-ld -wl、-e ''

現在の nginx プログラムで使用されるデフォルトの設定ファイルを指定するエントリ --conf-path=/etc/nginx/nginx.conf にのみ注意する必要があります。

新しいサイト構成ファイルを作成する

上記の設定ファイル パスに従って、まずディレクトリを nginx 設定パスに切り替えます。

$ cd /etc/nginx

次に、新しいサイト設定ファイルを作成します。nginx 設定ディレクトリの下の vhost ディレクトリに配置することをお勧めします。現在このディレクトリがない場合は、新しいディレクトリを作成できます。

$パスワード
/etc/nginx
$ sudo mkdir 仮想ホスト
$ ls
conf.d fastcgi_params mime.types scgi_params vhost
default.d fastcgi_params.default mime.types.default scgi_params.default win-utf
fastcgi.conf koi-utf nginx.conf uwsgi_params
fastcgi.conf.default koi-win nginx.conf.default uwsgi_params.default

注意: /etc はシステム ディレクトリです。通常のユーザーには変更権限がありません。ファイルの作成や変更、フォルダーの作成など、このディレクトリで変更を行うには、管理者権限で sudo を使用する必要があります。

先ほど作成した vhost ディレクトリに入り、mysite.conf などの新しい構成ファイルを作成します。構成ファイルのファイル名に制限はありません。識別しやすいように Web サイトの名前を使用するのが最適ですが、接尾辞は .conf にする必要があります。

$パスワード
/etc/nginx
$ cd 仮想ホスト/
$パスワード
/etc/nginx/vhost
$ sudo タッチ mysite.conf
$ ls
mysite.conf トランス.conf

このうち、touch コマンドは mysite.conf という設定ファイル(空ファイル)を作成しますが、これが今回紹介する設定ファイルです。もう 1 つはブロガーが運営している Web サイトなので、特に気にする必要はありません。

ウェブサイトの構成ファイル情報を変更する

この記事では、Web サイトのルート ディレクトリを /home/www/mysite、ドメイン名を mysite.jinhangdev.cn にして、mysite という名前の Web サイトを作成します。

任意のテキスト エディターを使用して mysite.conf を開き、次の内容を入力して保存します (管理者権限が必要であることに注意してください)。

サーバー{
  listen 80; # ウェブサイトのポートは通常 80 で、他のウェブサイトでも使用できます server_name mysite.jinhangdev.cn; # バインドするドメイン名 (またはサブドメイン)
  root /home/www/mysite; # ウェブサイトのルートディレクトリ location / { # 気にしないでください}
}

上記の内容はサーバーの内容です。以下で nginx.conf の設定について説明するときは、サーバー内で設定行を記述するか、サーバー外で記述するかの違いを区別します。

$パスワード
/etc/nginx/vhost
$ ls
mysite.conf トランス.conf
$ sudo vim mysite.conf
$ cat mysite.conf
サーバー{
  聞く 80;
  サーバー名 mysite.jinhangdev.cn;
  ルート /home/www/mysite;
  位置 /{
  }
}

上記で新しい Web サイトを作成しました。Web サイトはサーバーのポート 80 を使用し、バインドされたドメイン名は mysite.jinhangdev.cn、Web サイトのルート ディレクトリは /home/www/mysite です。

nginx設定ファイルを変更する

以下は、キー ファイル nginx.conf の設定です。良い習慣を身に付けるために、変更する前にバックアップすることをお勧めします。

$パスワード
/etc/nginx
$ sudo cp nginx.conf nginx.conf.bak

元の設定を nginx.conf.bak に保存したら、次の操作を続行します。後で変更が間違っていることに気付いた場合は、nginx.conf.bak の名前を nginx.conf に戻して使用できます。

スーパーユーザーとしてテキスト エディターで nginx.conf を開きます。

$ sudo vim nginx.conf

編集します。

Nginx 設定ファイルの構造

ここでは、ドメイン名バインディングの構成に関連するいくつかの構造、つまり http セクションのみを紹介します。

http {
 (各種構成)
}

ここで設定される設定は、http のグローバル設定です。Web サイトを個別に設定する場合は、各サーバーごとに個別に設定する必要があります。

http {
 (ここでの設定はグローバル設定パラメータです)
 サーバー{
 (ここでの設定はこのサーバーの設定パラメータです)
 }
 サーバー{
 (ここでの設定はこのサーバーの設定パラメータです)
 }
 (ここでの設定はグローバル設定パラメータです)
}

ただし、すべてのサーバーを nginx.conf に展開することは推奨されないため、include ステートメントを使用して、vhost の下にあるすべての Web サイトの構成を参照します。注: include コマンドは単純にテキストの置換を実行します。

そこで、nginx.conf の http セクションの最後に次の文を記述します。

http {
 (以前の構成のいくつか)
 /etc/nginx/vhost/*.conf を含めます。
}

このようにして、vhost の下にあるすべての .conf ファイルがテキスト置換によって nginx.conf に導入されます。

nginxサービスを再起動する

コマンドを使用します:

$ sudo サービス nginx を再起動します
/bin/systemctl にリダイレクトして nginx.service を再起動します

nginx サービスを再起動します。

問題: サービスの再起動エラー

この時点で、次のコマンドを使用できます。

$ sudo サービス nginx ステータス -l

エラー情報とエラー ログを表示します。このコマンドを入力しても、ログはすぐには表示されません。数秒後に表示されます。-l オプションを使用すると、各ログを画面に完全に表示できます。そうでない場合、ログが長すぎると、中間のテキストが次のように置き換えられます...

問題がある場合、10 回中 9 回はログに nginx.conf の読み込みエラーが発生したことが記録されます。これは、nginx.conf または mysite.conf の設定が間違っていることが原因であると考えられます。

新しいウェブサイトをご覧ください

新しいセカンダリドメイン名の DNS 解決を追加した後、ブラウザで mysite.jinhangdev.cn にアクセスします。通常、404 Not found エラーが報告されます。これは、この記事では、この新しい Web サイトのルート ディレクトリがまだ作成されていないためです。404 エラーは、以前の構成が正しいことを示しているため、次の手順では、簡単な Web ページを作成して実行します。

新しいウェブサイトのルートディレクトリを作成する(または既存のものを使用する)

ブロガーは、403 エラーを回避するために、Web サイトのファイルを /home/www の下に置き、ディレクトリに 0777 権限を与えることに慣れていますが、これはあまり安全ではありません。ブロガーのレベルが限られているため、セキュリティを必要とする読者は、他のセキュリティ専門家の記事に注目していただければ幸いです。ブロガーは深くお詫び申し上げます。

/home/www の下にディレクトリ mysite を作成します (/home/www ディレクトリはブロガーによって作成されており、chmod コマンドを使用して 0777 権限が付与されています)。

$ cd /home/www/
$ mkdir マイサイト
$ ls
マイサイトトランス

mysite ディレクトリに切り替えて、Web ページを作成します。

$パスワード
/ホーム/www
$ cd mysite/
$ echo hello! > index.html
$ ls
インデックス.html
$ 猫のインデックス.html
こんにちは!

ブラウザでサイトに再度アクセスすると、「hello!」という行が表示されます。これは、新しいサイトが正常に作成されたことを意味します。

結論

以上が、新規ウェブサイトのドメイン名バインディングを作成する手順です。分からない点やブロガーのミスなどありましたら、コメント欄でご指摘ください。よろしくお願いいたします!これが皆様の参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • ドメイン名を指定されたポートに転送するようにNginxを設定する方法
  • Nginxドメイン名転送の実装
  • nginx フォワード プロキシを使用してイントラネット ドメイン名転送プロセス分析を実装する
  • Nginxリバースプロキシはイントラネットドメイン名転送に使用されます
  • 複数のドメイン名に対する Nginx リバース プロキシを使用した HTTP および HTTPS サービスの実装
  • nginx + セカンダリドメイン名 + https サポートを使用する
  • ドメイン名を介してプロジェクトにアクセスするnginx + tomcatの例
  • Nginx ドメイン転送の使用シナリオ コード例

<<:  js と jQuery での Ajax の使用例の詳細

>>:  MySQLデータベースの基礎知識と操作のまとめ

推薦する

MySql 学習ノートにおけるトランザクション分離レベルの詳細な説明

背景トランザクションについて話すとき、誰もがそれに精通している必要があります。MySQL データベー...

MySQL MHA 操作ステータス監視の概要

目次1. プロジェクトの説明1.1 背景1.2 実装設計1.2.1 従来の方法1.2.2 最適化され...

CSSフロートの特性についての簡単な説明

この記事では、CSS フロートの特徴を紹介します。皆さんと共有し、自分用のメモとして残したいと思いま...

CentOS 8.4 に Docker をインストールする詳細なチュートリアル

目次序文:システム要件:インストール環境:古いバージョンをアンインストールします: yum は具体的...

MySQL データベースの高度なクエリとマルチテーブルクエリ

MySQL マルチテーブルクエリワークシートを追加する -- ユーザーテーブル (ユーザー) テーブ...

jQueryはショッピングカートの完全な機能を実現します

この記事では、ショッピングカートの完全な機能を実現するためのjQueryの具体的なコードを参考までに...

鏡像効果を実現する JavaScript キャンバス

この記事では、JavaScriptキャンバスでミラーイメージ効果を実現するための具体的なコードを参考...

Vue3 コンポジション API でロジックの再利用を実装する方法

Composition API はロジック再利用手順を実装します。ロジックコードを関数に抽出します。...

Datagrip2020 が MySQL ドライバーのダウンロードに失敗する

「downloadlaod」を直接クリックしてもダウンロードできない場合は、ここからダウンロードす...

JavaScript キャンバスは影付きのグラフィックとテキストを実装します

キャンバスを使用して、参照用の影付きのグラフィックとテキストを作成します。具体的な内容は次のとおりで...

MySQL 制約の超詳細な説明

目次MySQL 制約操作1. 非ヌル制約2. ユニーク制約3. 主キー制約4. 外部キー制約5. カ...

CSS でコンテンツが長すぎる問題を解決する方法の詳細な説明

CSS を記述するときに、デザインに存在する重要なケースを忘れてしまうことがあります。たとえば、コン...

yum を使用して rpm と関連する依存関係をダウンロードして、docker をオフラインでインストールします。

yum を使用してすべての依存関係を一緒にインストールできますが、–downloadonly –d...

Docker ビルド PHP 環境チュートリアル詳細説明

Dockerのインストール公式インストールスクリプトを使用して最新バージョンのDockerをインスト...

Electronで不規則な形状の透明部分をクリックする実装

目次不規則なフォームの実装透明な部分をクリックする不規則なフォームの実装ここでは円形フォームを実装し...