ホームページ  >  記事  >  バックエンド開発  >  Nginx 共通アプリケーション技術ガイド [Nginx Tips] 第 2 版

Nginx 共通アプリケーション技術ガイド [Nginx Tips] 第 2 版

WBOY
WBOYオリジナル
2016-07-30 13:29:321234ブラウズ
著者: NetSeek http://www.linuxtone.org (IT運用保守エキスパートネットワーク | クラスターアーキテクチャ | パフォーマンスチューニング)
転載歓迎 転載の際は、必ず出典元と作者情報を明記してください。ハイパーリンクの形式の記事とこのステートメント
初公開日: 2008-11-25 更新日: 2009-1-14
目次
1. Nginx の基礎知識
2. Nginx のインストールとデバッグ
3. Nginx リダイレクト
5. Nginx ディレクトリにスラッシュが自動的に追加されます。 6. Nginx の場所
7. Nginx の有効期限が切れます
8 Nginx キャッシュ
12、
Nginx ロードバランシング
13、
nginx Simple Optimization’S ’s's 】:
この技術ガイドは、中国で NGINX の使用を普及し、誰もが NGINX の使用スキルの一部を理解し習得できるようにするために書かれています。このガイドのヒントの多くは、インターネット、職場、またはインターネット上の友人からの質問から得たもので、喜んで共有してくれるインターネット上の友人に感謝と敬意を表したいと思います。この技術ガイドを充実させ、より良い提案を行うために私と一緒に参加してくださる皆さんを歓迎します。皆さん、http://www.linuxtone.org テクノロジー共有コミュニティにご注目ください。 お互いに学び、一緒に進歩しましょう
1. Nginx の基礎知識 1. はじめに Nginx (「エンジン x」) は、高性能の HTTP およびリバース プロキシ サーバーであるだけでなく、 IMAP/POP3/SMTPプロキシサーバー。 Nginx は、ロシアで 2 番目にアクセス数の多い Rambler.ru サイト用に Igor Sysoev によって開発され、2 年半以上運営されています。 Igor は、BSD のようなライセンスに基づいてソース コードをリリースします。まだベータ版ですが、Nginx その安定性、豊富な機能セット、サンプル構成ファイル、およびシステム リソース消費の低さはすでに知られています。
詳細については、公式 wiki を参照してください: http://wiki.codemongers.com/2. Nginx の利点nginx は、HTTP サーバーとして次の基本機能を備えています。 1) 静的ファイル、インデックス ファイル、およびオープン ファイル記述子の自動インデックス作成を処理します。 2) キャッシュフリーのリバースプロキシアクセラレーション、シンプルなロードバランシング、フォールトトレランス。
3) FastCGI、シンプルなロードバランシング、フォールトトレランス。 4) モジュール構造。 gzip 圧縮、バイト範囲、チャンク応答、SSI フィルターなどのフィルターが含まれます。 1 つのページ内に複数の SSI が存在し、FastCGI または別のプロキシ サーバーによって処理される場合、この処理はお互いを待たずに並行して実行できます。
5) SSL および TLS SNI をサポートします
Nginx はパフォーマンスの最適化のために特別に開発されており、実装では効率に細心の注意を払っています。カーネル ポーリング モデルをサポートしており、高負荷に耐えることができ、最大 50,000 の同時接続をサポートできることが報告されています。
Nginx は安定性が高いです。他の HTTP サーバーがアクセスのピークに遭遇したり、誰かが悪意を持って遅い接続を開始したりすると、サーバーの物理メモリが枯渇し、スワップが頻繁に発生し、応答が失われる可能性があり、サーバーは再起動するしかありません。たとえば、現在 Apache のプロセスが 200 を超えると、Web の応答速度は明らかに非常に遅くなります。 Nginx は段階的リソース割り当てテクノロジーを採用しており、CPU とメモリの使用量が非常に低くなります。 nginx は、10,000 の非アクティブな接続を維持すると公式に述べています。これは 2.5M のメモリしか占有しないため、DOS のような攻撃は基本的に nginx にとって有害で​​す。 役に立たない。安定性の点では、nginx は lighthttpd よりも優れています。 Nginx はホットデプロイメントをサポートしています。特に起動が簡単で、数か月間実行しても再起動する必要がなく、ほぼ 24 時間年中無休で実行できます。サービスを中断せずにソフトウェアのバージョンをアップグレードすることもできます。
Nginx はマスター/スレーブ モデルを採用しており、SMP の利点を最大限に活用し、ディスク I/O におけるワーカー プロセスのブロック遅延を軽減できます。 select()/poll() 呼び出しを使用する場合、プロセスごとの接続数を制限することもできます。
Nginx コードの品質は非常に高く、コードは非常に標準化されており、技術は成熟しており、モジュールの拡張も簡単です。特に言及する価値があるのは、強力なアップストリーム チェーンとフィルター チェーンです。アップストリームは、リバース プロキシや他のサーバーとの通信などのモジュールを作成するための優れた基盤を築きます。フィルター チェーンの最も優れた点は、各フィルターが前のフィルターの実行が完了するまで待つ必要がないことです。前のフィルターの出力を現在のフィルターの入力として使用できます。これは Unix パイプラインに似ています。これは、モジュールがバックエンド サーバーから送信されたリクエストの圧縮を開始できることを意味します。 圧縮ストリームは、バックエンド サーバーへのリクエスト全体が完了する前にクライアントに転送されます。
Nginx は、sendfile (Linux 2.2 以降)、accept-filter (FreeBSD 4.1 以降)、TCP_DEFER_ACCEPT (Linux 2.4 以降) のサポートなど、OS によって提供される最新機能の一部を採用しており、パフォーマンスが大幅に向上しています
2. Nginxインストールとデバッグ
1. Pcre のインストール

CODE:

./configure<br>  make && make install<br>  cd .././configure make && make install cd ../

2. nginx のコンパイルとインストール<br> CODE:./configure --user= www --group=www --prefix=/usr/local/nginx/ --with-http_stub_status_module --with-openssl=/usr/local/openssl make && make install
モジュールのカスタマイズとインストールの詳細については、公式 wiki を参照してください

3。 # /usr/local/nginx/sbin/nginx -t  //Debug 配置文件的关键命令需要重点撑握.<br>2008/12/16 09:08:35 [info] 28412#0: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok <br>2008/12/16 09:08:35 [info] 28412#0: the configuration file /usr/local/nginx/conf/nginx.conf was tested successfully3、Nginx 启动:

CODE:

# /usr/local/nginx/sbin/nginxCODE: # /usr/local/nginx/sbin/nginx -t //Debug 設定ファイルの主要なコマンドをマスターする必要があります。

2008/12/16 09:08:35 [info] 28412#0 : 設定ファイル /usr/local/nginx/conf/nginx.conf の構文は問題ありません

2008/12/16 09:08:35 [info] 28412#0: 設定ファイル /usr/local/nginx/conf/nginx .conf は正常にテストされました # kill -HUP `cat /usr/local/nginx/logs/nginx.pid`
三、Nginx Rewrite
1.  Nginx Rewrite 基本标记(flags)
last - 基本上都用这个Flag。
※相当于Apache里的[L]标记,表示完成rewrite,不再匹配后面的规则
break - 中止Rewirte,不再继续匹配
redirect - 返回临时重定向的HTTP状态302
permanent - 返回永久重定向的HTTP状态301
      ※原有的url支持正则  重写的url不支持正则
2.  正则表达式匹配,其中:
    * ~         为区分大小写匹配
    * ~*       为不区分大小写匹配
    * !~和!~*   分别为区分大小写不匹配及不区分大小写不匹配
3. 文件及目录匹配,其中:
   * -f和!-f用来判断是否存在文件
    * -d和!-d用来判断是否存在目录
    * -e和!-e用来判断是否存在文件或目录
    * -x和!-x用来判断文件是否可执行
3.  Nginx 的一些可用的全局变量,可用做条件判断:

CODE:

$args<br>$content_length<br>$content_type<br>$document_root<br>$document_uri<br>$host<br>$http_user_agent<br>$http_cookie<br>$limit_rate<br>$request_body_file<br>$request_method<br>$remote_addr<br>$remote_port<br>$remote_user<br>$request_filename<br>$request_uri<br>$query_string<br>$scheme<br>$server_protocol<br>$server_addr<br>$server_name<br>$server_port<br>$uri3. Nginx の起動:
CODE:# /usr/local/nginx/sbin/nginx

4. 設定ファイルの変更とリロード: server<br>{<br>listen 80;<br>server_name linuxtone.org netseek.linuxtone.org;<br>index index.html index.php;<br>root /data/www/wwwroot;<br>if ($host !~ "^www.linxtone.org$") {<br>rewrite ^(.*) http://www.linuxtone.org redirect;<br>}<br>........................<br>}CODE:

# kill -HUP `cat /usr/local/nginx/logs/nginx.pid

🎜`🎜🎜🎜3. Nginx Rewrite の基本マーク ( flags)🎜🎜🎜🎜last - このフラグは基本的に使用されます。 🎜🎜🎜🎜🎜※Apacheの[L]マークに相当し、書き換えが完了し以降のルールが一致しなくなることを示します🎜🎜🎜🎜🎜break - Rewirteを中止し一致しなくなりました🎜🎜🎜🎜🎜redirect - Return一時的にリセットする HTTP ステータス 302🎜🎜🎜🎜🎜永続 - リダイレクトされた HTTP ステータス 301 を返します🎜🎜🎜🎜 🎜🎜※元の URL は正規表現をサポートします 書き換えられた URL は正規表現をサポートしません🎜🎜🎜2. 正規表現のマッチング、その中には、🎜🎜🎜 *〜 's' s ‐ ‐ ‐ - は、ケースに敏感なファイルとディレクトリマッチングを一致させます。ファイルが存在するかどうかを判断するために使用されます 🎜🎜🎜 * -d および !-d は、ディレクトリが存在するかどうかを判断するために使用されます 🎜🎜🎜 * -e および !-e は、ファイルまたはディレクトリが存在するかどうかを判断するために使用されます 🎜🎜🎜 * - x と !-x は、ファイルが実行可能かどうかを判断するために使用されます 🎜🎜🎜3. Nginx の利用可能なグローバル変数の一部は、条件判定に使用できます: 🎜🎜CODE :🎜🎜$args🎜$content_length🎜$content_type🎜$ document_root🎜$document_uri🎜$host🎜$http_user_agent🎜$http_cookie🎜$limit_rate🎜$request_body_file🎜$request_method🎜$remote_addr🎜$remote_port🎜$remote_user🎜$request_filename🎜$request_uri🎜$query_string 🎜$スキーム🎜$server_protocol🎜$server_addr 🎜$server_name🎜$server_port🎜$uri🎜🎜4. Nginx Redirect🎜🎜🎜すべての linuxtone.org および netseek.linuxtone.org ドメイン名を 🎜http://www.linuxtone.org にリダイレクトします。 🎜コード:🎜🎜server🎜{🎜listen 80;🎜server_name linuxtone.org netseek.linuxtone.org;🎜indexindex.htmlindex.php;🎜root /data/www/wwwroot;🎜if ($host !~ "^ www.linxtone.org$") {🎜rewrite ^(.*) http://www.linuxtone.org$1 redirect;🎜}🎜.... .........🎜}🎜🎜5. Nginx ディレクトリにスラッシュ:🎜🎜CODE:🎜 が自動的に追加されます。if (-d $request_filename){<br>           rewrite ^/(.*)([^/])$ http://$host// permanent;<br>     }六  Nginx Location
1.基本语法:[和上面rewrite正则匹配语法基本一致]
location [=|~|~*|^~] /uri/ { … }
    * ~  为区分大小写匹配
    * ~* 为不区分大小写匹配
    * !~和!~*分别为区分大小写不匹配及不区分大小写不匹配
示例1:
location = / {
# matches the query / only.
# 只匹配 / 查询。
}
匹配任何查询,因为所有请求都已 / 开头。但是正则表达式规则和长的块规则将被优先和查询匹配
示例2:
location ^~ /images/ {
# matches any query beginning with /images/ and halts searching,
# so regular expressions will not be checked.
# 匹配任何已 /images/ 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。
示例3:
location ~* .(gif|jpg|jpeg)$ {
# matches any request ending in gif, jpg, or jpeg. However, all
# requests to the /images/ directory will be handled by 
}
# 匹配任何已 gif、jpg 或 jpeg 结尾的请求。
七、 Nginx expires
1.根据文件类型expires

CODE:

# Add expires header for static content<br>location ~* .(js|css|jpg|jpeg|gif|png|swf)$ {<br>    if (-f $request_filename) {<br>       root /data/www/wwwroot/bbs;<br>       expires      1d;<br>       break;<br>    }<br>}2、根据判断某个目录

CODE:

# serve static files<br>location ~ ^/(images|javascript|js|css|flash|media|static)/  {<br>root    /data/www/wwwroot/down;<br>        expires 30d;<br>  }8. Nginx のホットリンク防止
1. さまざまなファイルタイプの場合

コード:

#画像やその他のファイルのホットリンクの防止 TypeSlocation〜* ^。+ブロックされた Server_names *.linuxTone.org http://localhost Baidu.com; <br> <br> ($無効な_referr) {<br> #RETURN 403} <br>} .3 メソッドを期限切れにします<br><br> #画像やその他のファイルのホットリンクの防止 タイプ<br>location ~* ^.+.(gif|jpg|png|swf|flv|rar|zip)$ { valid_referers none ブロックされたserver_names *.linuxtone.org linuxtone.org http://localhost;if ($invalid_referer ) { access_log off; x アクセス制御

location /img/ {<br>    root /data/www/wwwroot/bbs/img/;<br>    valid_referers none blocked server_names *.linuxtone.org http://localhost baidu.com;<br>    if ($invalid_referer) {<br>                   rewrite  ^/  ;<br>                   #return   403;<br>    }<br>}1.#cd /usr/local/nginx/conf<br>#mkdir htpasswd<br>/usr/local/apache2/bin/htpasswd -c /usr/local/nginx/conf/htpasswd/tongji linuxtone <br>#添加用户名为linuxtone<br>New password:   (此处输入你的密码)<br>Re-type new password:   (再次输入你的密码)<br>Adding password for user<br>http://count.linuxtone.org/tongji/data/index.html(目录存在/data/www/wwwroot/tongji/data/目录下)<br>将下段配置放到虚拟主机目录,当访问http://count.linuxtone/tongji/即提示要密验证:<br>location ~ ^/(tongji)/  {<br>                root    /data/www/wwwroot/count;<br>                        auth_basic              "LT-COUNT-TongJi";<br>                        auth_basic_user_file  /usr/local/nginx/conf/htpasswd/tongji;<br>                }2.        Nginx 禁止访问某类型的文件.
如,Nginx下禁止访问*.txt文件,配置方法如下.

CODE:

location ~* .(txt|doc)$ {<br>   if (-f $request_filename) {<br>   root /data/www/wwwroot/linuxtone/test;<br>   #rewrite …..可以重定向到某个URL<br>   break;<br>   }<br>}方法2:

CODE:

location ~* .(txt|doc)${<br>        root /data/www/wwwroot/linuxtone/test;<br>        deny all;<br>}实例:
禁止访问某个目录

CODE:

location ~ ^/(WEB-INF)/ { <br>            deny all; <br>}  3.        使用ngx_http_access_module限制ip访问

CODE:

location / {<br>    deny    192.168.1.1;<br>    allow   192.168.1.0/24;<br>    allow   10.1.1.0/16;<br>    deny    all;<br>}详细参见wiki: http://wiki.codemongers.com/NginxHttpAccessModule#allow
4.        Nginx 下载限制并发和速率

CODE:

limit_zone   linuxtone  $binary_remote_addr  10m;<br>server<br>       {<br>               listen       80;<br>               server_name  down.linuxotne.org;<br>               index index.html index.htm index.php;<br>               root   /data/www/wwwroot/down;<br>               #Zone limit<br>               location / {<br>                   limit_conn   linuxtone  1;<br>                   limit_rate  20k;<br>               }<br>..........<br>       }客室側のスレッドは1つだけ許可されており、各スレッドは20kです。
【注意】limit_zone linuxtone $binary_remote_addr 10m; これは、メイン構成で定義できます。Nginx は、Apache と同じディレクトリ リストをファイルに追加し、独自のビジネスに応じて特定のサイズを調整します。
client_max_body_size 10m;

10.Nginxログ処理location  /  {<br>    autoindex  on;<br>}1.Nginxログ切断
#contab -e
59 23 * * * /usr/local/sbin/logcron.sh /dev/null 2>&1
[root@count ~]# cat /usr/local/sbin/logcron.shCODE:
#!/bin/bash<br>log_dir="/data/logs"<br>time=`date +%Y%m%d`  <br>/bin/mv  ${log_dir}/access_linuxtone.org.log ${log_dir}/access_count.linuxtone.org.$time.log<br>kill -USR1 `cat  /var/run/nginx.pid`更多的日志分析与处理就关注(同时欢迎你参加讨论):http://bbs.linuxtone.org/forum-8-1.html
2.利用AWSTATS分析NGINX日志
  设置好Nginx日志格式,仍后利用awstats进行分析.
请参考: http://bbs.linuxtone.org/thread-56-1-1.html
3.        Nginx 如何不记录部分日志
日志太多,每天好几个G,少记录一些,下面的配置写到server{}段中就可以了
location ~ .*.(js|jpg|JPG|jpeg|JPEG|css|bmp|gif|GIF)$
{
     access_log off;
}
十一、Nginx Cache服务配置
如果需要将文件缓存到本地,则需要增加如下几个子参数:

CODE:

proxy_store on;<br>proxy_store_access user:rw group:rw all:rw;<br>proxy_temp_path 缓存目录;其中,
proxy_store on用来启用缓存到本地的功能,
proxy_temp_path用来指定缓存在哪个目录下,如:proxy_temp_path html;
在经过上一步配置之后,虽然文件被缓存到了本地磁盘上,但每次请求仍会向远端拉取文件,为了避免去远端拉取文件,必须修改

CODE:

proxy_pass:<br>if ( !-e $request_filename) {<br>    proxy_pass  http://mysvr;<br>}即改成有条件地去执行proxy_pass,这个条件就是当请求的文件在本地的proxy_temp_path指定的目录下不存在时,再向后端拉取。
   
更多更高级的应用可以研究ncache,详细请参照http://bbs.linuxtone.org 里ncache相关的贴子.
十二、Nginx 负载均衡
1. Nginx 负载均衡基础知识
nginx的upstream目前支持4种方式的分配
1)、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2)、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
2)、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
3)、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。 
4)、url_hash(第三方)
2.        Nginx 负载均衡实例1

CODE:

upstream bbs.linuxtone.org {#定义负载均衡设备的Ip及设备状态<br>    server 127.0.0.1:9090 down;<br>    server 127.0.0.1:8080 weight=2;<br>    server 127.0.0.1:6060;<br>    server 127.0.0.1:7070 backup;<br>}負荷分散を使用する必要があるサーバーに
proxy_passを追加しますhttp://bbs.linuxtone.org/;
各デバイスのステータスは次のように設定されます:
a) Downはシングルを表しますフロントサーバー 当面はロードに参加しません
b) デフォルトの重みは 1 です。重みが大きいほど、ロードの重みが大きくなります。
c) max_fails: 許可されるリクエストの失敗数はデフォルトで 1 です。最大数を超えると、proxy_next_upstream モジュールによって定義されたエラーが返されます。
d) failed_timeout: max_fails の失敗後の一時停止時間。
e) バックアップ: 他のすべての非バックアップ マシンがダウンしているかビジー状態の場合、バックアップ マシンを要求します。したがって、このマシンの圧力は最も少なくなります。
nginx は、未使用のサーバーで使用するために、同時に複数の負荷分散グループを設定することをサポートしています。
client_body_in_file_only Onに設定すると、クライアントポストからのデータをデバッグ用にファイルに記録できます
client_body_temp_path 記録ファイルのディレクトリを設定して、URLに合わせて最大3レベルのディレクトリ
の場所を設定します。リダイレクトすることも、新しいプロキシ負荷分散を実行することもできます
3. Nginx 負荷分散インスタンス 2
は、アクセス URL のハッシュ結果に従ってリクエストを分散し、各 URL が同じバックエンド サーバーに送信されるようにします。バックエンドサーバーがキャッシュされている場合はより効果的であり、Squid キャッシュのヒット率を向上させるためにも使用できます
簡単な負荷分散の例:
#vi nginx.conf //nginx のメイン設定ファイルのコア設定

CODE :

……….<br>#loadblance my.linuxtone.org<br>       upstream  my.linuxtone.org  {<br>       ip_hash;<br>       server   127.0.0.1:8080;<br>       server   192.168.169.136:8080;<br>       server   219.101.75.138:8080;<br>       server   192.168.169.117;<br>       server   192.168.169.118;<br>       server   192.168.169.119;<br>     }<br>…………..<br>include          vhosts/linuxtone_lb.conf;<br>………<br># vi proxy.conf<br>proxy_redirect off;<br>proxy_set_header Host $host;<br>proxy_set_header X-Real-IP $remote_addr;<br>proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;<br>client_max_body_size 50m;<br>client_body_buffer_size 256k;<br>proxy_connect_timeout 30;<br>proxy_send_timeout 30;<br>proxy_read_timeout 60;<br>proxy_buffer_size 4k;<br>proxy_buffers 4 32k;<br>proxy_busy_buffers_size 64k;<br>proxy_temp_file_write_size 64k;<br>proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;<br>proxy_max_temp_file_size 128m;<br>proxy_store on;<br>proxy_store_access   user:rw  group:rw  all:r;<br>#nginx cache               <br>#client_body_temp_path  /data/nginx_cache/client_body 1 2;<br>proxy_temp_path /data/nginx_cache/proxy_temp 1 2;#vi  linuxtone_lb.conf

CODE:

server<br>    {<br>        listen  80;<br>        server_name my.linuxtone.org;<br>        index index.php;<br>        root /data/www/wwwroot/mylinuxtone;<br>        if (-f $request_filename) {<br>            break;<br>           }<br>        if (-f $request_filename/index.php) {<br>          rewrite (.*) /index.php break;<br>        }<br>        error_page 403 http://my.linuxtone.org/member.php?m=user&a=login;<br>        location / {<br>           if ( !-e $request_filename) {<br>               proxy_pass http://my.linuxtone.org;<br>               break;<br>           }<br>           include /usr/local/nginx/conf/proxy.conf;<br>        }<br>}
十三、Nginx简单优化

1.        减小nginx编译后的文件大小 (Reduce file size of nginx)
默认的nginx编译选项里居然是用debug模式(-g)的(debug模式会插入很多跟踪和ASSERT之类),编译以后一个nginx有好几兆。去掉nginx的debug模式编译,编译以后只有几百K
在 auto/cc/gcc,最后几行有:
# debug

CODE:

CFLAGS=”$CFLAGS -g”注释掉或删掉这几行,重新编译即可。
2.        修改Nginx的header伪装服务器
1)        修改nginx.h

CODE:

#vi nginx-0.7.30/src/core/nginx.h<br>#define NGINX_VERSION      "1.8"<br>#define NGINX_VER          "LTWS/" NGINX_VERSION<br>#define NGINX_VAR          "NGINX"<br>#define NGX_OLDPID_EXT     ".oldbin"2) nginx_http_header_filter_moduleを変更します
#vi nginx-0.7.30/src/http/ngx_http_header_filter_module.c
CODE:

static char[] = "サーバー: nginx" CRLF;

CODE:

static char ngx_http_server_string[] = "サーバー: LTWS" CRLF;

a) nginx_http_header_filter_module を変更します#vi nginx-0.7.30/src/http/ngx_http_special_response.c
は次のようになります:
CODE:

static u_char x_http _error_full_tail[] =

"static u_char ngx_http_error_full_tail[] =<br>"
" NGINX_VER "
" CRLF
" " CRLF
"" CRLF
;

CODE:

static u_char ngx_http_error_tail[] =<br>"static u_char ngx_http_error_tail[] =
"

nginx
" CRLF
"" CRLF"" CRLF;

は次のように変更されました:

🎜CODE:🎜static u_char ngx_http_error_full_tail[] =<br>"
「NGINX_VER」
「CRLF

http://www.linuxtone.org
" CRLF
"" CRLF
"" CRLF
;
static u_char ngx_http_error_tail[] =<br>"
LTWS
" CRLF
"" CRLF
"" CRLF
;変更後に環境を再コンパイルすると、
404 エラーが発生したときにレンダリングが表示されます (エラー ページが指定されていない場合):


404. png


curl コマンドを使用してサーバーヘッダーを表示します

curl.png


3. 特定の CPU の CPU タイプのコンパイル最適化を指定します。
nginx で使用されるデフォルトの GCC コンパイル パラメーターis -O
必須 さらに最適化するには、次の 2 つのパラメーター
--with-cc-opt='-O3'
--with-cpu-opt=opteron
を使用して、コンパイルは特定の CPU をターゲットにし、GCC の最適化を高めます。
この方法はパフォーマンスを向上させるだけで、大きなパフォーマンスの向上はありません。参考までに。
CPUD タイプの決定: # cat /proc/cpuinfo | grepモデル名"
コンパイル最適化パラメータ参考:http://en.gentoo-wiki.com/wiki/Safe_Cflags
4.Tcmalloc は Nginx のパフォーマンスを最適化しますCODE:

# wget http://download .savannah.gnu.org/releases/ libunwind/libunwind-0.99-alpha.tar.gz

# tar zxvf libunwind-0.99-alpha.tar.gz# wget http://download.savannah.gnu.org/releases/libunwind/libunwind-0.99-alpha.tar.gz<br># tar zxvf libunwind-0.99-alpha.tar.gz<br># cd libunwind-0.99-alpha/<br># CFLAGS=-fPIC ./configure<br># make CFLAGS=-fPIC<br># make CFLAGS=-fPIC install<br># wget http://google-perftools.googlecode.com/files/google-perftools-0.98.tar.gz<br># tar zxvf google-perftools-0.98.tar.gz<br># cd google-perftools-0.98/<br># ./configure<br># make && make install<br># echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf<br># ldconfig<br># lsof -n | grep tcmalloc# cd libunwind-0.99-alpha/# CFLAGS=-fPIC ./ configure# make CFLAGS=-fPIC
# make CFLAGS=-fPIC install# wget http://google-perftools.googlecode.com/files/google-perftools-0.98.tar.gz# tar zxvf google-perftools- 0.98.tar.gz
# cd google -perftools-0.98/# ./configure# make && make install
# echo "/usr/local/lib" > .conf# ldconfig# lsof - n | grep tcmalloc
nginx をコンパイルし、google_perftools_module:
./configure --with-google_perftools_module

nginx.conf をメイン設定ファイルに追加します。

🎜🎜google_perftools_profiles /path/to/profile;🎜 🎜🎜5. カーネルパラメータの最適化🎜🎜🎜# vi /etc/sysctl.conf #最後に次の内容を追加します: 🎜🎜CODE:🎜net.ipv4.tcp_fin_timeout = 30<br>net.ipv4.tcp_keepalive_time = 300<br>net.ipv4.tcp_syncookies = 1<br>net.ipv4.tcp_tw_reuse = 1<br>net.ipv4.tcp_tw_recycle = 1<br>net.ipv4.ip_local_port_range = 5000 65000#使配置立即生效
/sbin/sysctl -p
十四、如何构建高性的LEMP
请参见: http://www.linuxtone.org/lemp/lemp.pdf
1、提供完整的配置脚本下载:http://www.linuxtone.org/lemp/scripts.tar.gz
2、提供NGINX常见配置范例含(虚拟主机,防盗链,Rewrite,访问控制,负载均衡
Discuz相关程序静态化及等等),你只要稍稍修改即可线上应用。 3、将原版的xcache替换成EA,并提供相关简单调优脚本及配置文件。
更多的及更新资料请关注: http://www.linuxtone.org
十五、Nginx监控
1、        RRDTOOL+Perl脚本画图监控
先安装好rrdtool ,关于rrdtool本文不作介绍,具体安装请参照linuxtone监控版块.
#cd /usr/local/sbnin
#wget http://blog.kovyrin.net/files/mrtg/rrd_nginx.pl.txt
#mv rrd_nginx.pl.txt rrd_nginx.pl
#chmod a+x rrd_nginx.pl
#vi rrd_nginx.pl   //配置脚本文件设置好路径
#!/usr/bin/perl
use RRDs;
use LWP::UserAgent;
# define location of rrdtool databases
my $rrd = '/data/www/wwwroot/nginx/rrd';
# define location of images
my $img = '/data/www/wwwroot/nginx/html';
# define your nginx stats URL
my $URL = "http://219.232.244.13/nginx_status";
…………
【注】根据自己具体的状况修改相应的路径.
#crontab –e //加入如下
* * * * * /usr/local/sbin/rrd_nginx.pl
重启crond后,通过配置nginx虚拟主机指到/data/www/wwwroot/nginx/html目录,通过crond自动执行perl脚本会生成很多图片.
http://xxx/connections-day.png即可看到服务器状态图。
2、        官方Nginx-rrd 监控服务(多虚拟主机)(推荐)
网址:http://www.nginx.eu/nginx-rrd.html
此解决方案其实是基于上述监控方案的一个改进和增强,同样先安装好rrdtool这个画图工具和相应的perl模块再做如下操作:
# yum install perl-HTML*
先建立好生成的库存和图片存放录

CODE:

#mkdir -p /data/www/wwwroot/nginx/{rrd,html}<br>#cd /usr/local/sbin<br>#wget http://www.nginx.eu/nginx-rrd/nginx-rrd-0.1.4.tgz<br>#tar zxvf nginx-rrd-0.1.4.tgz<br>#cd nginx-rrd-0.1.4<br>#cd etc/<br>#cp nginx-rrd.conf /etc<br>#cd etc/cron.d<br>#cp nginx-rrd.cron /etc/cron.d<br>#cd /usr/local/src/nginx-rrd-0.1.4/html<br># cp index.php /data/www/wwwroot/nginx/html/<br>#cd /usr/local/src/nginx-rrd-0.1.4/usr/sbin<br>#cp * /usr/sbin/#vi /etc/nginx-rrd.conf

CODE:

#####################################################<br>#<br># dir where rrd databases are stored<br>RRD_DIR="/data/www/wwwroot/nginx/rrd";<br># dir where png images are presented<br>WWW_DIR="/data/www/wwwroot/nginx/html";<br># process nice level<br>NICE_LEVEL="-19";<br># bin dir<br>BIN_DIR="/usr/sbin";<br># servers to test<br># server_utl;server_name<br>SERVERS_URL="http://219.32.205.13/nginx_status;219.32.205.13  http://www.linuxtone.org/nginx_status;www.linuxtone.org""//根据你的具体情况做调整.
SEVERS_URL 格式 http://domain1/nginx_status;domain1 http://domain2/nginx_status;domain2
这种格式监控多虚拟主机连接状态:
重点启crond服务,仍后通过http://219.32.205.13/nginx/html/ 即可访问。配置过程很简单!
3、        CACTI模板监控Nginx
利用Nginx_status状态来画图实现CACTI监控
nginx编译时允许http_stub_status_module
# vi /usr/local/nginx/conf/nginx.conf

CODE:

location /nginx_status {<br>stub_status on;<br>access_log off;<br>allow 192.168.1.37;<br>deny all;<br>}

CODE:

# kill -HUP `cat /usr/local/nginx/logs/nginx.pid`<br># wget http://forums.cacti.net/download.php?id=12676<br># tar xvfz cacti-nginx.tar.gz<br># cp cacti-nginx/get_nginx_socket_status.pl /data/cacti/scripts/<br># cp cacti-nginx/get_nginx_clients_status.pl /data/cacti/scripts/<br># chmod 755 /data/cacti/scripts/get_nginx*検出プラグイン

コード:

# /data/cacti/scripts/get_nginx_clients_status.pl http://192.168.1.37/nginx_status cacti 管理パネルにインポート
cacti_graph_template_nginx_clients_stat.xml
cacti_graph_template_nginx_sockets_stat.xml
16.よくある質問とエラー処理
1. 400 件の不正なリクエストの理由エラーと解決策
次のようにnginx.conf関連の設定を構成します。
client_header_buffer_size 16k;
large_client_header_buffers 4 64k;
特定の状況に応じて調整します。通常は値を適切に調整するだけです。
2、Nginx 502 Bad Gateway error
proxy_next_upstream error timeout valid_header http_500 http_503;
または設定をお試しください:
large_client_header_buffers 4 32k;
3。 Nginx での 413 リクエスト エンティティが大きすぎるエラー
このエラーは通常、ファイルをアップロードするときに発生します。
Nginx のメイン設定ファイル Nginx.conf を編集し、http{} セクションを見つけて
client_max_body_size 10m // 必要に応じてサイズを調整します。 php を実行している場合、送信されたデータのサイズの不一致によるエラーが発生しないように、サイズ client_max_body_size は php.ini の以下の値の最大値と一致するか、それよりわずかに大きい必要があります。
post_max_size = 10M
upload_max_filesize = 2M
4. 504 ゲートウェイ タイムアウトを解決する (nginx)
discuz フォーラムをアップグレードするときにこの問題が発生しました
一般的に、この状況は次のようになります。によって引き起こされるnginx のデフォルトの fastcgi プロセスの応答バッファーが小さすぎるため、fastcgi プロセスが一時停止されます。この一時停止を fastcgi サービスが適切に処理できない場合、504 ゲートウェイ タイムアウトが発生する可能性が非常に高くなります
今日の Web サイトでは、特に一部のフォーラムでは、多数の返信と大量のコンテンツがあり、1 ページが数百 KB になることもあります。
デフォルトのfastcgiプロセスの応答バッファは8Kですが、より大きく設定できます
nginx.confに、fastcgi_buffers 8 128kを追加します
これは、fastcgiバッファを8×128kに設定することを意味します
もちろん、即時操作を実行している場合は、nginx のタイムアウト パラメーターを増やす必要がある場合があります。たとえば、60 秒に設定します: send_timeout 60;
これら 2 つのパラメーターを調整したところ、タイムアウトが表示されなくなりました。効果は良いと言われていますが、現時点では nginx に関する情報があまりないので、成果を得るのを楽しみにしています。 !
5. Nginx プロキシの使用方法
友人のサーバーはポート 8080、IP: 192.168.1.2:8080 で Tomcat を実行しており、他のマシンの IP: 192.168.1.8 で Tomcat サービスにアクセスしたいと考えています。 http://192.168.1.8にアクセスします。設定は次のとおりです:
192.168.1.8のnginx.confを次のように設定します:CODE:
server {listen 80;

server_name java.linuxtone. org

location / {server {<br>listen 80;<br>server_name java.linuxtone.org<br>location / {<br>proxy_pass http://192.168.1.2:8080;<br>include /usr/local/nginx/conf/proxy.conf;<br>}<br>}proxy_pass http://192.168.1.2:8080 ;include /usr/local/nginx/conf/proxy.conf;}
}6. NginxのLOGを閉じる方法
access_log / dev/null; error_log /dev/null;
Seventeen、関連リソースのダウンロード
1.nginx 設定例とスクリプトのダウンロード:
# wget http://www.linuxtone.org/lemp/scripts。 tar.gz #このスクリプト例は定期的に更新されます。
【添付ファイル】:
このドキュメントは定期的に更新され、友人は nginx ヒントの内容を充実させるために貴重なコメントを提供することを歓迎します

最新のドキュメント。がリリースされていますので、ご注意ください:

http://bbs.linuxtone.org 🎜 上記では、さまざまな側面を含む Nginx Common Application Technology Guide [Nginx Tips] の第 2 版を紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。 🎜 🎜 🎜
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。