Apacheで実行しているサイトを持つ顧客がいます。最近、サイトの負荷が高まっているため、サイトのすべての静的コンテンツをCookieのないドメイン(例: http://static.thedomain.com
。
アプリケーションはよく理解されていません。静的コンテンツサーバー(http://static.thedomain.com
)へのリンクを指すようにコードを修正する時間を開発者に与えるために、nginxを介してサイトをプロキシし、/images/...
へのリンクが書き換えられるように送信応答を書き直すことを考えましたhttp://static.thedomain.com/images/...
として。
たとえば、Apacheからnginxへの応答には、ヘッダー+ HTMLのblobがあります。 Apacheから返されたHTMLには、次のような<img>
タグがあります。
<img src="/images/someimage.png" />
これを次のように変換したい:
<img src="http://static.thedomain.com/images/someimage.png" />
そのため、ブラウザはHTMLページを受信すると、静的コンテンツサーバーに直接画像をリクエストします。
これはnginx(またはHAProxy)で可能ですか?
私はドキュメントをざっと一目見ましたが、インバウンドURLを書き換える以外に何も飛び出していません。
http://wiki.nginx.org/HttpSubModule -「このモジュールは、nginx応答のテキストを検索および置換できます。」
ドキュメントから過去をコピー:
構文:
sub_filter string replacement
例:
location / {
sub_filter </head>
'</head><script language="javascript" src="$script"></script>';
sub_filter_once on;
}
URLを書き換えてリダイレクトをブラウザーに送信するのではなく、プロキシー機能を使用して適切な場所からコンテンツをフェッチするのが最善です。
プロキシコンテンツ の良い例は次のようになります。
#
# This configuration file handles our main site - it attempts to
# serve content directly when it is static, and otherwise pass to
# an instance of Apache running upon 127.0.0.1:8080.
#
server {
listen :80;
server_name www.debian-administration.org debian-administration.org;
access_log /var/log/nginx/d-a.proxied.log;
#
# Serve directly: /images/ + /css/ + /js/
#
location ^~ /(images|css|js) {
root /home/www/www.debian-administration.org/htdocs/;
access_log /var/log/nginx/d-a.direct.log ;
}
#
# Serve directly: *.js, *.css, *.rdf,, *.xml, *.ico, & etc
#
location ~* \.(js|css|rdf|xml|ico|txt|gif|jpg|png|jpeg)$ {
root /home/www/www.debian-administration.org/htdocs/;
access_log /var/log/nginx/d-a.direct.log ;
}
#
# Proxy all remaining content to Apache
#
location / {
proxy_pass http://127.0.0.1:8080/;
proxy_redirect off;
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;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}
この構成では、リクエストをstatic.domain.com
にリダイレクトしてブラウザが別のリクエストを行うことを期待する代わりに、nginxは関連するローカルパスからファイルを提供するだけです。リクエストが動的である場合、プロキシは起動し、エンドユーザーが知らないうちにApacheサーバー(ローカルまたはリモート)から応答をフェッチします。
それが役に立てば幸い