60万req/時のアクセスを捌くために外部サーバーのコンテンツもキャッシュをしたい。
受付中
回答 2
投稿
- 評価
- クリップ 3
- VIEW 2,218
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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
+1
なにか勘違いをしていたらごめんなさい。外部サーバのコンテンツはそもそも rera さんが管理しているサーバにリクエストが飛んでこないわけですからキャッシュできないですよね。それとも外部サーバのコンテンツもダウンロードしてすべて自サーバに持つようにする、ということでしょうか。外部サーバのコンテンツは外部サーバに任せた方が、ブラウザからのリクエストが分散して輻輳を防ぐことができると思うのですが。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
サーバに保存してある 画像は、複数同時に出力するときにディスクアクセスが発生します。
”ディスクアクセス”は、昔から早くなっておらず、画像は”AWSクラウド”に移動するか
画像をメモリに常駐させる方法があります。
nginx + memcached
http://webserv.hatenablog.com/entry/2015/04/14/001805
自分サーバでなく、他の http://他社サイト/画像 であれば、自分のサーバに保管することが
キャッシュになります。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 89.99%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
退会済みユーザー
2016/03/23 09:05
外部リンクからのjavascript 画像 の情報はHTMLに記載されるはずですが、そのソースが見つかりません。情報不足では、間違えた、勘違いの回答しかできません。
rera
2016/03/23 09:15
具体的な外部サーバーのJavascriptのリンクを追加しました。