Apache에서 사이트를 운영하는 고객이 있습니다. 최근에 사이트가 부하 증가를보고되었으며 정지 차이로 우리는 예를 들면, 쿠키 도메인에있는 모든 사이트의 정적 컨텐츠를 이동하려는 http://static.thedomain.com
.
응용 프로그램이 잘 이해되지 않았습니다. 따라서 개발자가 정적 컨텐츠 서버에 대한 링크를 가리 키도록 코드를 수정할 시간을주기 위해 ( http://static.thedomain.com
) nginx를 통해 사이트를 프록 싱하고 나가는 응답을 다시 작성하도록 링크를 다시 작성하는 방법에 대해 생각 /images/...
했습니다 http://static.thedomain.com/images/...
.
예를 들어, Apache에서 nginx에 대한 응답에는 헤더 + HTML이 있습니다. 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 서버 (로컬 또는 원격)에서 응답을 가져옵니다.
도움이 되길 바랍니다