Ubuntu
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/更改路徑
如果您在瀏覽器的 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
,這是其他前端站點常用的方法。