说我有一个域www.foobar.com
,我在该域下提供一个node.js应用程序。 Nginx还为该节点应用程序提供静态资产。对于缓存清除,我使用了重写,以使style.{md5}.css
变成style.css
。这可以通过以下配置实现,并且效果很好:
server {
listen [::]:80;
listen 80;
server_name www.foobar.com;
root /var/www/foobar/current/public;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Host $http_host;
proxy_redirect off;
location / {
proxy_pass http://app;
}
location ~* (.+)\.[0-9a-z]+\.(js|css)$ {
try_files $uri $1.$2;
}
location ~^/assets/ {
try_files $uri =404;
}
}
我遇到的问题是在该配置中添加了一个额外的/blog
位置,该位置实际上是Jekyll站点。我的/blog
位置也遵循相同的缓存清除模式,这意味着该URL www.foobar.com/blog/assets/styles/style.{md5}.css
必须重写为www.foobar.com/blog/assets/styles/style.css
。无论我做什么,通常都只是破坏节点应用程序的静态资产,并且所有在/blog
位置下对资产的请求都以404结尾。
我的主要Node.js网站位于/var/www/foobar/current/
下,其静态资产位于/var/www/foobar/current/public/assets/
下。
我的博客位于/var/www/blog/current/_site/
下,其静态资产位于/var/www/blog/current/_site/assets/
下。
这里是我用来解决此问题的(损坏!)配置:
server {
listen [::]:80;
listen 80;
server_name www.pixaven.com 10.2.4.5;
root /var/www/foobar/current/public;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Host $http_host;
proxy_redirect off;
location /blog {
alias /var/www/blog/current/_site;
try_files $uri $uri/index.html $uri.html =404;
}
location / {
proxy_pass http://app;
}
location ~* (.+)\.[0-9a-z]+\.(js|css)$ {
add_header Cache-Control "public";
try_files $uri $1.$2;
}
location ~^/assets/ {
try_files $uri =404;
}
location ~^/blog/assets/ {
root /var/www/blog/current/_site;
try_files $uri =404;
}
}
最简单的“解决方案”是简单地使用一个子域blog.foobar.com
并将其命名为“ day”,但是我想坚持使用其他/blog
位置。