搜尋

首頁  >  問答  >  主體

nginx 比對首頁怪異問題

upstream backend {
    server 192.168.0.100:80;
    server 192.168.0.100:81;
}
server {
    listen 80;
    server_name www.abc.com abc.com;
    root  /opt/wwwroot/abc.com/;

    location / {
        proxy_pass https://backend;
        proxy_set_header   Host   $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_hide_header X-Powered-By;
    }

    location = / { 
        index index.html index.htm index.php;
    }
}

我想當使用者造訪www.abc.com/ 的時候不走proxy_pass .直接造訪本地的/opt/wwwroot/abc.com/index.html 頁面,其餘的請求都走proxy_pass
搞了半天搞不定,有些怪異,求大神們幫忙看看。 。

淡淡烟草味淡淡烟草味2755 天前531

全部回覆(4)我來回復

  • 怪我咯

    怪我咯2017-05-16 17:30:20

    雷雷

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-16 17:30:20

    這是nginx的預設location匹配規則導致的,nginx的location匹配的是相對URI,nginx的location匹配規則如下:

    1. 首先匹配“=”,也就是所謂的精確匹配
    2. 其次,匹配正規表示式,例如"~"或"^~"
    3. 再其次,按照設定檔的順序進行比對
    4. 最後,交給/進行通用匹配

    理解了nginx的location匹配規則,你的情況就很容易解釋了,www.abc.com/的相對URI時/,首先時精確匹配location = / ,其他例如www.abc.com/adf的相對URI是/adf,根據你的location匹配規則交給了通用匹配

    想解決這個問題將index放在通用匹配裡就行了,單獨寫一個location = / {}從你的需求來看沒有什麼作用

    回覆
    0
  • 迷茫

    迷茫2017-05-16 17:30:20

    下面的location不需要的,直接在上面 index index.html; 這樣就行了

    回覆
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-16 17:30:20

    把兩個location換下位置。 。 。

    回覆
    0
  • 取消回覆