我只是想运行我在 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
这是其他前端站点使用的常用方法。