ホームページ  >  記事  >  運用・保守  >  nginx リバースプロキシのセカンダリドメイン名をバインドする方法

nginx リバースプロキシのセカンダリドメイン名をバインドする方法

PHPz
PHPz転載
2023-05-20 10:55:242138ブラウズ

1. アプリケーション シナリオ

同じサーバー上に複数の Web サイトが確立されている状況がよくありますが、一般的なアプローチは、サイトごとに異なるポートを構成することです。 ip:port の形式でアクセスします。

しかし、結局のところ、IP を使用してアクセスするのは不便で、鮮明でなく、覚えにくいです。次に、異なるドメイン名を各サイトにバインドできます。 (ここではパブリックネットワークの状況についてのみ説明します) ドメイン名が 1 つしかない場合でも、複数の第 2 レベル ドメイン名を設定できます。これは nginx を使用すると簡単に実現できます。

2. 基本要件

通常、オンライン チュートリアルでは、設定ファイルのコードが直接投稿され、これで問題ないことが示されます。しかし、チュートリアルの構成を見た後、多くの初心者はブロガーのように成功できないことがわかりました。そこで、次に基本原則について話しましょう。

まず第一に、管理できるドメイン名が必要です。たとえば、postmsg.cn というドメイン名がある場合、何千世代にもわたって複数のサブドメイン名を生成できます...

第 2 に、アクセス可能なパブリック ネットワーク サーバーがあり、このサーバー上に、対応する異なるポートを使用して独自の Web サイトを 1 つ、2 つ、3 つ、または 4 つ構築できます。

次に、ドメイン名とサイトのバインディングがあり、各ピットに 1 つのニンジンが使用されます。もちろん、1 つのピットに複数のニンジンを使用することもできます...

3. 一般的な構成

構成する必要がある場所が 2 か所あります。最初の前提条件について最初に説明しますが、これは一部の初心者が見落としがちな領域でもあります。

(1) ドメイン名の設定

パブリックネットワークサーバーを指すドメイン名のレコード解決、これはほとんどの人が思いつくものです。解析するときは、IP のみを追加できますが、ポート番号は追加できません。つまり、デフォルトのポート 80 のみを使用できます。 (ドメイン名の転送については説明しません)

サブドメイン名のバインドを実装する場合は、ドメイン名の解決中に適切に構成する必要があります。そうしないと、nginx だけに依存しても機能しません。

たとえば、サブドメイン名 p.postmsg.cn をサーバーのポート 8001 にバインドしたい場合は、まず p.postmsg.cn へのアクセス要求がサーバーに到達できることを確認する必要があります。 nginxで処理できます。

この時点で、レコード解決のドメイン名に p のホスト レコードを追加するか、ホスト レコードにワイルドカード * 構成が存在します (*.postmsg.cn へのすべてのアクセスは、対応するサーバー、注意して使用してください)、@ と www を設定するだけでは絶対に機能しません。

nginx リバースプロキシのセカンダリドメイン名をバインドする方法

# 図 -1 -ドメイン名解析例

(2) ホスト構成

ホストへのリクエスト、すべてnginx に任せて処理することもできます。

nginx 構成を変更する場合、デフォルト構成ファイル (次のコード スニペットに示すように、/etc/nginx/nginx.conf など) で直接変更することも、新しい独立した構成ファイルを作成することもできます。構成を特定のディレクトリ ファイルに保存し、このディレクトリに構成ファイルを含めます (17 行目に示されているように)。

http {
  log_format main '$remote_addr - $remote_user [$time_local] "$request" '
           '$status $body_bytes_sent "$http_referer" '
           '"$http_user_agent" "$http_x_forwarded_for"';
  access_log /var/log/nginx/access.log main;
  sendfile      on;
  tcp_nopush     on;
  tcp_nodelay     on;
  keepalive_timeout  65;
  types_hash_max_size 2048;
  include       /etc/nginx/mime.types;
  default_type    application/octet-stream;
  include /etc/nginx/conf.d/*.conf;
}

これは、nginx が設定ファイルを読み取るための形式です。通常、設定は http { } ブロックとサーバー ブロックに書き込まれ、サーバー ブロックで設定されます。先ほど述べたように、サーバー ブロックを別のファイルに記述して nginx.conf にインクルードすることができ、同時にネストされたインクルードもサポートされています。

次に、サーバー ブロックの記述方法を見てみましょう。

server {
  listen 80;
  server_name p.postmsg.cn;
  location / {
  proxy_pass http://127.0.0.1:8008;
    proxy_redirect off;
    proxy_set_header host $host;
    proxy_set_header x-real-ip $remote_addr;
    proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
  }
  #access_log logs/p_access.log;
}

ここでのserver_nameは設定されたドメイン名に対応し、proxy_passはプロキシの実際のアドレスに対応します。

(3) 注1

ポート 80 は、プロキシを担当する nginx に任せてください。 Apache httpd、nginx、tomcat を 1 つのサーバー上で同時に使用できますが、ドメイン名解決にはデフォルトのポート 80 しか使用できず、代理店を担当する同志が直接リクエストを取得する必要があります。

(4) 注2

即効性。すべてを正しく設定し、サービスを再起動したものの、期待した結果が得られないと感じている友人もいます。ここで考えられる要因は 3 つあります。

  1. ドメイン名解決の有効時間。 Alibaba Cloud のドメイン名の最小有効時間は 10 分ですが、場合によってはこの値よりも長くなる場合があります。

  2. ローカルDNSキャッシュ。 cmd で ipconfig /flushdns コマンドを使用して、ローカル DNS キャッシュを更新できます。

  3. ブラウザキャッシュ。 これは、特に Google Chrome で見つけるのが最も難しいかもしれません。 f12 を押した後、左上隅のアドレス バーの横にある更新ボタンを右クリックし、[キャッシュをクリアしてハード リロード]をクリックします。

  4. サービスは再起動されていません。 service nginx restart 最初に停止してから開始することは役に立たない場合があります。

以上がnginx リバースプロキシのセカンダリドメイン名をバインドする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。