我们有一个用Apache运行的网站。 最近该网站已经看到增加的负载,并作为一个停止的差距,我们要把网站上的所有静态内容转移到无cookie的域名,例如http://static.thedomain.com 。
该应用程序不是很好理解。 所以为了让开发者有时间去修改代码,把它们的链接指向静态内容服务器( http://static.thedomain.com ),我想通过nginx代理这个站点,并且重写这个即将到来的响应,以便到/images/...被重写为http://static.thedomain.com/images/...
例如,在Apache对nginx的响应中,有一些Headers + 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响应中search和replace文本”。
从文档复制过去:
句法:
sub_filter string replacement
例:
location / { sub_filter </head> '</head><script language="javascript" src="$script"></script>'; sub_filter_once on; }
最好使用代理function并从适当位置获取内容,而不是重写URL并将redirect发送回浏览器。
代理内容的一个很好的例子是:
# # 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/da.proxied.log; # # Serve directly: /images/ + /css/ + /js/ # location ^~ /(images|css|js) { root /home/www/www.debian-administration.org/htdocs/; access_log /var/log/nginx/da.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/da.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; } }
在这个configuration中,不是将请求redirect到static.domain.com ,而是期望浏览器发出另一个请求,而nginx只是从相关的本地path提供文件。 如果请求是dynamic的,那么代理会在没有terminal用户知道的情况下,从Apache服务器(本地或远程)中获取响应。
我希望有帮助