質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.33%

  • WordPress

    7673questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

  • nginx

    904questions

    nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

  • キャッシュ

    57questions

    キャッシュはドキュメントやデータを一時的に保管するもので、アクセス処理時間を短くするために使用されます。

60万req/時のアクセスを捌くために外部サーバーのコンテンツもキャッシュをしたい。

受付中

回答 2

投稿

  • 評価
  • クリップ 3
  • VIEW 1,204

rera

score 86

Wordpress + Nginx + php-fpm の環境でNginxのリバースプロキシ+ブラウザーキャッシュを使用しています。

60万req/時を捌きたいのですが外部リンクからのjavascript、画像だったりをキャッシュしたいのですが
こういうのは可能なのでしょうか。

JMeterでテストを行うと自サーバーのコンテンツはエラーが無く順調なのですが、外部から引っ張ってきてるものがエラーを出してしまっている状況です。

参考になるか分かりませんが下記がNginxのコンフィグになります。
何かご教授いただければよろしくお願いします。

nginx.conf

user  nginx;
worker_processes  auto;

worker_rlimit_nofile  150000;

events {
    worker_connections  65535;
    use epoll;
    multi_accept on;
}


http {
    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        on;
    tcp_nopush      on;

    server_names_hash_bucket_size 64;

    keepalive_timeout  0;

    gzip  on;
    gzip_disable "MSIE [1-6]\.";
    gzip_proxied any;
    gzip_min_length 1024;
    gzip_comp_level 6;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;

    proxy_max_temp_file_size    2048M;
    proxy_buffers               100 8k;
    proxy_buffer_size           8k;
    proxy_cache_path  /var/cache/nginx levels=1:2 keys_zone=czone:15m max_size=60g inactive=7d;
    proxy_temp_path   /var/tmp/nginx;
    proxy_cache_key $scheme://$host$request_uri;

    proxy_set_header  Host               $host;
    proxy_set_header  X-Real-IP          $remote_addr;
    proxy_set_header  X-Forwarded-Proto  https;
    proxy_set_header  X-Forwarded-Host   $host;
    proxy_set_header  X-Forwarded-Server $host;
    proxy_set_header  X-Forwarded-For    $proxy_add_x_forwarded_for;

    set_real_ip_from    127.0.0.1;
    real_ip_header      X-Forwarded-For;

    upstream xxx {
        ip_hash;
        server 127.0.0.1:8081;
    }

    include     /etc/nginx/conf.d/*;
}
conf.d/default.conf

server {
    listen       80;
    server_name  111;

    charset utf-8;
    access_log  /var/log/nginx/access_log main;
    error_log   /var/log/nginx/error_log;

    root        /var/www/chroot-website;

    client_max_body_size        1G;

    add_header  X-Cache $upstream_cache_status;

    location /nginx_status {
        stub_status on;
        access_log  off;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt { access_log off; log_not_found off; }

    location ~ \.ico$ {
        log_not_found off;
        access_log off;
        expires max;
    }

    location ~ \.(css|js)$ {
        proxy_pass http://xxx;
        charset  UTF-8;
        access_log off;
    }

    location ~* \.(jpe?g|gif|png|ico|woff|svg|swf|inc)$ {
        proxy_pass http://xxx;
        access_log  off;
    }

    location /wp-content/uploads {
        proxy_pass http://xxx;
        access_log  off;
    }

    location ~ /\. {
        deny          all;
        access_log    off;
        log_not_found off;
    }

    location = /wp-config.php {
        deny        all;
        access_log  off;
    }

    location ~ .*\.php {
        proxy_pass http://xxx;
    }

    location / {
        set $do_not_cache 0;
        if ($http_cookie ~* "comment_author_|wordpress_(?!test_cookie)|wp-postpass_|wordpress_logged_in" ) {
            set $do_not_cache 1;
        }
        if ($request_method != GET) {
            set $do_not_cache 1;
        }

        # mobile setting
        include /etc/nginx/mobile_cache_setting;

        proxy_cache_valid       200 302 180m;
        proxy_cache_valid       404 7d;
        proxy_no_cache          $do_not_cache;
        proxy_cache_bypass      $do_not_cache;
        proxy_cache             czone;

        proxy_cache_key         $scheme://$host$uri$is_args$args;
        proxy_pass              http://xxx;
    }
}

server {
    listen      8081;
    server_name 111;

    root        /var/www/chroot-website;
    index       index.php;

    access_log  /var/log/nginx/access8081.log;
    error_log   /var/log/nginx/error8081.log;

    location / {
        try_files $uri $uri/ /index.php?q=$uri&$args;

        location ~ /wp-content  {
            access_log  off;
            include     /etc/nginx/php_exec;
        }
        location ~ /wp-includes {
            access_log  off;
            include     /etc/nginx/php_exec;
        }
        location ~ /wp-cron.php {
            access_log  off;
            include     /etc/nginx/php_exec;
        }
        location ~ /wp-comments {
            access_log  off;
            include     /etc/nginx/php_exec;
        }
        location ~ /wp-admin {
            access_log  off;
            include    /etc/nginx/php_exec;
        }
        location ~ /wp-login.php {
            access_log  off;
            include     /etc/nginx/php_exec;
        }
        include /etc/nginx/php_exec;
    }
}
nginx/php_exec

location ~\.php$ {
    expires          off;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass     unix:/var/run/php-fpm/php-fpm.sock;
    fastcgi_index    index.php;
    fastcgi_param    SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include          fastcgi_params;
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    退会済みユーザー

    2016/03/23 09:05

    外部リンクからのjavascript 画像 の情報はHTMLに記載されるはずですが、そのソースが見つかりません。情報不足では、間違えた、勘違いの回答しかできません。

    キャンセル

  • rera

    2016/03/23 09:15

    具体的な外部サーバーのJavascriptのリンクを追加しました。

    キャンセル

回答 2

+1

なにか勘違いをしていたらごめんなさい。外部サーバのコンテンツはそもそも rera さんが管理しているサーバにリクエストが飛んでこないわけですからキャッシュできないですよね。それとも外部サーバのコンテンツもダウンロードしてすべて自サーバに持つようにする、ということでしょうか。外部サーバのコンテンツは外部サーバに任せた方が、ブラウザからのリクエストが分散して輻輳を防ぐことができると思うのですが。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/03/23 09:20

    unau 様

    回答ありがとうございます。

    >>rera さんが管理しているサーバにリクエストが飛んでこない
    そうですよね...。
    外部サーバーのJavascriptなどが60万req/時に耐えられないのでいくつかパケットが破棄(?)されちゃっているのですがこれはどうしようもないことでしょうか...。

    キャンセル

  • 2016/03/23 09:49

    自サーバ、というより、リバースプロキシや負荷分散や回線帯域などトータルの自サーバ構成が、外部サーバのコンテンツも丸抱えしてなおかつ想定するサービスレベルを維持できるのであれば、自サーバに持ってきちゃったほうがいいんでしょうね。

    キャンセル

0

サーバに保存してある 画像は、複数同時に出力するときにディスクアクセスが発生します。
”ディスクアクセス”は、昔から早くなっておらず、画像は”AWSクラウド”に移動するか

画像をメモリに常駐させる方法があります。
nginx + memcached
http://webserv.hatenablog.com/entry/2015/04/14/001805

自分サーバでなく、他の http://他社サイト/画像 であれば、自分のサーバに保管することが
キャッシュになります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • WordPress

    7673questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

  • nginx

    904questions

    nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

  • キャッシュ

    57questions

    キャッシュはドキュメントやデータを一時的に保管するもので、アクセス処理時間を短くするために使用されます。