Nginxの導入とインストール

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 プロキシまたは負荷分散サーバーを通過する場合にのみ追加されます。

おすすめ

転載: blog.csdn.net/qq_36306519/article/details/131096083