記事ディレクトリ
1.基本的な紹介
1.1Nginxの概要
Nginx( "engine x")は、オープンソース、高性能、高信頼性のHTTPおよびリバースプロキシサーバーであり、メモリ占有量が少なく、強力な同時実行機能を備えています。実際、Nginxの同時実行機能は同じタイプのWebサーバーです。高負荷に耐えることができ、最大50,000の同時接続をサポートできるという報告があります。中国本土でNginxを使用するWebサイトポータルには、Baidu、Jingdong、Sina、Netease、Tencent、Taobaoなどがあります。
Nginx公式ウェブサイト:http://nginx.org/
1.2転送プロキシ
リバースプロキシについて説明するには、最初にフォワードプロキシについて説明する必要があります。フォワードプロキシとは、サーバーを要求するようにクライアントでプロキシサーバーを構成することを指します。プロキシサーバーはクライアントの要求をプロキシします。サーバーはどのクライアントの要求であるかを知りません。この種のプロキシはフォワードプロキシです。
1.3リバースプロキシ
リバースプロキシでは、クライアントはプロキシを認識せず、クライアントはどのサーバーがその要求を処理するかを知りません。クライアントは設定なしでアクセスできるため、リバースプロキシサーバーにリクエストを送信するだけで、リバースプロキシサーバーがターゲットサーバーを選択してデータを取得し、クライアントに返します。このとき、リバースプロキシサーバーはデータを取得します。プロキシサーバーとターゲットサーバーは外界へのサーバーです。リバースプロキシは、プロキシサーバーアドレスを公開し、実サーバーのIPアドレスを非表示にします。クライアントをプロキシするフォワードプロキシとは対照的に、サーバーをプロキシするリバースプロキシ。
例:
このプロセスでは、番号10086はエージェントに相当し、実際にサービスを提供するオペレーターはオペレーターですが、顧客にとっては、どのオペレーターがサービスを提供するかは気にせず、番号を覚えておくだけで済みます。 10086。。
すべての要求は10086にダイヤルされ、10086は処理のために要求を特定のオペレーターに転送します。したがって、ここでは、10086は、クライアントではなくオペレーターを表すことを除いて、プロキシと同等です。このプロキシは、リバースプロキシと呼ばれます。
1.4負荷分散
クライアントはサーバーに複数のリクエストを送信し、サーバーはリクエストを処理し、一部はデータベースと対話する場合があります。サーバーが処理を終了すると、結果がクライアントに返されます。
このアーキテクチャパターンは、比較的単一で同時要求が比較的少ない初期のシステムに適しており、コストも低くなります。ただし、情報量の継続的な増加、アクセスとデータの量の急速な増加、およびシステムビジネスの複雑さにより、このアーキテクチャにより、サーバーの対応するクライアントの要求がますます遅くなり、同時実行性が特に大きい場合、サーバーを直接クラッシュさせるのは簡単です。明らかに、これはサーバーパフォーマンスのボトルネックによる問題です。では、この状況をどのように解決するのでしょうか。
私たちの最初の考えは、この問題を解決するためにマシンの物理的パフォーマンスを改善するために、CPU実行頻度の増加、メモリの増加など、サーバーの構成をアップグレードすることかもしれませんが、ムーアの法則はますます無効になっていることを知っています、そして、ハードウェアのパフォーマンスの向上は、増大する需要に対応できなくなります。最も明白な例は、Tmall Double Elevenの日に、売れ筋製品への即時アクセスが非常に大きいため、上記のシステムアーキテクチャと同様に、既存のトップレベルの物理構成にマシンを追加することは不可能です。ニーズを満たします。じゃあ何をすればいいの?
上記の分析では、問題を解決するためにサーバーの物理構成を増やす方法を削除しました。つまり、問題の垂直方向の解決策は機能しません。では、サーバーの数を水平方向に増やすのはどうでしょうか。このとき、クラスタリングの概念が生まれ、単一のサーバーでは解決できませんでした。サーバーの数を増やしてから、各サーバーにリクエストを分散しました。元のリクエストを単一のサーバーに集中させるのではなく、リクエストを負荷は複数のサーバーに分散されました。負荷は異なるサーバーに分散されます。これを負荷分散と呼びます。
1.5動的および静的分離
Webサイトの解析速度を高速化するために、動的ページと静的ページを異なるサーバーで解析して、解析速度を高速化することができます。元の単一サーバーへの圧力を軽減します。
たとえば、静的リソースサーバーとしてNginxを使用する場合:Javaのリソースは動的と静的に分けることができます。動的は、JSPページ、フリーマーカーページ、JSONデータなど、ブラウザに返される前にTomcatで解析する必要があります。コントローラなどはすべて動的リソースとしてカウントされ、動的リソースはTomcatによって処理され、速度は必然的に低下します。画像、HTML、JS、CSS、その他のリソースなどの静的リソースの場合、そのようなリソースをTomcatで解析する必要はありません。クライアントがこれらのリソースを要求すると、リソースをクライアントに返すだけで十分です。この時点で、Nginxを使用して静的リソースサーバーを構築し、静的リソースをクライアントに直接返すことができます。
フロントエンドとバックエンドを分離すると、静的リソースのアクセス速度を大幅に向上させることができます。動的サービスが利用できない場合でも、静的リソースへのアクセスに影響はありません。
2.Nginxのインストール
Linux CentOS 7システムにNginxをインストールする方法を以下に説明します。
(1)環境の準備:
1。gccをインストールします。
nginxをインストールするには、最初に公式Webサイトからダウンロードしたソースコードをコンパイルする必要があります。コンパイルはgcc環境によって異なります。gcc環境がない場合は、次をインストールする必要があります。
yum install gcc-c++
2.PCREpcre-develのインストール
PCRE(Perl互換の正規表現)は、Perl互換の正規表現ライブラリを含むPerlライブラリです。nginxのhttpモジュールはpcreを使用して正規表現を解析するため、pcreライブラリをLinuxにインストールする必要があります。pcre-develは、pcreで開発されたセカンダリ開発ライブラリです。nginxにもこのライブラリが必要です。注文:
yum install -y pcre pcre-devel
3.zlibのインストール
zlibライブラリは、圧縮および解凍するための多くの方法を提供します。nginxはzlibを使用してhttpパッケージのコンテンツをgzipで圧縮するため、zlibライブラリをCentosにインストールする必要があります。
yum install -y zlib zlib-devel
4. OpenSSLのインストール
OpenSSLは、主要な暗号化アルゴリズム、一般的に使用されるキーと証明書のカプセル化管理機能、SSLプロトコルを含む、強力なセキュアソケットレイヤー暗号化ライブラリであり、テストやその他の目的で豊富なアプリケーションを提供します。
Nginxはhttpプロトコルだけでなくhttps(つまり、sslプロトコルを介してhttpを送信する)もサポートしているため、CentosにOpenSSLライブラリをインストールする必要があります。
yum install -y openssl openssl-devel
(2)ステップ1:ソフトウェアパッケージをインストールします
wget http://nginx.org/download/nginx-1.17.0.tar.gz
次に、ダウンロードしたディレクトリを解凍します
tar -zxvf nginx-1.17.0.tar.gz
(3)ステップ2:コンパイルとインストールを開始します
./configure
make
make install
(4)ステップ3:Nginxを起動
するインストールが完了した後、デフォルトのインストール場所は次のとおりです。
/usr/local/nginx/sbin
このディレクトリに入った後、Nginxを実行してNginxを起動します。
./nginx
Nginxが正常に起動したら、ブラウザでNginxアドレスに直接アクセスします。Nginxが使用するデフォルトのポート番号は80です。ブラウザにLinuxIPを入力すると、アクセスできます。次のインターフェイスが表示され、Nginxが正常にインストールされたことを示します。
接続できない場合は、AlibabaCloudセキュリティグループかどうかを確認する必要があります。開いているポートがあるかどうか、またはサーバーファイアウォールに開いているポートがあるかどうか。ファイアウォール関連のコマンド:
# 开启
service firewalld start
# 重启
service firewalld restart
# 关闭
service firewalld stop
# 查看防火墙规则
firewall-cmd --list-all
# 查询端口是否开放
firewall-cmd --query-port=8080/tcp
# 开放80端口
firewall-cmd --permanent --add-port=80/tcp
# 移除端口
firewall-cmd --permanent --remove-port=8080/tcp
#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload
# 参数解释
1、firwall-cmd:是Linux提供的操作firewall的一个工具;
2、--permanent:表示设置为持久;
3、--add-port:标识添加的端口;
3.Nginxの一般的なコマンド
まず、nginxディレクトリに入る
cd cd / usr / local / nginx /sbin1.nginx
のバージョン番号を確認します
./nginx -v
2.nginxを起動します
./nginx
3.nginxを停止します
./nginx -s stop
4.nginxをリロードします
./nginx -s reload(快速停止nginx)
或者
nginx -s quit(完整有序的停止nginx)
5.Nginxの起動を設定します
systemctl enable nginx
systemctlは、Linuxシステムアプリケーション管理ツールsystemdのメインコマンドです。システムの管理に使用されます。Nginxの管理にも使用できます。関連するコマンドは次のとおりです。
systemctl start nginx # 启动 Nginx
systemctl stop nginx # 停止 Nginx
systemctl restart nginx # 重启 Nginx
systemctl reload nginx # 重新加载 Nginx,用于修改配置后
systemctl enable nginx # 设置开机启动 Nginx
systemctl disable nginx # 关闭开机启动 Nginx
systemctl status nginx # 查看 Nginx 运行状态
4.Nginx構成ファイル
4.1基本的な紹介
Nginxインストールディレクトリの下に、デフォルトの構成ファイルがこのディレクトリのconfディレクトリに配置されます:/etc/nginx/nginx.conf
under、およびメイン構成ファイルnginx.confもその中にあります。その後のnginxの使用は、基本的にこの構成ファイルを適宜変更することです。
nginx.confには多くの#があり、その先頭はコメントの内容を示し、#で始まるすべての段落を削除し、簡略化された構成ファイルの内容は次のとおりです。
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
nginx.conf構成ファイルを3つの部分に明確に分割できます。nginx.conf構造図は次のように要約できます。
main # 全局配置,对全局生效
├── events # 配置影响 Nginx 服务器或与用户的网络连接
├── http # 配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置
│ ├── upstream # 配置后端服务器具体地址,负载均衡配置不可或缺的部分
│ ├── server # 配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块
│ ├── server
│ │ ├── location # server 块可以包含多个 location 块,location 指令用于匹配 uri
│ │ ├── location
│ │ └── ...
│ └── ...
└── ...
最初の部分:構成ファイルの先頭からイベントブロックまでのグローバルブロックのコンテンツは
、主にnginxサーバーの全体的な操作に影響を与えるいくつかの構成命令を設定します。これには、主にNginxサーバーを実行するユーザー(グループ)の構成が含まれます。生成できるワーカープロセスの数、およびプロセスの数。PIDストレージパス、ログストレージパスとタイプ、および構成ファイルの導入など。
たとえば、上記の構成の最初の行は次のとおりです。
worker_processes 1;
これは、Nginxサーバーの並行処理サービスの主要な構成です。worker_processesの値が大きいほど、サポートできる並行処理は多くなりますが、ハードウェア、ソフトウェア、およびその他の機器によって制限されます。
パート2:イベントブロック
デフォルトの構成は次のとおりです。
events {
worker_connections 1024;
}
イベントブロックに関連する命令は、主にNginxサーバーとユーザー間のネットワーク接続に影響します。一般的に使用される設定には、複数のワークプロセスでネットワーク接続のシリアル化を有効にするかどうか、複数のネットワーク接続を同時に受信できるようにするかどうかなどがあります。接続要求、各ワークプロセスが同時にサポートできる接続の最大数など。
上記の例は、各ワークプロセスでサポートされる接続の最大数が1024であることを意味します。
構成のこの部分はNginxのパフォーマンスに大きな影響を与えるため、実際には柔軟に構成する必要があります。
3番目の部分:httpブロック
これは、Nginxサーバー構成の最も頻繁な部分です。プロキシ、キャッシュ、ログの定義、サードパーティモジュールの構成などのほとんどの機能がここにあります。
デフォルトの構成は次のとおりです。
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
httpブロックには、httpグローバルブロックとサーバーブロックも含めることができることに注意してください。
3.1 httpグローバルブロック
httpグローバルブロックの構成手順には、ファイルのインポート、MIME-TYPE定義、ログのカスタマイズ、接続タイムアウト、およびシングルリンク要求の数の上限が含まれます。
3.2サーバーブロック
このブロックは仮想ホストと密接に関連しています。ユーザーの観点からは、仮想ホストは独立したハードウェアホストとまったく同じです。このテクノロジーは、インターネットサーバーのハードウェアコストを節約するために作成されました。
各httpブロックには複数のサーバーブロックを含めることができ、各サーバーブロックは仮想ホストに相当します。
また、各サーバーブロックもグローバルサーバーブロックに分割され、同時に複数のロカトンブロックを含めることができます。
1.グローバルサーバーブロック
最も一般的な構成は、仮想マシンホストの監視構成と仮想ホストの名前またはIP構成です。
2.ロケーションブロック
サーバーブロックは、複数のロケーションブロックで構成できます。
このブロックの主な機能は、Nginxサーバーが受信したリクエスト文字列(server_name / uri-stringなど)から、仮想ホスト名(またはIPエイリアス)以外の文字列(前の/ uri-stringなど)に基づいています。 )特定のリクエストを処理するために一致します。ここでは、アドレスオリエンテーション、データキャッシング、応答制御などの機能、および多くのサードパーティモジュールの構成も実行されます。
4.2一般的な構成
Nginxの一般的な構成:
user nginx; # 运行用户,默认即是nginx,可以不进行设置
worker_processes 1; # Nginx 进程数,一般设置为和 CPU 核数一样
error_log /var/log/nginx/error.log warn; # Nginx 的错误日志存放目录
pid /var/run/nginx.pid; # Nginx 服务启动时的 pid 存放位置
events {
use epoll; # 使用epoll的I/O模型(如果你不知道Nginx该使用哪种轮询方法,会自动选择一个最适合你操作系统的)
worker_connections 1024; # 每个进程允许最大并发数
}
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; # Nginx访问日志存放位置
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; # 加载子配置项
server {
listen 80; # 配置监听的端口
server_name localhost; # 配置的域名
location / {
root /usr/share/nginx/html; # 网站根目录
index index.html index.htm; # 默认首页文件
deny 172.168.22.11; # 禁止访问的ip地址,可以为all
allow 172.168.33.44;# 允许访问的ip地址,可以为all
}
error_page 500 502 503 504 /50x.html; # 默认50x对应的访问页面
error_page 400 404 error.html; # 同上
}
}
4.3グローバル変数
Nginxには、一般的に使用されるグローバル変数がいくつかあります。次の表に示すように、構成内のどこでも使用できます。
より多くの組み込みの事前定義された変数があり、キーワード「nginx組み込みの事前定義された変数」を直接検索できます。多くのブログがこれを書いているのを見ることができます。これらの変数は構成ファイルで直接使用できます。
4.Nginxの動的および静的分離構成
動的および静的分離は、動的要求と静的要求を分離することです。主な方法は2つあります。1つは、静的ファイルを別々のドメイン名に分離し、それらを別々のサーバーに配置することです。これは、現在の主流のソリューションでもあります。もう1つの方法は、動的ファイルと静的ファイルをNginx構成で分離して混合および配布することです。
場所ごとに異なるサフィックス名を指定することで、異なる要求転送を実現できます。Expiresパラメータを設定することで、ブラウザキャッシュの有効期限を設定し、サーバーの前のリクエストとトラフィックを減らすことができます。有効期限の具体的な定義:リソースの有効期限を設定します。つまり、確認のためにサーバーにアクセスする必要はなく、ブラウザ自体を介して有効期限が切れているかどうかを直接確認できるため、追加のトラフィックは発生しません。生成されます。このアプローチは、頻繁に変更されないリソースに最適です。(ファイルが頻繁に更新される場合は、期限切れを使用してキャッシュすることはお勧めしません)、ここで3dを設定しました。これは、この3日以内にURLにアクセスし、リクエストが送信され、最後の更新に変更がないことを意味します。サーバーと比較したファイルの時間。サーバーからは取得されず、ステータスコード304が返されます。変更がある場合は、サーバーから直接ダウンロードされ、ステータスコード200が返されます。
server {
location /www/ {
root /data/;
index index.html index.htm;
}
location /image/ {
root /data/;
autoindex on;
}
}
5.Nginxリバースプロキシインスタンス
次のように、Nginxを構成し、ドメイン名http://www.javahai.topを入力して、LinuxサーバーのTomcatサーバーによって監視されるポート8080にデフォルトでジャンプします。
http://192.168.17.129:9001/edu/にアクセスしてください。127.0.0.1:8080に直接ジャンプしてください。http://192.168.17.129:9001 / vod /にアクセスしてください。127.0.0.1:8081に直接ジャンプしてください
。
locationディレクティブは、URLを照合するために使用されます。構文は次のとおりです。
location [= | ~ | ~* | ^*] uri {
}
1. =:正規表現なしでURIに使用する前に、リクエスト文字列をURIと厳密に一致させる必要があります。一致
が成功すると、検索の続行が停止され、リクエストがすぐに処理されます。
2.〜:URIに正規表現が含まれ、大文字と小文字が区別されることを示すために使用されます。
3.〜*:URIに正規表現が含まれ、大文字と小文字が区別されないことを示すために使用されます。
4. ^〜:正規表現なしでURIを使用する前に、Nginxサーバーは、識別子uriと要求文字列の間で最も一致度の高い場所を見つけ、この場所を使用して、ロケーションブロックの通常のURI。リクエスト文字列と一致します。
注:URIに正規表現が含まれている場合は、〜または〜*でマークする必要があります。
6.負荷分散戦略
負荷分散とは、圧力分散の目的を達成するために、負荷を複数のサーバーに均等かつ合理的に分散することです。主な構成は次のとおりです。
http {
upstream myserver {
# ip_hash; # ip_hash 方式
# fair; # fair 方式
server 127.0.0.1:8081; # 负载均衡目的服务地址
server 127.0.0.1:8080;
server 127.0.0.1:8082 weight=10; # weight 方式,不写默认为 1
}
server {
location / {
proxy_pass http://myserver;
proxy_connect_timeout 10;
}
}
}
Nginxにはいくつかの割り当て方法があり、デフォルトはポーリングです。これは交互に行われます。次の配布方法があります。
- デフォルトの方法であるポーリングでは、各リクエストが時系列で1つずつ異なるバックエンドサーバーに割り当てられます。バックエンドサービスがハングした場合は、自動的に削除できます。
- 重み、重み分布は、ポーリング確率を指定します。重みが高いほど、アクセスされる確率が高くなります。これは、バックエンドサーバーのパフォーマンスが不均一な場合に使用されます。
- ip_hashでは、アクセスIPのハッシュ結果に従って各リクエストが割り当てられるため、各訪問者はバックエンドサーバーに固定的にアクセスし、動的なWebページセッション共有の問題を解決できます。負荷分散の各要求は、サーバークラスターの1つに再配置されます。特定のサーバーにログインしたユーザーが別のサーバーに再配置されると、ログイン情報が失われます。これは明らかに不適切です。
- フェア(サードパーティ)、バックエンドサーバーの応答時間に応じて割り当てられ、短い応答時間が優先され、サードパーティのプラグインnginx-upstream-fairを最初にインストールする必要があります。
ポーリング処理要求の凡例:
加重ラウンドロビン処理要求の凡例:
iphash処理要求の凡例:
詳細:
nginxアプリケーションのシナリオについては話さず
に、Nginxを学びましょう!
Nginxクイックスタート
Nginx操作の詳細:エントリから練習までのNginx、10,000語の詳細な説明!
- クロスドメインCORS構成
- gzip圧縮を有効にする
- 高可用性クラスターの構成(デュアルシステムホットスタンバイ)
- PCまたはモバイルデバイスと互換性があります
- HTTPSなどを構成します。