Ubuntu

nginx 為 proxypass 設置不同的文件根目錄

  • January 17, 2019

我只是想執行我在 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/更改路徑

如果您在瀏覽器的 devtools 上打開“網路”選項卡,您可以看到該站點正在嘗試在 URL 的根目錄載入資產。例如:

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

由於您不希望更改 Node.JS 路徑,因此您可以使用添加到server塊中的 nginx 位置萬用字元來解決此問題:

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

您可能需要對其進行編輯以包含其他擴展。我已經包括jscss以上。

/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,這是其他前端站點常用的方法。

引用自:https://serverfault.com/questions/949559