Ubuntu

如何配置 nginx 以查找與 index.html 相關的 /js /css 的子文件夾?

  • October 31, 2018

我有我的工作 Vuejs 應用程序,當我將它部署到它的生產環境時我也遇到了問題。不幸的是,我不知道應該如何設置配置?

當我從網路瀏覽器訪問我的應用程序時(在我的例子中是http://10.0.0.4/kommandoran2.0),找到 index.html 沒有問題。但是index.html找不到子文件夾中的連結文件(如 javascript 文件 [example http://10.0.0.4/kommandoran2.0/js/example.js] 或樣式表 [example http://10.0.0.4/kommandoran2.0/css/example.css])。.js我對所有.css文件都有 404 錯誤。

生產環境: 我的作業系統是Ubuntu(在樹莓派上),我的Web伺服器是nginx。這是我的應用程序文件在我的生產環境中的位置:

在此處輸入圖像描述

編輯 1(澄清應用程序文件所在的位置):

/home/pi/kommandoran2.0/js/example.js
/home/pi/kommandoran2.0/css/example.css
/home/pi/kommandoran2.0/img/example.jpg 
/home/pi/kommandoran2.0/index.html

這是我的 nginx 配置文件中的伺服器塊:

server {
   listen 80 default_server;
   listen [::]:80 default_server;



   server_name mypi.example.org;
   root /var/www/html/;
   index index.php index.html index.htm;

   location /kommandoran2.0 {
       root  /home/pi;
       index index.html;

       try_files $uri $uri/ =404;


       #I believe that I need some more configuration in this block but I can't figure out what needs to be done?
   }

   location /iot {
           rewrite ^/iot(.*) $1 break;
           proxy_pass      "http://127.0.0.1:1880";
   }

   location ~ \.php$ {

       include /etc/nginx/fastcgi_params;

       fastcgi_index  index.php;
       fastcgi_param  SCRIPT_FILENAME  /var/www/html/$fastcgi_script_name;
       fastcgi_param  REQUEST_URI      $request_uri;
       fastcgi_param  QUERY_STRING     $query_string;
       fastcgi_param  REQUEST_METHOD   $request_method;
       fastcgi_param  CONTENT_TYPE     $content_type;
       fastcgi_param  CONTENT_LENGTH   $content_length;
       fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
   }

   location ~ /\.ht {
       deny all;
   }
}

我相信我的問題與Nginx 404 for css js files非常相似,但我不明白如何使解決方案適應我的問題。

編輯 2,瀏覽器中的日誌和錯誤 這是來自 nginx 的輸出/var/log/nginx/access.log(提取,我正在嘗試在http://10.0.0.4/kommandoran2.0/此處瀏覽我的應用程序,請參閱下面的瀏覽器)。

10.0.0.4 - - [31/Oct/2018:12:31:37 +0100] "GET /kommandoran2.0/ HTTP/1.1" 304 0 "-" "Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Raspbian Chromium/65.0.3325.181 Chrome/65.0.3325.181 Safari/537.36"
10.0.0.4 - - [31/Oct/2018:12:31:37 +0100] "GET /kommmandoran2.0/css/app.cb44bddd.css HTTP/1.1" 404 200 "http://10.0.0.4/kommandoran2.0/" "Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Raspbian Chromium/65.0.3325.181 Chrome/65.0.3325.181 Safari/537.36"
10.0.0.4 - - [31/Oct/2018:12:31:38 +0100] "GET /kommmandoran2.0/css/chunk-vendors.e084a3f2.css HTTP/1.1" 404 200 "http://10.0.0.4/kommandoran2.0/" "Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Raspbian Chromium/65.0.3325.181 Chrome/65.0.3325.181 Safari/537.36"
10.0.0.4 - - [31/Oct/2018:12:31:38 +0100] "GET /kommmandoran2.0/js/chunk-vendors.dcf6e5da.js HTTP/1.1" 404 200 "http://10.0.0.4/kommandoran2.0/" "Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Raspbian Chromium/65.0.3325.181 Chrome/65.0.3325.181 Safari/537.36"
10.0.0.4 - - [31/Oct/2018:12:31:38 +0100] "GET /kommmandoran2.0/js/app.96c7cdcf.js HTTP/1.1" 404 200 "http://10.0.0.4/kommandoran2.0/" "Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Raspbian Chromium/65.0.3325.181 Chrome/65.0.3325.181 Safari/537.36"

此圖像描述了對應於上述日誌文件的請求: 在此處輸入圖像描述

**問題:**我應該如何讓 Nginx 理解我的/js/css文件夾的正確路徑?

我認為您的位置內的根目錄/kommandoran2.0是這裡的問題。

根據您的 URI 檢查該位置http://10.0.0.4/kommandoran2.0,然後搜尋 index.html 以及 css、js 等。指定根目錄內的文件夾:/home/pi

但是使用您的文件結構,它應該在/home/pi/kommandoran2.0.

完整的位置塊將如下所示:

location /kommandoran2.0 {          # Maybe just /kommandoran see below.
   root  /home/pi/kommandoran2.0;
   index index.html;

   try_files $uri $uri/ =404;
}

我不確定為什麼您的 index.html 確實有效,儘管我自己沒有嘗試過。

一個原因可能是因為您的位置巧合地與您的文件夾名稱匹配,$uri/將其定位到/home/pi/kommandoran2.0並找到 index.html。

也許將您的位置塊更改為/kommandoran沒有2.0將有助於澄清事情,並在必要時使重寫更容易。

這對 Nginx 中的位置很有幫助:http: //nginx.org/en/docs/beginners_guide.html

編輯:

從您的 access.log 中可以看出,您的 Page 嘗試從中載入資源/kommmandoran2.0/,其中有一個m太多,這些靜態連結在您的index.html?

如果是這樣,請嘗試將其修復為相關連結或正確的地址,例如:

<link rel="stylesheet" type="text/css" href="css/app.cb44bddd.css">

或者:

<link rel="stylesheet" type="text/css" href="/kommandoran2.0/css/app.cb44bddd.css">

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