Nginx (エンジン_ _ サーバーは 30,000 ~ 50,000 の同時リクエストをサポートできます) Apache と比較すると、同時リクエストはnginxほど多くはなく、Apache の同時リクエストは約 20,000 です
Nginx アプリケーションのシナリオ (または機能)
静的処理: httpd と nginx は両方とも、デフォルトでは静的ページのみを処理できます。
リバース プロキシ:クライアントのリクエストを直接処理せず、リクエストを他のサーバーに転送します。
負荷分散:リバース プロキシと組み合わせて、データの転送を担当します。クライアントのリクエストをより少ない負荷で他のサーバーに送信する
リソース キャッシュ:クライアントが頻繁にアクセスするデータをキャッシュし、クライアントのアクセスを高速化する
セキュリティ保護: nginx 自体に一定の保護手段がある
アクセス制限: Apache の注文拒否と同様、
アクセスを許可認証:アクセスした Web サイトにユーザー名とパスワードを追加します。
1. I/O (入出力) の概要
各 I/O は 2 つの段階を経ます:
1. まずディスク ファイルからカーネル スペース (バッファ) にデータをロードし、データの準備が完了するまで待ちます (これには長い時間がかかります)
。カーネルバッファをユーザー空間に移動し、プロセスのメモリ内では時間が短縮されます
同期/非同期アテンションは呼び出し先メッセージ通信メカニズムです
同期:呼び出し元は、実行を続行する前に呼び出し先がメッセージを返すのを待ちます。
例:上司はあなたにタスクを割り当て、それが完了したかどうかを尋ね続けます。上司が完了したら、次のことを行います。この通信メカニズムは同期になります。非同期
:呼び出し先が渡します ステータス、通知、またはコールバック メカニズムが呼び出し先に実行ステータスを積極的に通知します
。例:上司があなたにタスクを割り当て、あなたはタスクの進行状況を上司に報告します。上司は独自のことを行います。そして結果を尋ねることはありません。
同期と非同期の違い | |
---|---|
同期する | 呼び出し先はタスクのステータスを返さないため、呼び出し元は要求し続ける必要があります。 |
非同期 | 呼び出し先は、呼び出し元が常に質問することなく、タスクのステータスを呼び出し元に返します。 |
ブロッキング/ノンブロッキング:結果が返されるのを待つ前に呼び出し元の状態に焦点を当てます。
ブロッキング:ユーザー空間に戻る前に I/O 操作が完全に完了する必要があることを意味します。呼び出し結果が返される前に、呼び出し元は一時停止されます。たとえば、衣類を手洗いすると、洗濯が完了するまで作業が行われ
ます。
ノンブロッキング (nobloking): I/O 操作が完全に完了するのを待たずに、呼び出し直後に I/O 操作がユーザー状態に戻ることを意味します。呼び出し元は、最終的な呼び出し結果が返される前に中断されません。例:
占有不要の全自動洗濯機洗濯が終わると通知が来るので、この間洗濯に追われる必要はありません。
I/O モデルには、同期ブロッキング、同期ノンブロッキング、非同期ブロッキング (IO 多重化選択)、非同期セミブロッキング (シグナル駆動型 Apache)、非同期ノンブロッキング (非同期 IO モデル nginx) が含まれます。
2.nginxモード
nginxには、マスターワーカー モードとシングルプロセス モードの2 つの動作モードがあります。
master-worker:このモードでは、nginx が正常に起動した後、マスター プロセスと少なくとも 1 つのワーカー プロセスが存在します。マスター プロセスは、システム シグナルの処理、構成の読み込み、ワーカー プロセスの管理(開始、強制終了、監視、メッセージ/シグナルの送信など) を担当します。
パターンの利点 |
---|
1. 高い安定性 ワーカープロセスが存在する限りサービスを提供でき、ワーカープロセスがマスタープロセスをハングアップしても、直ちに新しいワーカープロセスが起動するため、ワーカープロセス数は変わらず、負荷を軽減できます。サービス中断の可能性。 |
2. LinuxのCPUアフィニティ構成により、マルチコアCPUの利点を最大限に活かし、パフォーマンスを向上させることができます。 |
3. 信号/構成のリロード/アップグレードを処理する際、サービスの中断を最小限に抑え、または中断せずに実行できます。 |
シングルプロセスモード: nginx の起動後にプロセスは 1 つだけあり、このプロセスがnginxのすべての作業を担当します。プロセスが 1 つしかないため、gdbなどのツールを使用して簡単にデバッグできます。このモードはnginxのスムーズ アップグレード機能をサポートしていません。信号処理によってサービスが中断される可能性があります。単一プロセスであるため、プロセスがハングした後、外部監視なしにサービスを再起動することはできません。したがって、このモードは通常、開発段階とデバッグ中にのみ使用され、運用環境では使用されません。
3.nginxのインストール
インストール方法 1: ネットワーク yum インストール
外部ネットワークに ping できることを確認する
[root@C7--01 ~]# ping www.baidu.com
PING www.a.shifen.com (183.232.231.174) 56(84) bytes of data.
64 bytes from ptr.cq.chinamobile.com (183.232.231.174): icmp_seq=1 ttl=51 time=380 ms
64 bytes from ptr.cq.chinamobile.com (183.232.231.174): icmp_seq=2 ttl=51 time=114 ms
64 bytes from ptr.cq.chinamobile.com (183.232.231.174): icmp_seq=3 ttl=51 time=106 ms
64 bytes from ptr.cq.chinamobile.com (183.232.231.174): icmp_seq=4 ttl=51 time=108 ms
In:nginx:linox パッケージ Web サイトは、Web yum を使用してインストールできます。
インストールプロセスは上記の手順に従って完了できます
起動コマンド:nginx
インストール完了後にポートを確認してください
インストール方法 2: ソース コードのインストール; 公式 Web サイトから nginx ソフトウェア パッケージをダウンロード
公式ウェブサイトのパス: nginx: ダウンロードnginx: ダウンロードnginx: ダウンロード
今回はnginx-1.18.0バージョンをダウンロードします
nginx-1.18.0.tar.gzパッケージをアップロードする
[root@C7--01 ~]# yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel #安装相关软件包
[root@C7--01 ~]# ls
anaconda-ks.cfg nginx-1.18.0.tar.gz yum.sh
[root@C7--01 ~]# useradd -M -s /sbin/nologin nginx
[root@C7--01 ~]# tar -zxvf /root/nginx-1.18.0.tar.gz -C /usr/src
......
...
[root@C7--01 ~]# cd /usr/src/nginx-1.18.0/
[root@C7--01 nginx-1.18.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_dav_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-http_ssl_module --with-http_gzip_static_module
........
....
[root@C7--01 nginx-1.18.0]# make && make install
....
..
.
[root@C7--01 nginx-1.18.0]# /usr/local/nginx/sbin/nginx -t #测试安装是否成功
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@C7--01 nginx-1.18.0]# /usr/local/nginx/sbin/nginx #启动
[root@C7--01 nginx-1.18.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
アクセス
インストールが完了しました
4. nginx設定ファイルの導入と操作
注: インストール方法とパスが異なると異なります。
Nginxのディレクトリ構造はどうなっているのでしょうか?
tree /usr/local/nginx
/usr/local/nginx
├── client_body_temp
├── conf # Nginx所有配置文件的目录
│ ├── fastcgi.conf # fastcgi相关参数的配置文件
│ ├── fastcgi.conf.default # fastcgi.conf的原始备份文件
│ ├── fastcgi_params # fastcgi的参数文件
│ ├── fastcgi_params.default
│ ├── koi-utf
│ ├── koi-win
│ ├── mime.types # 媒体类型
│ ├── mime.types.default
│ ├── nginx.conf # Nginx主配置文件
│ ├── nginx.conf.default
│ ├── scgi_params # scgi相关参数文件
│ ├── scgi_params.default
│ ├── uwsgi_params # uwsgi相关参数文件
│ ├── uwsgi_params.default
│ └── win-utf
├── fastcgi_temp # fastcgi临时数据目录
├── html # Nginx默认站点目录
│ ├── 50x.html # 错误页面优雅替代显示文件,例如当出现502错误时会调用此页面
│ └── index.html # 默认的首页文件
├── logs # Nginx日志目录
│ ├── access.log # 访问日志文件
│ ├── error.log # 错误日志文件
│ └── nginx.pid # pid文件,Nginx进程启动后,会把所有进程的ID号写到此文件
├── proxy_temp # 临时目录
├── sbin # Nginx命令目录
│ └── nginx # Nginx的启动命令
├── scgi_temp # 临时目录
└── uwsgi_temp # 临时目录
1. 設定ファイルの概要
モジュール | 関数 |
---|---|
メイン (グローバル設定) | set ディレクティブは他のすべての設定に影響します |
イベント (nginx 動作モード) | 動作モードと接続数を設定する |
http(http設定) | タイムアウトなどを設定します。 |
サーバー(ホスト設定) | 主にホストとポートを指定するために使用されます。 |
場所(URL一致) | Web ページの場所を照合するために使用されます |
1.Main は nginx.conf 設定ファイルの最上位にあります
2. Main 層の下に Event 層と HTTP 層を置くことができます
3. HTTP 層の下には複数の Server 層が許可されており、さまざまな設定を構成するために使用されます
4. サーバー層 複数の場所も許可されます
[root@C7--01 ~]# vim /usr/local/nginx/conf/nginx.conf #进入配置文件
----------------------------以下是全局配置端(main)
1
2 #user nobody; #设置master进程启动后,fork出的worker进程运行在哪个用户和用户组下;默认由nobody账号运行
3 worker_processes 4(或auto); #指定工作衍生进程数(一般等于CPU的总核数或总核数的两倍)
worker_cpu_affinity 0001 0010 0100 1000 #将Nginx工作进程绑定到指定的CPU核心,默认Nginx是不进行进程绑定的
4 worker_cpu_affinity auto #自动绑定设置
5 #error_log logs/error.log; #指定错误日志存放的路径
6 #error_log logs/error.log notice; #错误日志记录级别
7 #er nobody;
8 # 3 worker_processes 1;
9 # 4
10 # rror_log logs/error.log info;
11
12 #pid logs/nginx.pid; #指定进程pid的存储文件位置
13
14 worker_rlimit_nofile 512000; #工作进程最大打开文件数
15 events {
#事件模块
16 use epoll; #使用的网络I/O模型,Linux推荐使用epoll模式;默认为epoll模式
17 worker_connections 1024; #用于定义Nginx每个进程的最大连接数,默认是1024
18 }
19
20 http {
21 include mime.types; #导入支持的文件类型
22 default_type application/octet-stream; #设置默认的类型,会提示下载不匹配的类型文件
23
24 #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # log_format是Nginx的HttpLog模块指令,用于指定Nginx日志的输出格式。main为此日志输出格式的名称,可以在下面的access_log指令中引用
25 # '$status $body_bytes_sent "$http_referer" '
26 # '"$http_user_agent" "$http_x_forwarded_for"';
27
28 #access_log logs/access.log main;
29
30 sendfile on; #用于开启高效文件传输模式。将tcp_nopush和tcp_nodelay两个指令设置为on用于防止网络阻塞
31 #tcp_nopush on; #在开启了sendfile的情况下,合并请求后统一发送给客户端
32
33 #keepalive_timeout 0;
34 keepalive_timeout 65; #设置客户端连接保持活动的超时时间。在超过这个时间之后,服务器会关闭该连接;单位是秒
35
36 #gzip on; #开启文件压缩
37
38 server {
#定义作为web服务器的相关属性 可以有多个
39 listen 80; #监听的端口
40 server_name localhost; #设置server name,可以以空格隔开写多个,支持正则表达式,如 *.aaa.com,www.aaa.* ~^www\d+\.aaa\.com$ default_server
41
42 #charset koi8-r; #设置编码格式,默认是俄语格式,可以改为utf-8
43
44 #access_log logs/host.access.log main; #设备访问日志
45
46 location / {
#定义一个虚拟主机的属性,所有的web服务必须定义成一个虚拟主机
47 root html; #指定网站目录
48 index index.html index.htm; #指定默认网页文件,此指令由ngx_http_index_module模块提供
49 }
50
51 #error_page 404 /404.html;
52
53 # redirect server error pages to the static page /50x.html
54 #
55 error_page 500 502 503 504 /50x.html; #当发生错误的时候能够显示一个预定义的uri(相对路径)
56 location = /50x.html {
57 root html;
58 }
59
2. nginx関連の操作
nginx -h # 查看帮助信息
nginx -v # 查看nginx版本
nginx start # 启动nginx
nginx -s quit # 关闭nginx,完整有序的停止nginx,保存相关信息
nginx -s stop # 关闭nginx,快速停止nginx,可能不保存相关信息
nginx -s reload # 重新载入nginx,当配置信息需要重新加载配置时使用
nginx -t -c filename # 测试nginx配置文件是否正确
nginx -s reopen # 重新打开日志文件
3.yumでインストールしたnginxのパスの場所
[root@C7--01 ~]# rpm -ql nginx #查看所有nginx路径
/etc/logrotate.d/nginx
/etc/nginx
/etc/nginx/conf.d
/etc/nginx/conf.d/default.conf
/etc/nginx/fastcgi_params
/etc/nginx/mime.types
/etc/nginx/modules
/etc/nginx/nginx.conf
/etc/nginx/scgi_params
/etc/nginx/uwsgi_params
/usr/lib/systemd/system/nginx-debug.service
/usr/lib/systemd/system/nginx.service
/usr/lib64/nginx
/usr/lib64/nginx/modules
/usr/libexec/initscripts/legacy-actions/nginx
/usr/libexec/initscripts/legacy-actions/nginx/check-reload
/usr/libexec/initscripts/legacy-actions/nginx/upgrade
/usr/sbin/nginx
/usr/sbin/nginx-debug
/usr/share/doc/nginx-1.21.4
/usr/share/doc/nginx-1.21.4/COPYRIGHT
/usr/share/man/man8/nginx.8.gz
/usr/share/nginx
/usr/share/nginx/html
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/index.html
/var/cache/nginx
/var/log/nginx
ソース コード: ファイルはインストールされている場所にあり、上記のコマンドを使用して表示することもできます。
4. nginxアクセスログの概要
まず http リクエストと戻り値を見てみましょう
[root@C7--01 ~]# curl -v 192.168.2.1
* About to connect() to 192.168.2.1 port 80 (#0) #请求行
* Trying 192.168.2.1...
* Connected to 192.168.2.1 (192.168.2.1) port 80 (#0) #请求头
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 192.168.2.1
> Accept: */* #请求数据
>
< HTTP/1.1 200 OK #状态码
< Server: nginx/1.18.0
< Date: Fri, 19 Nov 2021 14:48:37 GMT
< Content-Type: text/html
< Content-Length: 612
< Last-Modified: Fri, 19 Nov 2021 14:33:40 GMT
< Connection: keep-alive
< ETag: "6197b5c4-264"
< Accept-Ranges: bytes #单位bytes
<
<!DOCTYPE html> #响应正文
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
* Connection #0 to host 192.168.2.1 left intact
nginx ファイルは Apache ファイルとは少し異なります
nginxのファイルはacces.log と error.log、
apacheのファイルはaccess_log と error_log です。
[root@C7--01 ~]# vim /usr/local/nginx/conf/nginx.conf
21 #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
22 # '$status $body_bytes_sent "$http_referer" '
23 # '"$http_user_agent" "$http_x_forwarded_for"';
24
25 #access_log logs/access.log main;
26
形式は基本的にapacheと同じですが、nginxでは内部変数を使用しますので、以下に変数について紹介します。
[root@C7--01 ~]# vim /usr/lcoal/nginx/logs/access.log
192.168.2.1 - - [19/Nov/2021:22:48:37 +0800] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0"
$remote_addr | リモートリクエストIPアドレス |
---|---|
リモート ユーザーのメールボックス | デフォルトでは、- として表示されません。 |
$remote_user | クライアント ユーザーの名前。使用できない場合は、- に置き換えます。 |
$time_local | ローカルタイムスタンプ |
$リクエスト | Web ページ内の JPG 画像などの特定の URI ファイルをリクエストする |
$ステータス | httpリクエストステータスコード |
$body_bytes_sent | リクエストファイルサイズ |
$http_refer | Web ページの URL ジャンプ元とソースアドレスは偽造される可能性があります。たとえば、HTML Web ページは画像 URI リソースを呼び出します。 |
$http_user_agent | 利用者端末ブラウザUserAgentに関する情報 |
$http_x_forwarded_for | HTTP リクエスターの実際の IP です。この項目は、HTTP プロキシまたは負荷分散サーバーを通過する場合にのみ追加されます。 |