フロントエンドに必要な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) - データ整合性

推薦する

DockerはRedisを起動し、パスワードを設定します

RedisはRedisバージョン5のapline(Alps)イメージを使用します。これは小さくて高速...

Linuxでディスク使用量を確認する方法

1. dfコマンドを使用してディスク全体の使用量を表示します。 df コマンドは、ハードディスクのマ...

MySQL のスロークエリの方法と例

1. はじめにスロークエリログを有効にすると、MySQL は指定された時間を超えるクエリステートメン...

WeChatアプレットの入力ジッター問題を解決する方法

問題を見つけるまず問題を見てみましょう。ミニプログラムでは、Vant のダイアログ コンポーネント ...

HTMLでは、全体的なスタイルとレイアウトを崩さずに、部分的に強制スクロールバーを使用できます。

まずはエフェクト画像を投稿します:全体的なスタイルとレイアウトが崩れないように、スクロール バーがロ...

VMware に CentOS7 をインストールし (静的 IP アドレスを設定)、Docker コンテナ経由で mySql データベースをインストールする (非常に詳細なチュートリアル)

2 年生から、これらのインストールと設定の仕方を尋ねられました。簡単なチュートリアルを作成し、ここ...

JavaScript の async と await のシンプルで詳細な学習

目次1. はじめに2. 詳しい説明2.1、非同期2.1.1. 関数はPromise以外のオブジェクト...

Docker execは複数のコマンドを実行します

docker exec コマンドは、実行中のコンテナ内でコマンドを実行できます。 docker ex...

Vueはコードのハイライトを実現するためにモナコを使用しています

Vue 言語と要素コンポーネントを使用して、コード コンテンツの入力を必要とし、ハイライト表示が可能...

Linux 構成 SSH パスワードフリーログイン「ssh-keygen」の基本的な使い方

目次1 SSHとは何か2 SSHパスワードフリーログインを設定する2.1 必要なソフトウェアのインス...

MySQLで時間別データと最後の時間別データの差をクエリするアイデアの詳細な説明

1. はじめに要件は、特定の時間範囲内で、1 時間ごとのデータと前の 1 時間ごとのデータの差と比率...

フロントエンドの面接の質問の最も包括的なコレクション

HTML+CSS 1. WEB 標準と W3C の理解と知識<br /> タグを閉じ、小...

JavaScript は大容量ファイルのアップロード処理を実装します

数十 MB 程度の小さいものから 1G 以上の大きいものまで、ビデオ ファイルなどのファイルのアップ...

Dockerデータストレージの概要

この記事を読む前に、ボリューム、バインドマウント、tmpfs マウントの基本を理解しておいてください...

163 メールボックスログインボックスインタラクティブデザインの改善体験と共有

LOFTER のコンテストで、ログイン ボックスを再設計できると言及されているのを見ました。過去 2...