5

いくつかのIISサーバーのリバースプロキシとしてNginXを使用しようとしています。目標は、CSS /JS/イメージなどの静的アイテムをキャッシュするIIS/ApacheサーバーからNginXを配置することです。また、Perlモジュールを使用してjs/cssファイルを自動的に縮小するようにNginXを取得しようとしています。

ここで縮小化のサンプルスクリプトを見つけました:

http://petermolnar.eu/linux-tech-coding/nginx-perl-minify-css-js/

スクリップを使用すると、リバースプロキシが機能しなくなることを除いて、すべてが正常に機能します。

質問:

  1. 私が達成しようとしていることは可能ですか?NginXでスクリプトをキャッシュに保存する前に、最初に縮小してほしい。
  2. nginXは、静的アイテムが可能な限りキャッシュされ、クエリ文字列が変更された場合にのみ置き換えられるように、適切な期限切れヘッダーを自動的に設定できます(jquery.js?timestamp = march-2012)
  3. リソースを送信する前にNginXGZIPできますか。
  4. バックエンドサーバーに接続できない場合、NGinxはリクエストを転送したり、「DownForMaintenanceページ」を提供したりできます。

どんな助けでも大歓迎です。

これが私のサイトにあるものです-これまでのところ有効/デフォルトです。

    server {


    location / {

        proxy_pass             http://mywebsite.com;
        proxy_set_header       Host $host;
        proxy_cache            STATIC;
        proxy_cache_valid      200  1d;
        proxy_cache_use_stale  error timeout invalid_header updating
                              http_500 http_502 http_503 http_504;
    }


    location @minify {
                    perl Minify::minify_handler;
            }

            location ~ \.css$ {
                    try_files $uri.min.css @minify;
            }




            location /*.js {
                 expires 30d;
            }



}
4

1 に答える 1

6

Nginxはリバースプロキシの理想的なソリューションであり、Unixの「1つのことを実行してうまく実行する」方法でもあります。したがって、サードパーティのプラグインを使用して一度に多くのことを行うのではなく、コンテンツの提供と縮小のプロセスを分割することをお勧めします。

ベストプラクティスは、本番環境にデプロイする前に、ローカルシステムで縮小化と難読化のフェーズを実行することです。これは簡単に言うことができ、難しいことではありません。静的アセットを圧縮するGoogleの方法をご覧ください。アセットをすぐに使用できるようになったら、nginx構成をセットアップできます。

回答:

  1. 本番環境にデプロイする前にminify&obfuscateを使用してください

  2. regexp(ディレクトリ名またはファイル拡張子)でアセットを検索できます

    場所〜^ /(assets | images | javascripts | stylesheets | swfs | system)/ {gzip_static on; 最大有効期限が切れます。add_header Cache-Control public; add_header Last-Modified ""; add_header ETag ""; 壊す; }

  3. リクエストが来るたびにファイルを圧縮するのではなく、gziponとgzip_staticonを使用してgzip圧縮されたファイルを提供します。

  4. try_filesを使用して、メンテナンスページが存在するかどうかを検出します

    try_files $ uri /system/maintenance.html @mywebsite;

    if(-f $ document_root / system / maintenance.html){return 503; }

ケースの完全なnginx構成を参照してください。

http {
  keepalive_timeout         70;

  gzip                      on;
  gzip_http_version         1.1;
  gzip_disable              "msie6";
  gzip_vary                 on;
  gzip_min_length           1100;
  gzip_buffers              64 8k;
  gzip_comp_level           3;
  gzip_proxied              any;
  gzip_types                text/plain text/css application/x-javascript text/xml application/xml;

  upstream mywebsite {
    server                  192.168.0.1 # change it with your setting
  }

  server {
    try_files               $uri /system/maintenance.html @mywebsite;

    location @mywebsite {
      proxy_set_header      X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header      X-Forwarded-Proto $scheme;
      proxy_set_header      Host $http_host;
      proxy_redirect        off;
      proxy_pass            http://mywebsite;
    }

    location ~ ^/(assets|images|javascripts|stylesheets|swfs|system)/ {
      gzip_static       on;
      expires           max;
      add_header        Cache-Control public;
      add_header        Last-Modified "";
      add_header        ETag "";
      break;
    }

    if (-f $document_root/system/maintenance.html) {
      return            503;
    }

    location @503 {
      error_page 405 = /system/maintenance.html;
      if (-f $document_root/system/maintenance.html) {
        rewrite         ^(.*)$ /system/maintenance.html break;
      }
      rewrite           ^(.*)$ /503.html break;
    }

  }

}
于 2012-07-14T11:52:42.673 に答える