带有嵌套符号链接的 Nginx 根目录

Nginx root directory with nested symlinks

我们的网站(laravel)项目目录是这样的:

/home/user/project/{app,route,public_html,storage,...} 

新版本放置在:

/home/user/releases/v1

出于某种原因,我们必须为每个版本 link public_html 目录,因此:

/home/user/releases/v1/public_html > /home/user/project/public_html

Nginx 根目录是:

/home/user/www/site/public_html  

其中:

/home/user/www/site > /home/user/releases/v1

由于 NGINX 将遵循 symlinks,最终的根目录将是:

/home/user/project/public_html

有办法解决这种情况吗?

因为你的虚拟主机的 root/home/user/www/site/public_html 并且因为 /home/user/www/site/public_html/home/user/project/public_html 的符号链接并且因为 /home/user/project/public_html 是你的符号链接最新版本 - nginX location 块实际上会在 /home/user/releases/v1/public_html.

内搜索

这是一个例子。假设我们有一个文件夹 /my_releases。每次我 publish/deploy 一个新版本时,我都会在 /my_releases 中创建一个新的子文件夹,其中包含该版本的版本(/my_releases/v1,然后是 /my_releases/v2 等等)。该版本的所有资产都将位于相应的子文件夹中 - 所以我将拥有

/my_releases
  |
  +---- /v1
  |      |
  |      +--- /css
  |      |      |
  |      |      +--- /home.a120cd8.css
  |      |
  |      +--- /img
  |      |      |
  |      |      +--- /logo.7f40c3a.svg
  |      |
  |      +--- /js
  |      |     |
  |      |     +--- /main.ba4de98.js
  |      |
  |      +--- /api
  |      |      |
  |      |      +--- /index.php
  |      |      |
  |      |      +--- /routes
  |      |              |
  |      |              +--- /login.php
  |      +--- /index.html
  |
  +---- /v2
  |      |
  |      +--- /css
  |      |      |
  |      |      +--- /home.7845c7.css
  |      |
  |      +--- /img
  |      |      |
  |      |      +--- /logo.23038ad.svg
  |      |
  |      +--- /js
  |      |     |
  |      |     +--- /main.acb33f1.js
  |      |
  |      +--- /api
  |      |      |
  |      |      +--- /index.php
  |      |      |
  |      |      +--- /routes
  |      |              |
  |      |              +--- /login.php
  |      +--- /index.html

........ next releases until the end of the world

我的 nginX 是这样配置的,我的虚拟主机有

server {
  server_name my.personal.web.site;
  root /var/www/public_html;
  .....
}

在启动 nginX 之前,我有 运行 以下 2 个命令:

ln -s -f -n /my_releases/current /my_releases/v1
ln -s -f -n /var/www/public_html /my_releases/current

然后我启动了 nginX - service nginx start。它现在将服务于我的网站 site/application.v1

现在,每当我部署新版本时,我都会运行以下命令(将v2替换为相关修订版)

ln -s -f -n /my_releases/current /my_releases/v2

不要忘记设置正确的文件系统权限和所有权。