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データベースの基礎知識と操作のまとめ

推薦する

HTML タグ マーキーを使用してスクロール効果を実現する簡単な方法 (必読)

ページの自動スクロール効果は JavaScript で実現できますが、今日偶然、JS 制御なしでさま...

MySQL の大文字と小文字の区別に関する注意

目次MySQLの大文字と小文字の区別はパラメータによって制御されますMySQLの大文字と小文字の区別...

Docker での Redis 接続の急増をトラブルシューティングした実践的な記録

土曜日、本番サーバー上の Redis サーバーが利用できなくなり、エラー メッセージは次のようになり...

ウェブページレイアウトに関する9つのヒント

<br />関連記事: Web コンテンツ ページ作成に関する 9 つの実用的な提案 W...

Ubuntu20のtzselect設定時間失敗問題、Raspberry Piサーバ(推奨)

2 日前、Raspberry Pi サーバーを Ubuntu 20 にアップグレードしました。今日...

React Router 5.1.0 はページジャンプナビゲーションを実装するために useHistory を使用します

目次1. withRouterコンポーネントを使用する2. ルートタグを使用するReactRoute...

mysql MDLメタデータロックの詳細な分析

序文: MySQL で SQL 文を実行すると、予想した時間内に文が完了しません。このような場合、通...

Linux での Centos7 ファイアウォールの基本的な使用方法の詳細な説明

1. ファイアウォールの基本的な使い方起動する: systemctl は、firewalld を起動...

Vue ミックスインの詳しい説明

目次ローカルミックスイングローバル ミックスイン要約するローカルミックスイン <テンプレート&...

負のマージントップ値は、ラベルテキストと入力の間の垂直中央揃えの問題を解決します。

ラベルテキストと入力の垂直方向の中央揃えを調整するのは簡単ではありません。padding、verti...

JS でパブリッシュ サブスクライブ モデルを作成する

目次1. シーン紹介2 コードの最適化2.1 ファンを増やす問題を解決する2.2 作品追加の問題を解...

読み取り専用と無効の微妙な違いの詳細な説明

「読み取り専用」と「無効」はどちらも、ユーザーがフォーム フィールドの内容を変更できないようにします...

Linux は suid vim.basic ファイルを使用して権限昇格を実現します。

カリで再現まず、必要なvim.basicファイルにsuid権限を設定します。 chmod u+s /...

HTML テキストエスケープのヒント

今日、CSDN で HTML テキスト エスケープのちょっとしたトリックを見ましたが、とても簡単です...

データ型の判断における js typeof と instanceof の違いと、その開発と使用について

目次1. typeof演算子2. インスタンスオブ演算子3. typeof と instanceof...