Nginx の一般的な設定とテクニックの概要

Nginx の一般的な設定とテクニックの概要

序文

この記事では、Nginx の一般的な、実用的で興味深い構成をいくつか紹介します。この記事を読んだ後、「何かを学んだ」と言っていただければ幸いです。

1つのサイトに複数のドメイン名を設定する

サーバー{
 聞く 80;
 サーバー名 ops-coffee.cn b.ops-coffee.cn;
}

server_name の後にスペースで区切られた複数のドメイン名が続く

1つのサービスで複数のサイトを構成

サーバー{
 聞く 80;
 サーバー名 a.ops-coffee.cn;

 位置 / {
 ルート /home/project/pa;
 インデックス index.html;
 }
}

サーバー{
 聞く 80;
 サーバー名 ops-coffee.cn b.ops-coffee.cn;

 位置 / {
 ルート /home/project/pb;
 インデックス index.html;
 }
}

サーバー{
 聞く 80;
 サーバー名 c.ops-coffee.cn;

 位置 / {
 ルート /home/project/pc;
 インデックス index.html;
 }
}

Nginxの仮想ホスト設定に基づいて、Nginxには3種類の仮想ホストがあります。

IP ベースの仮想ホスティング: サーバーに複数のアドレスが必要で、各サイトは異なるアドレスに対応します。この方法はあまり使用されていません。

ポートベースの仮想ホスト: 各サイトは異なるポートに対応しています。アクセスするときは、ip:portメソッドを使用してアクセスします。使用するリスンポートを変更できます。

ドメイン名ベースの仮想ホスティング: 最も広く使用されている方法です。上記の例では、ドメイン名ベースの仮想ホスティングを使用しています。前提条件は、各サイトに対応する複数のドメイン名があることです。server_nameに異なるドメイン名を入力するだけです。

nginx がアカウントとパスワードの検証を追加

サーバー{
 位置 / {
 auth_basic "ユーザー名とパスワードを入力してください";
 auth_basic_user_file キー/auth.key;
 }
}

nginx を通じてアクセスされるサービスは多数ありますが、アカウント認証機能は提供されていません。これを実現するには、nginx が提供する authbase アカウントとパスワード認証を使用できます。次のスクリプトを使用してアカウントパスワードを生成できます。

# 猫 pwd.pl 
パーレル
厳密なものを使用します。

私の$pw=$ARGV[0];
crypt($pw,$pw) を印刷します。"\n";

方向:

# perl pwd.pl ops-coffee.cn
opf8BImqCAXww
# echo "admin:opf8BImqCAXww" > key/auth.key

nginxはディレクトリ列を開きます

nginxをファイルダウンロードサーバーとして利用したい場合は、nginxディレクトリリストを有効にする必要があります。

サーバー{
 場所のダウンロード{
  自動インデックスオン;

  autoindex_exact_size をオフ;
  autoindex_localtime をオン;
 }
}

autoindex_exact_size: オン(デフォルト)の場合、ファイルの正確なサイズがバイト単位で表示されます。オフの場合、ファイルのおおよそのサイズが KB、MB、または GB 単位で表示されます。

autoindex_localtime: オフ(デフォルト)の場合、表示されるファイル時間は GMT 時間です。オンに変更すると、表示されるファイル時間はサーバー時間です。

デフォルトでは、リストされたtxtファイルにアクセスすると、ファイルの内容がブラウザに表示されます。ブラウザで直接ダウンロードしたい場合は、次の設定を追加します。

$request_filename ~* ^.*?\.(txt|pdf|jpg|png)$ の場合 {
 add_header コンテンツ配置 '添付ファイル';
}

デフォルトサイトの設定

サーバー{
 listen 80 デフォルト;
}

nginx サービスに複数の仮想ホストが作成されている場合、デフォルトの検索は上から下へ行われます。一致する仮想ホストがない場合は、最初の仮想ホストのコンテンツが返されます。デフォルトのサイトを指定する場合は、このサイトの仮想ホストを設定ファイルの最初の仮想ホストの位置に配置するか、このサイトの仮想ホストに listen default を設定します。

IPによるアクセスを許可しない

サーバー{
 listen 80 デフォルト;
 サーバー名_;

 404 を返します。
}

登録されていないドメイン名や、サーバー アドレスをサーバーにポイントする不要なドメイン名が存在する可能性があります。これはサイトに一定の影響を与えるため、IP または未設定のドメイン名へのアクセスを禁止する必要があります。上記のデフォルト ルールを使用して、すべてのデフォルト トラフィックを 404 にリダイレクトします。

上記の方法は比較的大まかです。もちろん、301 でアクセスされたときにすべての未設定のアドレスを Web サイトに直接リダイレクトするように設定することもできます。これにより、Web サイトに一定のトラフィックをもたらすこともできます。

サーバー{
 ^/(.*)$ https://ops-coffee.cn/$1 を永続的に書き換えます。
}

検証ファイルを直接返す

場所 = /XDFyle6tNA.txt {
 デフォルトタイプはテキスト/プレーンです。
 200 'd6296a84657eb275c05c31b10924f6ea' を返します。
}

多くの場合、WeChat やその他のプログラムでは、プロジェクトの所有権を確認するために、プロジェクトに txt ファイルを配置する必要があります。上記の方法では、実際にサーバーにファイルを配置しなくても、nginx を直接変更できます。

Nginxは上流リバースプロキシを構成する

http {
 ...
 アップストリームTomcats {
  サーバー 192.168.106.176 重み=1;
  サーバー 192.168.106.177 重み=1;
 }

 サーバー{
  場所 /ops-coffee/ { 
   proxy_pass http://tomcats;

   proxy_set_header ホスト $host;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header X-Forwarded-Proto $scheme;
  }
 }

}

注意しないと、バーの有無にかかわらず proxy_pass の罠に陥る可能性があります。proxy_pass http://tomcats と proxy_pass http://tomcats/ の違いの詳細な説明は次のとおりです。

/ の違いだけですが、結果は大きく異なります。 2つのケースがあります:

1. ターゲット アドレスに URI (proxy_pass http://tomcats) が含まれていません。このとき、新しいターゲット URL では、一致する URI 部分は変更されず、以前と同じままになります。

場所 /ops-coffee/ {
 プロキシパス http://192.168.106.135:8181;
}

http://domain/ops-coffee/ --> http://192.168.106.135:8181/ops-coffee/
http://domain/ops-coffee/action/abc --> http://192.168.106.135:8181/ops-coffee/action/abc

2. ターゲット アドレスに URI が含まれています (proxy_pass http://tomcats/、/ も URI です)。この場合、新しいターゲット URL の一致する URI 部分は、このパラメータの URI に変更されます。

場所 /ops-coffee/ {
 プロキシパス http://192.168.106.135:8181/;
}

http://domain/ops-coffee/ --> http://192.168.106.135:8181
http://domain/ops-coffee/action/abc --> http://192.168.106.135:8181/action/abc

nginxアップストリームがキープアライブをオンにする

アップストリームTomcat {
 サーバー ops-coffee.cn:8080;
 キープアライブ 1024;
}

サーバー{
 位置 / {
  プロキシ_http_バージョン 1.1;
  proxy_set_header 接続 "";

  proxy_pass http://tomcat;
 }
}

ほとんどの場合、nginxはプロジェクト内でリバースプロキシとして使用されます。たとえば、nginxはtomcatに接続され、nginxはphpに接続されます。このとき、TCP接続の頻繁な作成によるリソース消費を減らすために、nginxとバックエンドサービス間のkeepaliveをオンにします。設定は次のとおりです。

keepalive: 各 nginxworker が維持できる接続の最大数を 1024 に指定します。デフォルトでは設定されていないため、nginx がクライアントとして使用されている場合、keepalive は有効になりません。

proxy_http_version 1.1: キープアライブを有効にするには、HTTP プロトコル バージョンが HTTP 1.1 である必要があります。

proxy_set_header Connection "": 古いプロトコルとの互換性を保ち、http ヘッダーの Connection close によってキープアライブが無効になるのを防ぐには、HTTP ヘッダーの Connection を適時にクリアする必要があります。

404は自動的にホームページにジャンプします

サーバー{
 位置 / {
  error_page 404 = @ops-coffee;
 }

 場所 @ops-coffee {
  書き換え .* / 永続的;
 }
}

ウェブサイトの 404 ページはあまりユーザーフレンドリーではありません。上記の設定を使用すると、404 ページが表示された後、自動的にホームページにジャンプすることができます。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。

以下もご興味があるかもしれません:
  • オペレーターが知っておくべき 18 個の Nginx プロキシ キャッシュ構成のヒント (どれを知っていますか?)
  • nginx での接続数を制限するためのヒントを共有する
  • Nginx サーバーを最適化するためのヒントの簡単な紹介
  • Nginx Rewrite ルールと使用方法の紹介とスキルの例
  • nginx プロキシ ポート 80 からポート 443 への実装
  • URLパラメータに基づくNginx転送
  • Nginx の起動に失敗した場合のいくつかのエラー処理の詳細な説明
  • 一般的な Nginx のテクニックと例の概要

<<:  1つの記事でJavaScript DOM操作の基本を学ぶ

>>:  MySql5.7.21 インストールポイント記録メモ

推薦する

一意の注文番号を生成するためのMySQLの高同時実行方法

序文このブログ記事が公開された後、何人かの友人からSQL Serverバージョンがあるかどうか尋ねら...

Windows 10 の仮想マシンに Mac システムをインストールするグラフィック チュートリアル

1. 仮想マシンバージョン15.5.1をダウンロードする公式サイトから直接最新バージョンをダウンロー...

MySQL でのテーブルの作成と削除の詳細な例

テーブル作成コマンドには以下が必要です。 テーブルの名前フィールド名各フィールドを定義します(タイ...

CSS3 クリックボタン円形進行ティック効果実装コード

目次8. CSS3 クリックボタンの円形進捗チェック効果8.1 画像プレビュー8.2 index.h...

CentOS 8 / RHEL 8 に VirtualBox 6.0 をインストールするための詳細なチュートリアル

VirtualBox は、技術者が異なる種類の複数の仮想マシン (VM) を同時に実行できるようにす...

Linux 基本チュートリアル: 特別な権限 SUID、SGID、SBIT

序文Linux のファイルまたはディレクトリの権限については、共通の rwx 権限を知っておく必要が...

ウェブページに埋め込まれた Flash と IE、FF、Maxthon の互換性の問題

いろいろ苦労した後、インターネットで検索したり、以前の会社のプロジェクトを探したり、他の人のプロジェ...

MySql8.0 のトランザクション分離レベルエラーの問題を解決する

目次MySql8.0 トランザクション分離レベルエラーの表示質問コマンドは次のように変更されますMy...

VMware仮想マシンにdeepin20をインストールする最も完全で詳細なプロセス

仮想マシンソフトウェア: VMware Workstationイメージ: deepin-deskto...

MySQL データベースの一般的な基本操作の分析 [データベースの作成、表示、変更、削除]

この記事では、例を使用して、MySQL データベースの一般的な基本操作について説明します。ご参考まで...

Linux で time(NULL) 関数と localtime() を使用して現在の時刻を取得する方法

time(); 関数関数プロトタイプ: time_t time(time_t *timer)関数の目...

NginxはIP経由の直接アクセスを禁止し、カスタム500ページにリダイレクトします

設定ファイルに直接 サーバー{ listen 80 default; # IPへの直接アクセスを禁止...

jQuery プロジェクトで重複送信を防ぐ方法

新しいプロジェクトでは、axios によって重複した送信を防ぐことができますが、古いプロジェクト (...

Vueは製品の拡大鏡効果を実現します

この記事の例では、製品の拡大鏡効果を実現するためのVueの具体的なコードを共有しています。具体的な内...

Docker による Oracle 11g イメージ構成のプルに関する詳細なチュートリアル

さっそくAlibaba の oracle11g イメージをプルして構成する docker の記録を開...