2017-07-25 76 views
0

我有一個NGINX配置文件,以服務與靜態文件和通過開發服務器的網站。NGINX意外的行爲與位置指令和proxy_pass

靜態 - >http://localhost:8080

開發的Web服務器 - >http://localhost:8080/dev

還有其他幾個我綁定到不同的位置,指令服務。

這裏是對配置文件的剪切。

... 
upstream qgis { 
    server qgis-spcluster_server:80; 
} 
...  
server { 
    listen  8080; 
    server_name localhost; 

location/{ 
    root /usr/share/nginx/html/build; 
    index index.html index.htm; 

    auth_basic "Zugangskontrolle"; 
    auth_basic_user_file /etc/nginx/.htpasswd; 
} 

location /dev/ { 
    proxy_pass http://web_app/; 

    auth_basic "Zugangskontrolle"; 
    auth_basic_user_file /etc/nginx/.htpasswd; 
} 

location /static/ { 
    proxy_pass http://web_app/static/; 
} 

location /qgis/ { 
    proxy_pass http://qgis/; 
} 

location /apex/ { 
    proxy_pass http://apex/apex/; 
    auth_basic "off"; 
} 

... 

一切工作正常,直到我打開URL來獲取靜態文件。之後,所有其他URL都會導致靜態文件。

對我來說,一切看起來不錯,但確實是一件不正常。

Basic_Auth會產生另一個意外的行爲。

的我有點無知怎麼解決這個問題。

回答

0

我想現在幾件事情,但沒有真正運作良好。所以我決定爲所有的位置指令創建第二個服務器塊,這些指令對於我當前的設置是有問題的。

也許這不是最好的解決方案,因爲我仍然不知道爲什麼我會遇到這些問題。但它現在起作用,這對我很重要。

1

請從您的位置指令中刪除尾隨/或在訪問它們時提供/

Nginx尋找最長的前綴匹配位置。當您訪問http://localhost:8080/apex,它排到/因爲/apex/不是location/apex

文件的前綴是here

+0

這聽起來對我有效。你有什麼想法,爲什麼nginx要求我爲apex端點輸入用戶名和密碼?這隻發生在我用靜態網站打開URL之後。這可能與我的第一個問題有關嗎? – Sceada

+0

我認爲這是相同的問題。如果您仍然有問題,請提供更多詳細信息。謝謝。 – mononoke

+0

讓我測試一些東西。我有這樣的感覺,也許我正在使用的服務人員導致了一些問題。如果我輸入http:// localhost:8080/apex /我仍然在靜態網站上。 – Sceada