nginx 为 proxypass 设置不同的文档根目录

nginx 为 proxypass 设置不同的文档根目录

我只是想运行我在 proxypass 域上制作的 nodejs 应用程序,并让它像在我的桌面上一样工作。但是,出于某种原因,即使我为此 proxypass 路径定义了一个单独的文档根目录,它也不会从中加载文件。我对我的 404 页面做了完全相同的事情,并且成功了。以下是有问题的页面:https://jakesandbox.com/iwl它确实加载了 server.js 文件,进而加载了 index.html 文件,但索引引用的所有脚本和样式都无法加载。这是我的 nginx 配置(带审查):

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        listen 443 ssl default_server;
        listen [::]:443 ssl default_server;
        root /home/ubuntu/FAKE WEB ROOT DIR;
        index index.html index.htm index.php index.nginx-debian.html;
        server_name XXxXX.com;
        error_page 404 /404.html;
        location = /404.html {
                root /home/ubuntu/FAKE ERROR DIR/;
                internal;
        }
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php7.2-fpm.sock;
        }
        location ~ /\.ht {
                deny all;
        }
        ssl_certificate /etc/letsencrypt/live/XXxXX.com.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/XXxXX.com.com/privkey.pem;
        location /iwl {
                root /home/ubuntu/FAKE NODEJS DIR/;
                proxy_pass http://localhost:PORT/;
                proxy_ssl_trusted_certificate /etc/letsencrypt/live/XXxXX.com.com/fullchain.pem;
                proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        }
}

PS 我不愿意将我的 nodejs 应用程序重新定位到我的 webroot/更改路径

答案1

如果你打开浏览器的 devtools 上的“网络”选项卡,你会看到该网站正在尝试加载 URL 根目录中的资产。例如:

https://jakesandbox.com/style.css 404

由于您不想更改 Node.JS 路径,您可以使用添加到server块中的 nginx 位置通配符来解决这个问题:

location ~* \.(js|css)$ {
        root /path/to/your/node/root;   
        expires 30d;
    }

您可能需要编辑此文件以包含其他扩展。我已包括js以上内容css

/path/to/your/node/root应该包含该级别的 css 和 js 文件。

编辑

我没时间测试这个了,但location我发布的块确实可以捕获域根目录中的 JS、CSS 文件。您可以测试并更新评论吗?此规则可能效果更好:

location ~* ^/iwl/.+\.(js|css|jpg)$ {
    root /path/to/your/node/root;
} 

但是我自己也遇到了麻烦,因为当应用时似乎意味着/path/to/your/node/root/iwl/style.css您必须将节点根目录中的所有内容移动到名为的子目录中iwl。如果您有能力进行此更改,那么它可能会有益。您甚至可以调用目录,static这是其他前端站点使用的常用方法。

相关内容