首頁 > 後端開發 > php教程 > nginx-幾個關於location pattern的問題

nginx-幾個關於location pattern的問題

WBOY
發布: 2016-08-29 08:50:55
原創
1270 人瀏覽過

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

第一個問題,如果我的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會出現不同的結果?

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板