首頁  >  文章  >  後端開發  >  nginx-幾個關於location pattern的問題

nginx-幾個關於location pattern的問題

WBOY
WBOY原創
2016-08-29 08:50:551255瀏覽

查了很多資料都沒搞懂的幾個問題。

第一個問題,如果我的location配置是這樣的:

<code>location /doc {
    alias /home/user/doc;
}
</code>

那我訪問http://localhost/doc/a.html的時候實際上nginx是讀取了/home/usr/doc/a.html,如果我訪問的是http://localhost /docs/a.html甚至是http://localhost/docsioajsfopajowejfasd那nginx實際上會嘗試讀取哪個檔案?

第二個問題,如果我將doc配置成一個伺服器,再反向代理。

<code>server {
    listen 8000;
    server_name doc;
    root /home/user/doc;
    
    index index.html index.htm index.nginx-debian.html;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
    }
}
</code>

在主伺服器這樣配置:

<code>server {
    listen 80;
    ....
    location /doc {
        proxy_pass http://localhost:8000/;
    }
    }
</code>

這樣設定時存取http://localhost/doc/,如果index文件引用了靜態文件,靜態文件會變成404,瀏覽器會嘗試取得http://localhost/js/xxx.js 而不是http://localhost/doc/js/xxx.js,如果在pattern後面加上/變成

<code>location /doc/ {
            proxy_pass http://localhost:8000/;
        }
</code>

就沒有問題,但如果是第一個問題中的location配置,瀏覽器會正確尋找http://localhost/doc/js/xxx.js。這搞得我很困惑,結尾加不加/究竟有什麼影響?為什麼alias和proxy_pass會出現不同的結果?

回覆內容:

查了很多資料都沒搞懂的幾個問題。

第一個問題,如果我的location配置是這樣的:

<code>location /doc {
    alias /home/user/doc;
}
</code>

那我訪問http://localhost/doc/a.html的時候實際上nginx是讀取了/home/usr/doc/a.html,如果我訪問的是http://localhost /docs/a.html甚至是http://localhost/docsioajsfopajowejfasd那nginx實際上會嘗試讀取哪個檔案?

第二個問題,如果我將doc配置成一個伺服器,再反向代理。

<code>server {
    listen 8000;
    server_name doc;
    root /home/user/doc;
    
    index index.html index.htm index.nginx-debian.html;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
    }
}
</code>

在主伺服器這樣配置:

<code>server {
    listen 80;
    ....
    location /doc {
        proxy_pass http://localhost:8000/;
    }
    }
</code>

這樣設定時存取http://localhost/doc/,如果index文件引用了靜態文件,靜態文件會變成404,瀏覽器會嘗試取得http://localhost/js/xxx.js 而不是http://localhost/doc/js/xxx.js,如果在pattern後面加上/變成

<code>location /doc/ {
            proxy_pass http://localhost:8000/;
        }
</code>

就沒有問題,但如果是第一個問題中的location配置,瀏覽器會正確尋找http://localhost/doc/js/xxx.js。這搞得我很困惑,結尾加不加/究竟有什麼影響?為什麼alias和proxy_pass會出現不同的結果?

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn