如何使用 nginx 反向代理 asp.net core


前言

最近又雙叒叕想搞前端項目了,這次我想玩玩nginx反代asp.net core,按照微軟官方文檔一頓操作后,輸入地址發現是404,然后我就又開始了一頓窮折騰... 與以前稍微有點不同的是這次折騰了很久很久才解決問題

問題截圖

nginx配置文件

瀏覽器實際效果

解決過程

我首先想到的是到群里面問問,很快就有人回復我了,不過這個回復看的我雲里霧里,他說“設置請求頭固定為你那個地址看看”,其中的地址就是”localhost:5000“,至於請求頭是哪個嘛我當時也問了,他說”好像是host-header什么的來着,具體的拼寫記不得“,然后就沒下文了,於是我就去折騰nginx了,折騰了很久啥用都沒

第二天,我想着是不是跨域問題弄得呢,然后我就必應去了,一頓操作下來后還是啥用都沒,然后這個問題就被我擱置了幾天,沒辦法,畢竟人不能在一棵樹上吊死

幾天后我突發靈感,想着是不是監聽地址的問題,於是我做了個三步曲,一發布,二修改監聽地址,三修改nginx配置文件
一頓操作后,打開瀏覽器,輸入地址,敲回車... omg,終於不是404了!

正文

首先在Setup.cs里的Configure方法加入如下代碼,並且最好加在開頭

app.UseForwardedHeaders(new ForwardedHeadersOptions
{
    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});

然后就能夠發布了,接着再配置一下nginx,也沒什么好配置的
主要就是“proxy_pass”要設置為實際的ip地址,不能用 localhost,“127.0.0.1”,“0.0.0.0”等ip地址

location / {
        proxy_pass         http://192.168.1.4:5000/;

        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }

然后就是重載二連

$ nginx -t
$ nginx -s reload

這樣nginx就配置好了

以上兩步參考自微軟官方文檔:https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-5.0

接下來就是配置監聽地址了,有兩種方法來配置,一是命令行,二是環境變量

命令行

$ dotnet <dll file> --urls "http://*:5000/"

環境變量

ASPNETCORE_URLS = http://*:5000/

以上配置方法參考自:https://blog.walterlv.com/post/configure-urls-and-port-for-asp-dotnet.html

4·13 更新

說來慚愧,我才知道docker容器默認不能直接訪問宿主機的網絡,仔細想想也對,畢竟是容器啊,哪能讓你隨便訪問宿主機呢

那么這跟本文章有什么關系呢,有的,因為我的 nginx 就是用 docker 來部署的 🤣

所以要怎么解決呢,很簡單,就是把上述兩個地址改成“http://172.17.0.1:5000/”就行了

至於為啥要用這個ip地址,請參考:https://www.cnblogs.com/mafeng/p/11781003.html

順便再提個醒,Linux下查詢ip配置的命令是“ifconfig”不是“ipconfig”,別搞混了 😂

結果截圖

最后再放送一波結果圖

systemd服務配置

nginx配置

瀏覽器截圖


免責聲明!

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



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