この記事では、最初にNginxリバースプロキシ、負荷分散、動的および静的分離、高可用性の原則を紹介し、次にNginx構成ファイルについて詳しく説明し、最後に実際のケースを通じてNginxリバースプロキシと負荷分散の特定の構成を実現します。Nginxを学びましょう。1つの記事で十分です。
1はじめに
Nginxは、オープンソースの軽量Webサーバー、リバースプロキシサーバー、ロードバランサー、HTTPキャッシュです。これは、高い同時実行性、高いパフォーマンス、および少ないメモリを特徴としています。
Nginxは、パフォーマンスの最適化のために特別に開発されています。パフォーマンスは最も重要な考慮事項です。実装の効率に細心の注意を払い、高負荷のテストに耐えることができ、最大50,000の同時接続をサポートできます。Nginxはホットデプロイメントもサポートしており、特に使いやすく、ほぼ1日7x24時間実行できます。Nginx Webサイトのユーザーには、Baidu、Taobao、JD、Tencent、Sina、NetEaseなどが含まれます。
2.リバースプロキシ
2.1フォワードプロキシ
Nginxは、負荷分散を実現するためのリバースプロキシとしてだけでなく、インターネットアクセスやその他の機能のためのフォワードプロキシとしても使用できます。
2.2リバースプロキシ
クライアントはプロキシサーバーを認識せず、クライアントは構成を行う必要がなく、ユーザーはリバースプロキシサーバーを要求するだけで、リバースプロキシサーバーはターゲットサーバーを選択し、データを取得した後にクライアントにデータを返します。リバースプロキシサーバーとターゲットサーバーは外部に1つのサーバーであり、プロキシサーバーのアドレスのみが公開され、実サーバーのIPアドレスは非表示になります。
3.負荷分散
単一のサーバーに集中している元の要求を変更してサーバーの数を増やしてから、要求を各サーバーに分散し、負荷を異なるサーバーに分散します。つまり、負荷分散です。
4.動的と静的の分離
Webサイトの分析速度を高速化するために、静的ページと動的ページを異なるサーバーで解析して、分析速度を高速化し、元の単一サーバーの負荷を軽減することができます。
5.高可用性
システムの可用性とフォールトトレランスを向上させるために、nginxサーバーの数を増やすことができます。プライマリサーバーに障害が発生したりダウンしたりした場合、バックアップサーバーは中断のない作業のプライマリサーバーとしてすぐに機能できます。
C / C ++ Linuxバックエンド開発ネットワークのボトムレベルの原則知識の学習と改善についてもっと共有し、テクノロジースタックを改善し、コンテンツの知識ポイントにはLinux、Nginx、ZeroMQ、MySQL、Redis、fastdfs、MongoDB、ZK、ストリーミングメディア、CDNが含まれます、P2P、オーディオビデオ開発、Linuxカーネル、Docker、TCP / IP、coroutine、DPDKなど。
ビデオ学習資料をクリックしてください:C / C ++ Linuxサーバー開発/ Linuxバックグラウンドアーキテクト-学習ビデオ
6.Nginx構成ファイル
6.1ファイル構造
Nginx構成ファイルは3つの部分で構成されています。
... #全局块
events { #events块
...
}
http #http块
{
... #http全局块
server #server块
{
... #server全局块
location [PATTERN] #location块
{
...
}
location [PATTERN]
{
...
}
}
server
{
...
}
... #http全局块
}
复制代码
- グローバルブロックの最初の部分は、
主にnginxサーバーの全体的な操作に影響を与えるいくつかの構成命令を設定します。
例:worker_processes 1;、worker_processesの値が大きいほど、より多くの並行処理をサポートできます。 - eventsブロックの2番目の部分
eventsブロックには、主にNginxサーバーとユーザー間のネットワーク接続に影響を与える命令が含まれます。
例:worker_connections 1024;、サポートされる接続の最大数。 - 3番目の部分のhttpブロック
httpブロックには、httpグローバルブロックとサーバーブロックが含まれます。これは、プロキシの構成、キャッシュ、ログ定義などのほとんどの機能を含む、サーバー構成の最も頻繁な部分です。サーバーブロック:仮想ホストの関連パラメーターを構成します。ロケーションブロック:リクエストルーティングとさまざまなページの処理を構成します。
6.2構成ファイル
########### 每个指令必须有分号结束。#################
#user administrator administrators; #配置用户或者组,默认为nobody nobody。
#worker_processes 2; #允许生成的进程数,默认为1
#pid /nginx/pid/nginx.pid; #指定nginx进程运行文件存放地址
error_log log/error.log debug; #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
events {
accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on
multi_accept on; #设置一个进程是否同时接受多个网络连接,默认为off
#use epoll; #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
worker_connections 1024; #最大连接数,默认为512
}
http {
include mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream; #默认文件类型,默认为text/plain
#access_log off; #取消服务日志
log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式
access_log log/access.log myFormat; #combined为日志格式的默认值
sendfile on; #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
sendfile_max_chunk 100k; #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
keepalive_timeout 65; #连接超时时间,默认为75s,可以在http,server,location块。
upstream mysvr {
server 127.0.0.1:7878;
server 192.168.10.121:3333 backup; #热备
}
error_page 404 https://www.baidu.com; #错误页
server {
keepalive_requests 120; #单连接请求上限次数。
listen 4545; #监听端口
server_name 127.0.0.1; #监听地址
location ~*^.+$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
#root path; #根目录
#index vv.txt; #设置默认页
proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表
deny 127.0.0.1; #拒绝的ip
allow 172.18.5.54; #允许的ip
}
}
}
复制代码
7.構成例
7.1リバースプロキシ
7.1.1実際の戦闘1
実現効果:
ブラウザにwww.abc.comと入力し、nginxサーバーからLinuxシステムのTomcatのメインページにジャンプします。
特定の構成:
server {
listen 80;
server_name 192.168.4.32; #监听地址
location / {
root html; #/html目录
proxy_pass http://127.0.0.1:8080; #请求转向
index index.html index.htm; #设置默认页
}
}
复制代码
7.1.2実際の戦闘2
実現効果:
ブラウザに入力されたパスに従って、別のポートのサービスにジャンプします。
特定の構成:
server {
listen 9000;
server_name 192.168.4.32; #监听地址
location ~ /example1/ {
proxy_pass http://127.0.0.1:5000;
}
location ~ /example2/ {
proxy_pass http://127.0.0.1:8080;
}
}
复制代码
位置指示の説明:
- 〜: uriには正規表現が含まれており、大文字と小文字が区別されます。
- 〜*: uriには正規表現が含まれており、大文字と小文字は区別されません。
- =: uriに正規表現が含まれておらず、厳密な一致が必要であることを示します。
7.2負荷分散
7.2.1実際の戦闘1
実現効果:負荷分散効果を実現するに
は、ブラウザのアドレスバーにhttp://192.168.4.32/example/a.htmlと入力し、平均で5000ポートと8080ポートにします。
特定の構成:
upstream myserver {
server 192.167.4.32:5000;
server 192.168.4.32:8080;
}
server {
listen 80; #监听端口
server_name 192.168.4.32; #监听地址
location / {
root html; #html目录
index index.html index.htm; #设置默认页
proxy_pass http://myserver; #请求转向 myserver 定义的服务器列表
}
}
复制代码
Nginx割り当てサーバー戦略
- ポーリング(デフォルト)は
、リクエストの時系列に従って1つずつ割り当てられます。サーバーがダウンしている場合は、自動的に削除できます。
重量が高いほど、より多くのクライアントが割り当てられます、デフォルトは1です。例:upstream myserver {server 192.167.4.32:5000 weight = 10; server 192.168.4.32:8080 weight = 5;}- IP
は、要求されたIPのハッシュ値に従って割り当てられ、各訪問者はバックエンドサーバーへの固定アクセス権を持ちます。例:アップストリームmyserver {ip_hash; server 192.167.4.32:5000; server 192.168.4.32:8080;}
バックエンドサーバーの応答時間に応じてFairが割り当てられ、応答時間が短い要求が優先的に割り当てられます。例:upstream myserver {fair; server 192.167.4.32:5000; server 192.168.4.32:8080;}
おめでとう!これまでにNginxの基本原則を習得し、リバースプロキシと負荷分散を構成できます。
C / C ++ Linuxバックエンド開発ネットワークのボトムレベルの原則知識の学習と改善についてもっと共有し、テクノロジースタックを改善し、コンテンツの知識ポイントにはLinux、Nginx、ZeroMQ、MySQL、Redis、fastdfs、MongoDB、ZK、ストリーミングメディア、CDNが含まれます、P2P、オーディオビデオ開発、Linuxカーネル、Docker、TCP / IP、coroutine、DPDKなど。
ビデオ学習資料をクリックしてください:C / C ++ Linuxサーバー開発/ Linuxバックグラウンドアーキテクト-学習ビデオ