Nginx --- Abandon Series01の紹介

 

最近、さまざまな求人サイトのJD(職務記述書)で、Javaを採用する際にnginxが必要であることがわかりました。3年半前、職場でnginxに連絡しましたが、当時は使用レベルでしかありませんでした。それを要約しませんでした。旧正月の間に家で退屈している場合は、要約を書いてください。

毎日のルーチンに従ってください:


1. Nginxとは何ですか?

Nginxは、ロシア人によって作成された非常に軽量なHTTPサーバーです。「エンジンX」と発音されるNginxは、高性能のHTTPおよびリバースプロキシサーバーであり、IMAP / POP3 / SMTPプロキシサーバーでもあります。Nginxは、ロシアで2番目に訪問されたRambler.ruサイトのためにロシアのIgor Sysoevによって開発され、数年以上このサイトで実行されています。プロジェクトが構築されるときのIgorSysoev、ベースのBSD(BSDオープンソースライセンスプロトコルの大きな自由使用するために与えられます。基本的にユーザーは「好きなことをする」ことができ、自由に使用でき、ソースコードを変更することもできますコードの後に​​変更することもできますオープンソースまたはプロプライエタリソフトウェアとして再発行されます)ライセンス供与されます。Nginxのリリース以来、Nginxはその安定性、豊富な機能セット、サンプル構成ファイル、および低いシステムリソース消費で知られています。

第二に、Nginxの利点

1.高い同時接続:公式テストでは50,000の同時接続をサポートでき、実際の実稼働環境では同時接続の数は20,000から30,000に達します。

2.低メモリ消費: 30,000の同時接続では、開かれた10個のNginxプロセスのみが150Mのメモリを消費します(15M * 10 = 150M)

3.構成ファイルは非常にシンプルです。スタイルはシンプルで理解しやすいです。

4.低コスト: Nginxはオープンソースソフトウェアであり、無料で使用できます。F5 BIG-IPやNetScalerなどのハードウェア負荷分散スイッチの購入には、100,000〜数十万元以上が必要です。

5. Rewirte書き換えルールのサポート:さまざまなドメイン名とURLに従って、HTTPリクエストをさまざまなバックエンドサーバーグループに分割できます

6.組み込みのヘルスチェック機能: Nginxプロキシのバックエンドにある特定のWebサーバーがダウンしても、フロントエンドアクセスには影響しません。

7.帯域幅の節約: GZIP圧縮をサポートし、ブラウザのローカルキャッシュのヘッダーヘッダーを追加できます

8.高い安定性:リバースプロキシに使用され、ダウンタイムの可能性は最小限に抑えられます

Nginxは、パフォーマンスの最適化のために特別に開発されています。パフォーマンスは最も重要な考慮事項であり、実装の効率に細心の注意を払っています。カーネルポーリングモデルをサポートし、高負荷のテストに耐えることができ、レポートによると、最大50,000の同時接続をサポートできます。Nginxは高い安定性を備えています。他のHTTPサーバーがアクセスのピークに遭遇した場合、または誰かが悪意を持って低速接続を開始した場合、サーバーの物理メモリが使い果たされ、頻繁に交換される可能性があり、サーバーは応答を失った場合にのみ再起動できます。たとえば、Apacheに200を超えるプロセスがあると、Webの応答速度は明らかに非常に遅くなります。Nginxは段階的なリソース割り当てテクノロジーを採用しているため、CPUとメモリの使用量が非常に少なくなります。Nginxは、10,000の非アクティブな接続を維持し、2.5Mのメモリしか占有しないため、DOSのような攻撃は基本的にNginxには役に立たないと公式に述べています。安定性の点では、nginxはlighttpdよりも優れています。Nginxはホットデプロイメントをサポートしており、起動は特に簡単で、7 * 24を中断することなく実行できます。数か月間実行しても、再起動する必要はありません。中断のないサービスでソフトウェアバージョンをアップグレードすることもできます。Nginx、SMPの利点を最大限に活用し、ブロッキング遅延を減らすことができるマスタースレーブ(現在、誰もがマスターフォロワーを使用して説明することを提唱しています。スレーブという言葉は差別的であり、世界中で注意して使用されています)モデルを採用しています。ディスクI / Oのワークプロセスの Nginxコードの品質は非常に高く、コードは非常に標準化されており、技術は成熟しており、モジュールの拡張も非常に簡単です。Nginxは、sendfile(Linux2.2 +)、accept-filter(FreeBSD4.1 +)、TCP_DEFER_ACCEPT(Linux 2.4+)のサポートなど、OSが提供する最新機能のいくつかを採用しており、パフォーマンスが大幅に向上しています。

第三に、nginxを使用しているのは誰ですか

Nginxの市場シェアは増加し続けています:

どの国内企業がnginxサーバーを使用していますか:Sina、NetEase、Tencent、CSDN 、Kuliu、Shuimu Community、Douban、Six Rooms、Xiaomiなど。

第四に、NginxとApacheの違い

Nginxは、Apacheと同様にHTTPサーバーソフトウェアです。どちらも機能実装用のモジュラー構造設計を採用しています。どちらもPHP、Perl、Pythonなどの共通言語インターフェイスをサポートし、フォワードプロキシとリバースプロキシ、仮想ホスト、 URL。書き換え、圧縮送信、SSL暗号化送信など。それらの最大の違いは、Apacheは処理速度が非常に遅く、多くのメモリリソースを占有するのに対し、Nginxはその逆です。機能の実装に関しては、すべてのApacheモジュールが動的および静的コンパイルをサポートし、Nginxモジュールは静的にコンパイルされます。同時に、ApacheFcgi(Fast Common Gateway Interface)をサポートしていませんが、NginxはFcgiを非常によくサポートしています。最も重要なのは、接続処理に関して、Nginxはepollをサポートしています(epoll大量のファイル記述を処理するためLinuxカーネルです) 。文字と改善されたポーリングは、選択/ポーリングするインターフェイスのLinuxマルチプレックスIO拡張バージョンの下にあり、アクティブなCPU使用率が少量の場合にのみ、多数の同時接続システムでプログラムを大幅に改善できます)、Apacheサポートされていません。サイズの点では、Nginxインストールパッケージはわずか数百Kであり、Nginxと比較すると、Apacheは間違いなく巨大です。NginxとApacheの類似点と相違点を理解した後、私は基本的にHTTPサーバーとしてのNginxの利点を理解しました。

5、Nginxのインストール

①Windowsへのインストール

1. Windowsバージョンのnginxをダウンロードします:http:   //nginx.org/download

ダウンロードするバージョンを選択するだけです。

2.圧縮ファイルを中国語以外のディレクトリに解凍します(グリーンソフトウェアは圧縮する必要があるだけです)

3. Nginxを起動および停止するには(前提条件:Apacheが閉じていることを確認してください)、解凍ディレクトリに入り、解凍ディレクトリでstart nginx.exeコマンドを実行すると、起動後にブラウザでアドレスにアクセスできます。

nginx -s stop 快速关闭
nginx -s quit 安全关闭
nginx -s reload 重载配置文件
nginx -s reopen 重新打开日志文件

上記はNginxの停止コマンドです。

再起動してシャットダウンするようにコントローラーステーションを構成します。

 3.1nginx.batファイルをnginxフォルダーにコピーします。

3.2nginx.batファイルの構成を変更します。nginxのインストールパスを構成します

3.3nginx.batを使用してnginxを制御する

 

①Linuxへのインストール。Linuxでのインストールプロセスは少し長くなります。ドキュメントが長くなりすぎないように、後でLinuxサーバーにNginxをインストールするインストールプロセスについて別の記事を書きます。

Nginx構成ファイルの6つの詳細な分析

1.構成ファイルを知っている:

基本的に、Linuxのすべてのサービスには、サービスの実行方法、使用するパラメーター、有効にする関数、および関連する操作ファイルの場所を定義するメイン構成ファイルがあります。したがって、メイン構成ファイルは次のようになります。サービス。Nginxのメイン設定ファイルを分析してみましょう。 

Nginxのメイン構成ファイルは、デフォルトで/usr/local/nginx/nginx.confにあります。以下は、Nginx構成ファイルのいくつかのパラメーターに関するコメントです。 

サンプルは、次の構成ファイルを参照しています。

#指定使用的用户
#user  nobody;

#启动进程,通常设置成和cpu的数量相等
worker_processes  1;

#全局错误日志
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#PID文件--存放进程号的文件
#pid        logs/nginx.pid;

#工作模式及连接数上限
events {
    #单个后台worker process进程的最大并发链接数
    worker_connections  1024;
    #并发总数是 worker_processes 和 worker_connections 的乘积

    #Nginx支持如下处理连接的方法(I/O复用方法),这些方法可以通过 use指令指定。  
    #use [ kqueue | rtsig | epoll | /dev/poll | select | poll ];  

    #use epoll;  #使用 epoll(linux2.6的    性能方式 )  
    #select - 标准方法。 如果当前平台没有更有效的方法,它是编译时默认的方法。你可以使用配置参数 –with-select_module 和 –without-select_module 来启用或禁用这个模块。  
    #poll - 标准方法。 如果当前平台没有更有效的方法,它是编译时默认的方法。你可以使用配置参数–with-poll_module 和 –without-poll_module 来启用或禁用这个模块。  
    #kqueue -   效的方法,使用于 FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和 MacOS X. 使用双处理器的 MacOS X系统使用 kqueue可能会造成内核崩溃。  
    #epoll -  效的方法,使用于Linux内核2.6版本及以后的系统。在某些发行版本中,如 SuSE 8.2,有让2.4版本的内核支持epoll的补丁。  
    #rtsig - 可执行的实时信号,使用于Linux内核版本 2.2.19以后的系统。可是从Linux内核版本2.6.6-mm2开始,这个参数就不再使用了.  
    #/dev/poll -  效的方法,使用于 Solaris 7 11/99+, HP/UX 11.22+ (eventport), IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+.  
    #eventport -  效的方法,使用于 Solaris 10. 为了防止出现内核崩溃的问题, 有必要安装 这个 安全补丁。  
}


http {
    #设定mime类型,类型由mime.type文件定义
    include       mime.types;
    default_type  application/octet-stream;
    
     #设定日志格式	
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,
    #对于普通应用,必须设为 on,
    #如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,
    #以平衡磁盘与网络I/O处理速度,降低系统的uptime.	
    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;
    
    #连接超时时间
    #keepalive_timeout  0;
    keepalive_timeout  65;

    #开启gzip压缩	
    #gzip  on;
    
    #设定虚拟主机配置	
    server {
        #侦听80端口
        listen       80;

	#定义使用 www.nginx.cn访问
        server_name  localhost;

	#定义服务器的默认网站根目录位置
        root html;

	#设置编码
        #charset koi8-r;
	
	#设定本虚拟主机的访问日志
        #access_log  logs/host.access.log  main;

	#默认请求
        location / {
	    root html;	
	    #定义首页索引文件的名称
            index  index.html index.htm;
        }

	# 定义错误提示页面
        #error_page  404              /404.html;
        #redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #PHP脚本转给apache处理
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置.
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        # 禁止访问 .htxxx 文件
        #location ~ /\.ht {
        #    deny  all;
        #}
    }

    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
}

2.構成ファイルの構造:

nginx.confは複数のブロックで構成され、最も外側のブロックはメイン、メインにはイベントとhttpが含まれ、httpには複数のアップストリームサーバーと複数のサーバーが含まれ、サーバーには複数の場所が含まれます。

メイン(グローバル設定)、サーバー(仮想ホスト設定)、アップストリーム(負荷分散サーバー設定)、および場所(URLが特定の場所と一致する設定)。

  • メインブロックによって設定された命令は、他のすべての設定に影響します。
  • サーバーブロックの命令は、主にホストとポートを指定するために使用されます。
  • アップストリームコマンドは主に負荷分散に使用され、一連のバックエンドサーバーをセットアップします。
  • ロケーションブロックは、Webページのロケーションと一致させるために使用されます。

:4の間の関係のサーバ継承メイン場所継承サーバー上流継承他の設定もないにも継承されています。

これらの4つの部分のうち、各部分にはいくつかの命令が含まれています。これらの命令には、主にNginxメインモジュール命令、イベントモジュール命令、HTTPコアモジュール命令が含まれます。同時に、各部分はHttpSSLモジュールなどの他のHTTPモジュール命令を使用することもできます。 。、HttpGzip静的モジュールおよびHttp追加モジュールなど。

2.1Nginxグローバル構成

#指定使用的用户和组

#user  nginx nginx;

#启动进程,通常设置成和cpu的数量相等

worker_processes  1;

#全局错误日志

#error_log  logs/error.log;

#error_log  logs/error.log  notice;

#error_log  logs/error.log  info;

#PID文件--存放进程号的文件

#pid        logs/nginx.pid;

グローバル構成でnginxに必要な実行中のユーザーを作成します。

groupadd nginx
useradd -g nginx nginx

2.2イベント構成:サーバーがLinuxの場合は、use epollを開き、linuxカーネルを使用してパフォーマンス最適化ソリューションを提供してください。

#工作模式及连接数上限
events {
    #单个后台worker process进程的最大并发链接数
    worker_connections  1024;
    #并发总数是 worker_processes 和 worker_connections 的乘积

    #Nginx支持如下处理连接的方法(I/O复用方法),这些方法可以通过 use指令指定。  
    #use [ kqueue | rtsig | epoll | /dev/poll | select | poll];  

    use epoll;  #使用 epoll(linux2.6的    性能方式 )
}

2.3 http構成:

http {
    #Nginx对HTTP服务器相关属性的配置
include       mime.types;
default_type  application/octet-stream;
#设定虚拟主机配置	
    server {
        #侦听80端口
        listen       80;
	    #定义使用 www.itsource.cn访问
        server_name  www.itsource.cn;
	    location  {
        }
		location  {
        }
		…..
}
  server {
        #侦听80端口
        listen       80;
	    #定义使用 www.example.cn访问
        server_name  www.example.cn;
	    location  {
        }
		location  {
        }
		…..
    }

}

Includeはメインモジュールコマンドであり、構成ファイルに含まれるファイルの設定を実現します。これにより、メイン構成ファイルの複雑さを軽減できます。Apacheのincludeメソッドに似ています。

default_typeはHTTPコアモジュール命令に属します。ここでは、デフォルトタイプはバイナリストリームに設定されています。これは、ファイルタイプが定義されていない場合にこのメソッドを使用します。たとえば、PHP環境が構成されていない場合、Nginxは解析しません。このとき、ブラウザを使用してください。PHPファイルにアクセスするとダウンロードウィンドウが表示されます。

サーバーブロックの命令は、主にホストとポート(仮想ホスト)を指定するために使用されます。

ロケーション部分は、主にWebページのロケーションを照合し、さまざまな機能機能を設定するために使用されます。たとえば、キャッシュ、リダイレクトなどです。

2.4重要な指示の場所

ロケーション部分は、主にWebページのロケーションを照合し、さまざまな機能を設定するために使用されます。たとえば、キャッシュ、リダイレクトなどです。

拡張子が.gif、.jpg、.jpeg、.png、.bmp、.swfで終わる静的ファイルは処理のためにnginxに渡され、expiresは静的ファイルの有効期限を指定するために使用されます。ここでは30日です。

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$  {
                root    /wwwroot/www.itsource.com;
               expires 30d;
        }

アップロード中のすべてのファイルhtml、処理のためnginxに渡されます。もちろん、アップロードディレクトリhtmlディレクトリは/web/wwwroot/www.itsource.cnディレクトリに含まれています。

location ~ ^/(upload|html)/  {
        root    /web/wwwroot/www.itsource.com;
        expires 30d;
        }

場所は、この仮想ホストでの動的Webページのフィルタリング処理です。つまり、.phpサフィックスが付いたすべてのファイルは、処理のためにローカル8080ポートに渡されます。

location ~ .*.php$ {
    index index.php;
    proxy_pass http://localhost:8080;
}

場所の構文:

  • 〜#波線は、大文字と小文字が区別される通常のマッチングが実行されることを示します
  • 〜*#は、大文字と小文字を区別せずに、通常の一致を実行することを意味します
  • ^〜#^〜は通常の文字一致を意味します。このオプションが一致する場合、このオプションのみが一致し、他のオプションは一致しません。通常、ディレクトリの一致に使用されます。
  • =#通常の文字の完全一致を実行します
  •  
  • 次の文法規則は、その場所で受け入れることができます
location  = / {
  # 只匹配"/".
  [ configuration A ] 
}
location  / {
  # 匹配任何请求,因为所有请求都是以"/"开始
  # 但是更长字符匹配或者正则表达式匹配会优先匹配
  [ configuration B ] 
}
location ^~ /images/ {
  # 匹配任何以 /images/ 开始的请求,并停止匹配 其它location
  [ configuration C ] 
}
location ~* \.(gif|jpg|jpeg)$ {
  # 匹配以 gif, jpg, or jpeg结尾的请求. 
  # 但是所有 /images/ 目录的请求将由 [Configuration C]处理.   
  [ configuration D ] 
}

優先順位

1. =プレフィックスの命令は、このクエリと完全に一致します。見つかった場合は、検索を停止します。

2.残りのすべての通常の文字列、最長の一致。この一致で^〜プレフィックスが使用されている場合、検索は停止します。

3.正規表現、構成ファイルで定義された順序。

4.ルール3で一致が生成された場合、その結果が使用されます。それ以外の場合は、2番目のルールと同様に使用されます。

 

リクエストURIの例:

//>構成Aに準拠

/documents/document.html->構成Bに準拠

/images/1.gif->構成Cに準拠

/documents/1.jpg->構成を満たす 


つづく!

おすすめ

転載: blog.csdn.net/LB_Captain/article/details/113799843