nginx配置二級目錄,反向代理不同ip+端口


場景描述:

通過二級目錄(虛擬目錄,應用程序)的方式訪問同一ip+端口的不同應用,例如location是用戶使用頁面,location/admin/是管理頁面,location部署在192.168.1.100的80端口,location/admin部署在172.20.1.32的8080端口上。

解決方案:

使用nginx反向代理,配置如下:

 

server {
        listen 80;
        server_name demo.domain.com;
        #通過訪問service二級目錄來訪問后台
    location /service {
            #DemoBackend1后面的斜杠是一個關鍵,沒有斜杠的話就會傳遞service到后端節點導致404
            proxy_pass      http://DemoBackend1/;
            proxy_redirect  off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
        #其他路徑默認訪問前台網站
        location / {
            proxy_pass http://DemoBackend2;
            proxy_redirect  off;
            proxy_set_header  Host  $host;
            proxy_set_header  X-Real-IP  $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
 
#簡單的負載均衡節點配置
upstream DemoBackend1 {
     server 192.168.1.1;
     server 192.168.1.2;
     ip_hash;
 }
upstream DemoBackend2 {
     server 192.168.2.1;
     server 192.168.2.2;
     ip_hash;
}

 

但是這種方式,二級目錄的樣式文件都不會正常顯示,他們不會自動在二級目錄下查找,而是在根目錄中查找,在跳轉頁面的時候也會報404錯誤。不知道是不是配置有誤,在server塊中配置了root或是rewrite都不能解決。

試着在proxy_pass后面加上二級目錄,並且和location塊的二級目錄相同,配置如下:

 

server {
        listen 80;
        server_name demo.domain.com;
        #通過訪問service二級目錄來訪問后台
    location /service {
            #DemoBackend1后面的斜杠是一個關鍵,沒有斜杠的話就會傳遞service到后端節點導致404
            proxy_pass      http://DemoBackend1/service;#DemoBackend1網站中要配置一個名稱為service的虛擬目錄,並且和location的二級目錄名稱一致
            proxy_redirect  off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
        #其他路徑默認訪問前台網站
        location / {
            proxy_pass http://DemoBackend2;
            proxy_redirect  off;
            proxy_set_header  Host  $host;
            proxy_set_header  X-Real-IP  $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
 
#簡單的負載均衡節點配置
upstream DemoBackend1 {
     server 192.168.1.1;
     server 192.168.1.2;
     ip_hash;
 }
upstream DemoBackend2 {
     server 192.168.2.1;
     server 192.168.2.2;
     ip_hash;
}

 

問題解決

另外,在實際應用中,我使用了asp.net 的mvc,將mvc設置為網站的方式沒有問題,如果是虛擬目錄的方式就會找不到路徑,是因為自己在網站中的地址很多寫的都不規范,正確的方式應該是:

Here's a typical example of what you should never do:

<script type="text/javascript">
    $.ajax({
        url: '/home/index'
    });
</script>

and here's how this should be done:

<script type="text/javascript">
    $.ajax({
        url: '@Url.Action("index", "home")'
    });
</script>

Here's another typical example of something that you should never do:

<a href="/home/index">Foo</a>

and here's how this should be written:

@Html.ActionLink("Foo", "Index", "Home")

Here's another example of something that you should never do:

<form action="/home/index" method="opst">

</form>

and here's how this should be written:

@using (Html.BeginForm("Index", "Home"))
{

}


引用:
https://zhangge.net/5054.html
http://blog.csdn.net/lusyoe/article/details/52928649

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM