虎泰克博客

Nginx之proxy_pass指令url反斜杠作用


在nginx中配置proxy_pass代理转发时;其后面的url中反斜杠/ 的匹配处理时常出现意想不到的问题发生;以下说明两种情况;如果在proxy_pass后面的url加/;表示绝对根路径; 如果在proxy_pass后面的url没有/;表示相对路径;把匹配的路径部分也给代理走。

下面六种情况分别用 http://127.0.0.1/proxy/test.html 进行访问测试

第一种情况:

location /proxy/ {
        proxy_pass http://127.0.0.1/;
}

最终会被代理到URL: http://127.0.0.1/test.html

第二种情况:相对于第一种 最后少一个 / 

location /proxy/ {    
    proxy_pass http://127.0.0.1;    
}

最终会被代理到URL: http://127.0.0.1/proxy/test.html

第三种情况:

location /proxy/ {    
    proxy_pass http://127.0.0.1/aaa/;    
}

最终会被代理到URL: http://127.0.0.1/aaa/test.html

第四种情况:相对于第三种 最后少一个 / 

location /proxy/ {    
    proxy_pass http://127.0.0.1/aaa;    
}

最终会被代理到URL: http://127.0.0.1/aaatest.html

* 第五种情况:定义了一个正则表达式;那么在URl部分没有转换发生:

location ~ ^/proxy/ {    
    proxy_pass http://127.0.0.1/aaa;    
}

最终会被代理到URL:http://127.0.0.1/proxy/test.html

最佳写法为:

location ~ ^/proxy/ {    
    proxy_pass http://127.0.0.1;    
}

* 第六种情况:有rewrite规则改变URl; 那也不会发生转换.

location /proxy/ { 
            rewrite   /proxy/(.*)$   /index.php?page=$1 break;    # break标记用于立即停止rewrite模块的所有指令
    proxy_pass http://127.0.0.1/aaa;    
}

最终会被代理到URL: http://127.0.0.1/index.php?page=test.html

最佳写法为:

location /proxy/ { 
            rewrite   /proxy/(.*)$   /index.php?page=$1 break;
    proxy_pass http://127.0.0.1;    
}


Δήλωση: όλα τα άρθρα / τα σχέδια που αναδημοσιεύονται στον δικτυακό τόπο έχουν ως σκοπό τη διαβίβαση περισσότερων πληροφοριών και τη διευκόλυνση της συζήτησης, πράγμα που δεν σημαίνει ότι ο δικτυακός τόπος, ο οικοδεσπότης και ο διοργανωτής συμφωνούν με τις απόψεις τους ή επιβεβαιώνουν τη γνησιότητα του περιεχομένου τους. Τα περιεχόμενα των άρθρων είναι μόνο για αναφορά. Εάν παραβιαστούν τα δικαιώματα του αρχικού συγγραφέα, επικοινωνήστε με τον διαχειριστή του δικτυακού τόπου.

Υπόγραψε στο σχόλιο

Λίστα σχολίων

    Δεν υπάρχουν δεδομένα