使用一个配置为子目录下的两个站点及其各自的静态资产提供服务

时间:2019-08-12 11:59:30

标签: nginx nginx-config

说我有一个域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位置。

0 个答案:

没有答案