nginx は、ロシアで 2 番目にアクセス数の多いサイトである rambler.ru サイト用に lgor sysoev によって設計および開発されました。 2004 年のリリース以来、オープンソースの力によって、ほぼ成熟し、完璧になりました。
nginx は機能が豊富で、http サーバー、リバースプロキシサーバー、メールサーバーとして利用できます。 fastcgi、ssl、仮想ホスト、url書き換え、gzipなどの機能をサポートします。また、多くのサードパーティ製モジュール拡張機能をサポートしています。
nginx は、安定性、機能セット、サンプル構成ファイル、システム リソース消費量の低さにより、世界のアクティブな Web サイト (約 2,220 万 Web サイト) の 12.18% の使用率で追いつきました。
nginx 共通機能
1. http プロキシ、リバース プロキシ : Web サーバーの最も一般的に使用される機能の 1 つ、特にリバース プロキシ。
ここでは、陽性剤と反応性剤について説明するために 2 つの写真を示します。具体的な詳細については、情報を参照してください。
#nginx は、リバース プロキシとして使用すると安定したパフォーマンスを提供し、柔軟な構成で転送機能を提供できます。 nginx は、画像ファイルの末尾ではファイル サーバーに移動し、動的ページの場合は Web サーバーに移動するなど、さまざまな規則的なマッチングに基づいてさまざまな転送戦略を採用できます。サーバー ソリューションでは、やりたいことが何でもできます。そしてnginxは返された結果に対してエラーページジャンプや例外判定などを行います。分散サーバーが異常な場合、リクエストを別のサーバーに再転送し、異常なサーバーを自動的に削除できます。
2. 負荷分散
nginx は、組み込み戦略と拡張戦略という 2 種類の負荷分散戦略を提供します。組み込みの戦略は、ポーリング、加重ポーリング、および IP ハッシュです。拡張戦略は、想像を絶するものであると同時に想像力豊かです。考えられないことやできないことは何もありません。すべての負荷分散アルゴリズムを参照して、それらを 1 つずつ見つけて実装できます。
上の 3 つの図では、これら 3 つの負荷分散アルゴリズムの実装を理解しています。
#ip ハッシュ アルゴリズム。要求された IP に対してハッシュ操作を実行します。クライアントにリクエストを送信し、ハッシュ結果に基づいて同じクライアント IP からのリクエストを同じサーバーに分散して処理することで、セッションが共有されない問題を解決できます。
3. Web キャッシュ
nginx は、柔軟な構成と fastcgi_cache のサポートにより、さまざまなファイルに対してさまざまなキャッシュ処理を実行できます。 fastcgi 動的プログラムをキャッシュするために使用されます。サードパーティ製のngx_cache_purgeと連携し、指定したURLキャッシュコンテンツを追加・削除して管理できます。
4. nginx 関連のアドレス
2. nginx 設定ファイルの構造
ダウンロードした場合は、インストール ファイル, conf フォルダー内の nginx.conf ファイルを開くと、nginx サーバーの基本構成とデフォルト構成もここに保存されます。
nginx.conf のコメント シンボル ビット
#nginx ファイルの構造。学習を始めたばかりの学生は、これをもう一度確認してください。
デフォルト設定
nginx ファイル構造
... #全局块 events { #events块 ... } http #http块 { ... #http全局块 server #server块 { ... #server全局块 location [pattern] #location块 { ... } location [pattern] { ... } } server { ... } ... #http全局块 }
1. グローバル ブロック: nginx にグローバルに影響を与える命令を設定します。一般的に、nginxサーバーを実行するためのユーザーグループ、nginxプロセスのpid保存パス、ログ保存パス、設定ファイルの導入、生成可能なワーカープロセスの数などがあります。
2. イベント ブロック: 設定は、nginx サーバーまたはユーザーとのネットワーク接続に影響します。プロセスごとの接続の最大数、接続要求を処理するためにどのイベント ドリブン モデルを選択するか、複数のネットワーク接続を同時に受け入れることを許可するかどうか、複数のネットワーク接続のシリアル化を有効にするかどうかなどがあります。
3. http ブロック: 複数のサーバーをネストし、プロキシ、キャッシュ、ログ定義、その他のほとんどの機能とサードパーティのモジュール構成を構成できます。ファイルの導入、MIME タイプの定義、ログのカスタマイズ、ファイル転送に sendfile を使用するかどうか、接続タイムアウト、単一接続リクエストの数など。
4. サーバー ブロック: 仮想ホストの関連パラメーターを設定します。1 つの http 内に複数のサーバーが存在する可能性があります。
5. ロケーション ブロック: リクエストのルーティングとさまざまなページの処理を設定します。
以下は、誰でも理解できるようにするための構成ファイルであり、例を示すために私が構築したテスト マシンにもインストールされています。
########### 每个指令必须有分号结束。################# #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 } } }
上記は nginx の基本的な構成ですが、次の点に注意する必要があります:
1. 1.$remote_addr と $http_x_forwarded_for は、クライアントのIP アドレス; 2. $remote_user: クライアント ユーザー名の記録に使用; 3.$time_local: アクセス時間とタイム ゾーンの記録に使用; 4.$request: 要求された URL と http プロトコルの記録に使用;
5.$status: リクエストのステータスを記録するために使用されます。成功は 200、6.$body_bytes_s ent: クライアントに送信されたファイルの本文コンテンツのサイズを記録します。7.$http_referer: ページ リンクを記録するために使用されます。アクセス元; 8.$http_user_agent: クライアントのブラウザ関連情報を記録します;
2. サンダリング ハード現象: ネットワーク接続が到着すると、複数のスリープ状態のプロセスが同僚によって目覚めますが、リンクを取得できるのは 1 つのプロセスだけです。システムのパフォーマンスに影響します。
3、每个指令必须有分号结束。
下面看下其他网友的补充:
在此记录下nginx服务器nginx.conf的配置文件说明, 部分注释收集与网络.
#运行用户 user www-data; #启动进程,通常设置成和cpu的数量相等 worker_processes 1; #全局错误日志及pid文件 error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; #工作模式及连接数上限 events { use epoll; #epoll是多路复用io(i/o multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能 worker_connections 1024;#单个后台worker process进程的最大并发链接数 # multi_accept on; } #设定http服务器,利用它的反向代理功能提供负载均衡支持 http { #设定mime类型,类型由mime.type文件定义 include /etc/nginx/mime.types; default_type application/octet-stream; #设定日志格式 access_log /var/log/nginx/access.log; #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用, #必须设为 on,如果用来进行下载等应用磁盘io重负载应用,可设置为 off,以平衡磁盘与网络i/o处理速度,降低系统的uptime. sendfile on; #tcp_nopush on; #连接超时时间 #keepalive_timeout 0; keepalive_timeout 65; tcp_nodelay on; #开启gzip压缩 gzip on; gzip_disable "msie [1-6]\.(?!.*sv1)"; #设定请求缓冲 client_header_buffer_size 1k; large_client_header_buffers 4 4k; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; #设定负载均衡的服务器列表 upstream mysvr { #weigth参数表示权值,权值越高被分配到的几率越大 #本机上的squid开启3128端口 server 192.168.8.1:3128 weight=5; server 192.168.8.2:80 weight=1; server 192.168.8.3:80 weight=6; } server { #侦听80端口 listen 80; #定义使用www.xx.com访问 server_name www.xx.com; #设定本虚拟主机的访问日志 access_log logs/www.xx.com.access.log main; #默认请求 location / { root /root; #定义服务器的默认网站根目录位置 index index.php index.html index.htm; #定义首页索引文件的名称 fastcgi_pass www.xx.com; fastcgi_param script_filename $document_root/$fastcgi_script_name; include /etc/nginx/fastcgi_params; } # 定义错误提示页面 error_page 500 502 503 504 /50x.html; location = /50x.html { root /root; } #静态文件,nginx自己处理 location ~ ^/(images|javascript|js|css|flash|media|static)/ { root /var/www/virtual/htdocs; #过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小一点。 expires 30d; } #php 脚本请求全部转发到 fastcgi处理. 使用fastcgi默认配置. location ~ \.php$ { root /root; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param script_filename /home/www/www$fastcgi_script_name; include fastcgi_params; } #设定查看nginx状态的地址 location /nginxstatus { stub_status on; access_log on; auth_basic "nginxstatus"; auth_basic_user_file conf/htpasswd; } #禁止访问 .htxxx 文件 location ~ /\.ht { deny all; } } }
以上是一些基本的配置,使用nginx最大的好处就是负载均衡
如果要使用负载均衡的话,可以修改配置http节点如下:
#设定http服务器,利用它的反向代理功能提供负载均衡支持 http { #设定mime类型,类型由mime.type文件定义 include /etc/nginx/mime.types; default_type application/octet-stream; #设定日志格式 access_log /var/log/nginx/access.log; #省略上文有的一些配置节点 #。。。。。。。。。。 #设定负载均衡的服务器列表 upstream mysvr { #weigth参数表示权值,权值越高被分配到的几率越大 server 192.168.8.1x:3128 weight=5;#本机上的squid开启3128端口 server 192.168.8.2x:80 weight=1; server 192.168.8.3x:80 weight=6; } upstream mysvr2 { #weigth参数表示权值,权值越高被分配到的几率越大 server 192.168.8.x:80 weight=1; server 192.168.8.x:80 weight=6; } #第一个虚拟服务器 server { #侦听192.168.8.x的80端口 listen 80; server_name 192.168.8.x; #对aspx后缀的进行负载均衡请求 location ~ .*\.aspx$ { root /root; #定义服务器的默认网站根目录位置 index index.php index.html index.htm; #定义首页索引文件的名称 proxy_pass http://mysvr ;#请求转向mysvr 定义的服务器列表 #以下是一些反向代理的配置可删除. proxy_redirect off; #后端的web服务器可以通过x-forwarded-for获取用户真实ip proxy_set_header host $host; proxy_set_header x-real-ip $remote_addr; proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for; client_max_body_size 10m; #允许客户端请求的最大单文件字节数 client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数, proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时) proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时) proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时) proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小 proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置 proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2) proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传 } } }
以上がNginx設定ファイルの構成方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。