查了很多資料都沒搞懂的幾個問題。
第一個問題,如果我的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會出現不同的結果?