Nginx - 如何通过私有网络提供 404 和静态文件服务?

Nginx - 如何通过私有网络提供 404 和静态文件服务?

我严格按照本教程成功设置了我的 Node.Js 应用程序:https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-ubuntu-14-04

我的 Node 应用程序位于单独的 droplet 上,Nginx 也是如此。我将我的所有 www 和 http 流量重定向到https://domain.com. 这一切都有效。

现在我还想提供自定义错误文件。但它们位于另一个 droplet 上的节点应用程序中,位于公共文件夹 /var/www/app/public 中。我有没有办法从 Nginx 提供我的 404 文件,但将其保留在 Node.JS droplet 上?

对于我的静态文件(图像/字体)也有同样的问题,有没有办法可以从 Nginx 提供我的静态文件,但将它们保留在我的 Node.js droplet 上(而不是将它们复制到 Nginx droplet?)

谢谢

server {
    listen 80;
    server_name www.domain.com;
    return 301 https://domain.com$request_uri;
}

server {
    listen 443 ssl;
    server_name www.domain.com;

    return 301 https://domain.com$request_uri;

    ssl_certificate /etc/nginx/ssl/www.domain.com.chained.crt;
    ssl_certificate_key /etc/nginx/ssl/www.domain.com.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers AES256+EECDH:AES256+EDH:!aNULL;
    ssl_prefer_server_ciphers on;
}

server {
    listen 443 ssl;
    server_name domain.com;

    ssl_certificate /etc/nginx/ssl/www.domain.com.chained.crt;
    ssl_certificate_key /etc/nginx/ssl/www.domain.com.key;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers AES256+EECDH:AES256+EDH:!aNULL;
    ssl_prefer_server_ciphers on;

    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    location / {
      proxy_pass http://ip_of_node_droplet:4000;
      proxy_redirect off;
      proxy_http_version 1.1;
    }
}

答案1

我想到两个想法:

  • 您可以设置类似的服务NFS在托管文件的 droplet 上(服务器 1) 中的内容。之后,导出包含文件的目录 (通过 NFS) 并将其挂载到托管nginx(服务器2)。

  • nginx也可以在您的服务器 1,。

为了实现这一点,你必须修改你的nginx配置服务器2. 包括静态文件和错误页面的位置指令;可能类似于以下内容:

location /static {
  root /srv/nfs-imported;
}

error_page 404 /custom_404.html;
location = /custom_404.html {
  root /srv/nfs-imported;
  internal;
}

error_page 500 502 503 504 /custom_50x.html;
location = /custom_50x.html {
  root /srv/nfs-imported;
  internal;
}

这只是一个例子,并假设您采用我的第一个想法。如果您对第二个提议更感兴趣,那么您不会使用root指令,而是使用proxy_pass,就像您已经对所有应该发送到 的请求使用 一样node app

相关内容