フロントエンドに必要なNginx設定の詳細な説明

フロントエンドに必要なNginx設定の詳細な説明

Nginx (エンジン x) は、軽量で高性能な HTTP およびリバース プロキシ サーバーであり、汎用プロキシ サーバー (TCP/UDP/IMAP/POP3/SMTP) でもあります。元々はロシア人の Igor Sysoev によって作成されました。

基本コマンド

nginx -t は設定ファイルの構文エラーをチェックします
nginx -s reload ホットリロード、設定ファイルをリロードします
nginx -s stop クイックシャットダウン
nginx -s quit ワーカープロセスが完了するまで待ってからシャットダウンします

nginx サーバーをセットアップして起動したら、まず nginx のデフォルト設定を確認し、次にさまざまな使用シナリオを 1 つずつ紹介します。

デフォルト設定

Nginxのインストールディレクトリで、`nginx.conf`のコピーを`nginx.conf.default`に設定ファイルのバックアップとしてコピーし、`nginx.conf`を変更します。

# ワーカープロセスの数 worker_processes 1;
イベント {
  worker_connections 1024; #ワーカープロセスあたりの接続数}

http {
  mime.types を含めます。
  デフォルトタイプ アプリケーション/オクテットストリーム;

  # ログ形式 log_format access '$remote_addr - $remote_user [$time_local] $host "$request" '
         '$status $body_bytes_sent "$http_referer" '
         '"$http_user_agent" "$http_x_forwarded_for" "$clientip"';
  access_log /srv/log/nginx/access.log access; # ログ出力ディレクトリ gzip オン;
  ファイル送信オン;

  # リンクタイムアウト、自動切断 keepalive_timeout 60;

  # 仮想ホストサーバー {
    8080を聴く;
    server_name localhost; # ブラウザアクセスドメイン名 charset utf-8;
    access_log ログ/localhost.access.log アクセス;

    # ルートの場所 / {
      root www; # ルートディレクトリにアクセスします index index.html index.htm; # エントリファイル}
  }

  #その他の設定ファイルを導入する include servers/*;
}

サイトを構築する

その他の設定ファイル `servers` ディレクトリに、新しいサイト設定ファイル xx.conf を追加します。

127.0.0.1 xx_domian#仮想ホストをコンピュータのhostsファイルに追加します。

サーバー{
  8080を聴く;
  server_name xx_domian; #ブラウザアクセスドメイン名 charset utf-8;
  access_log ログ/xx_domian.access.log アクセス;

  # ルートの場所 / {
    root www; # ルートディレクトリにアクセスします index index.html index.htm; # エントリファイル}
}

nginx -s reload コマンドを実行します。成功したら、ブラウザで xx_domian にアクセスするとページが表示されます。

ファイルの種類に応じて有効期限を設定する

場所 ~.*\.css$ {
  有効期限は1日です。
  壊す;
}
場所 ~.*\.js$ {
  有効期限は1日です。
  壊す;
}

場所 ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
  access_log オフ;
  15日で期限切れになります。#15日間保存します。
}

# curl -x127.0.0.1:80 upload/2022/web/logo.png -I #画像の最大保存期間をテストする

ファイルキャッシュを無効にする

開発環境ではコードが変更されることが多く、その効果を確認するにはブラウザのキャッシュを更新する必要があります。ブラウザのキャッシュを無効にして効率を上げる方法

場所 ~* \.(js|css|png|jpg|gif)$ {
  add_header Cache-Control no-store;
}

アンチホットリンク

他のウェブサイトからファイルが呼び出されないようにする

場所 ~* \.(gif|jpg|png)$ {
  # 192.168.0.1 のみがリソースを要求できるようにします valid_referers none blocked 192.168.0.1;
  ($invalid_referer) の場合 {
    ^/ http://$host/logo.png を書き換えます。
  }
}

静的ファイル圧縮

サーバー{
  # gzip 圧縮をオンにします gzip on;
  # gzip に必要な最小 HTTP プロトコル バージョンを設定します (HTTP/1.1、HTTP/1.0)
  gzip_http_バージョン1.1;
  # 圧縮レベルを設定します。圧縮レベルが高いほど、圧縮時間が長くなります (1-9)
  gzip_comp_レベル4;
  # 圧縮の最小バイト数を設定し、ページ Content-Length から gzip_min_length 1000 を取得します。
  # 圧縮ファイルのタイプを設定する (text/html)
  gzip_types テキスト/プレーン アプリケーション/javascript テキスト/css;
}

nginx -s reloadコマンドを実行し、成功したらブラウザでアクセスします。

エラーページを指定する

# ステータスコードに応じて、対応するエラーページを返します error_page 500 502 503 504 /50x.html;
場所 = /50x.html {
  ルート /source/error_page;
}

nginx -s reloadコマンドを実行し、成功したらブラウザでアクセスします。

クロスドメインの問題

クロスドメインの定義

同一オリジンポリシーは、同じオリジンから読み込まれたドキュメントまたはスクリプトが別のオリジンのリソースと対話する方法を制限します。これは、潜在的に悪意のあるファイルを隔離するための重要な安全メカニズムです。異なるソース間の読み取り操作は通常許可されません。

相同の定義

プロトコル、ポート (指定されている場合)、ドメイン名が同じである場合、2 つのページのオリジンは同じになります。クロスドメイン問題を解決する Nginx の原理

例えば:

  • フロントエンドサーバーのドメイン名は http://xx_domain です。
  • バックエンドサーバーのドメイン名は https://github.com です。

これで、http://xx_domain が https://github.com にリクエストを送信すると、クロスドメイン リクエストが発生します。

ただし、nginx サーバーを起動し、server_name を xx_domain に設定し、対応する場所を設定して、フロントエンドに必要なクロスドメイン リクエストをインターセプトし、最後にリクエストを github.com にプロキシするだけです。次の構成に示すように:

## リバースプロキシパラメータを設定する server {
  8080を聴く;
  サーバー名 xx_ドメイン

  ## 1. ユーザーが http://xx_domain にアクセスすると、リバースプロキシは https://github.com に移動します。
  位置 / {
    proxy_pass https://github.com;
    proxy_redirect オフ;
    proxy_set_header Host $host; # ドメイン名を渡す proxy_set_header X-Real-IP $remote_addr; # IPを渡す
    proxy_set_header X-Scheme $scheme; #送信プロトコル proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

これにより、ブラウザの同一オリジン ポリシーを完全に回避できます。github.com が nginx の github.com にアクセスすると、同一オリジン アクセスとなり、nginx がサーバーに転送したリクエストはブラウザの同一オリジン ポリシーをトリガーしません。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Nginx を使用してフロントエンドのクロスドメイン問題を解決する方法
  • フロントエンド開発のための Nginx 構成 (シナリオ)
  • $remote_addr に基づく nginx フロントエンド配布方法の詳細な説明
  • nginx で複数のフロントエンド プロジェクトをデプロイするいくつかの方法
  • Nginx がフロントエンド リソースへのクロスドメイン アクセスの問題をどのように解決するかの詳細な説明
  • フロントエンドでnginxが何ができるかの詳細な説明

<<:  MySQL 8.0.13 zipパッケージのインストール方法について

>>:  データベースの削除から逃走までの MySQL の徹底分析_上級編 (I) - データ整合性

推薦する

Vueのフロントエンドとバックエンドのデータのやり取りと表示を理解する方法

目次1. 技術概要2. 技術的な詳細1. インターフェースからバックエンドデータを取得する2. フロ...

VMware Workstation 14 Pro に Win10 システムをインストールする

この記事では、VMware Workstation 14 Proにシステムをインストールする方法を紹...

ミニプログラムでマインドマップを描く方法

目次マインドマップとは何ですか? F6で描く方法アリペイ微信要約するマインドマップとは何ですか?マイ...

Mysql 5.7.19 無料インストール バージョンで遭遇した落とし穴 (コレクション)

1. 公式ウェブサイトから 64 ビットの zip ファイルをダウンロードします。 2. インスト...

Vue でのキープアライブコンポーネントの使用例

問題の説明(キープアライブとは何か)キープアライブ 名前の通り、アクティブな状態を維持します。誰が活...

Zabbixを使用してOracleテーブルスペースの操作プロセスを監視する

0. 概要Zabbix は非常に強力なオープンソースの監視ツールです。以下では、Zabbix がテー...

MySQLのさまざまなロックに関する詳細な理解

目次ロックの概要ロックの分類データベース操作の粒度データ操作の種類MySQL ロックさまざまなストレ...

EF (Entity Framework) の挿入または更新データ エラーの解決方法

エラー メッセージ:ストアの更新、挿入、または削除ステートメントが予期しない行数 (0) に影響を与...

Vue ターンテーブル抽選の簡単な実装

この記事では、ホイール抽選を簡単に実装するためのVueの具体的なコードを参考までに共有します。具体的...

CSSのline-heightを継承する方法

Line-height はどのように継承されますか?30px などの特定の値を書き込むと、この値が継...

MySQL 8の新機能におけるグローバルパラメータの永続性の詳細な説明

目次序文グローバルパラメータの永続性最後に要約する参考資料:序文2018 年に MySQL 8.0....

Vue3のレスポンシブ原則の詳細な説明

目次Vue2 レスポンシブ原則のレビューVue3 レスポンシブ原則の分析ネストされたオブジェクトの応...

CSS の読み込みによってブロックが発生しますか?

おそらく誰もが js の実行によって DOM ツリーの解析とレンダリングがブロックされることを知って...

CSS フォーム検証機能の実装コード

レンダリング原理フォーム要素には、正規表現(携帯電話番号、メールアドレス、IDカードなど)をカスタマ...

MySQL 5.7 スレーブノードからマルチスレッド マスター スレーブ レプリケーションを構成する方法の詳細な説明

序文MySQL は MySQL 5.6 からマルチスレッド レプリケーションをサポートしていますが、...