windows伺服器上用nginx轉發到iis中的網站
2024年6月23日 測試透過
前提:華為雲1核心2G記憶體1M頻寬 伺服器 ¥40/年,還沒有備案,80埠用不了,在安全組裡把81埠開啟了,同時記得登入雲伺服器裡把WINDOWS的防火牆關閉或者放行81埠
想法:windows伺服器裡下載nginx windows版本,然後所有請求都透過nginx轉發到IIS裡部署的網站上,IIS上部署的網站不繫結80埠,每個IIS網站都繫結一個如8001,8002,8003 這樣的埠一直下去。。。
看了一下以前的小目標,其實這個想法之前就已經自己測試實現過了,看記錄是23年9月的時候就測試過了,不過那時沒有做到記錄,今天測試好了特此記錄一下!!!
nginx版本:1.25.2
iis裡部署netcore網站:繫結裡的主機名是localhost,埠是8003
nginx裡的server寫法:
server{ listen 81; server_name tool.niunan.net; location / { proxy_redirect http://localhost:8003/ /; proxy_set_header Host localhost; #記得iis裡的繫結的主機名也要是localhost proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://localhost:8003/; } }
server_name是訪問的域名,因為沒有備案無法用80埠,訪問只能是 http://tool.niunan.net:81來訪問,如果沒有server_name的話就可以直接用http://ip:81來訪問了
然後命令列下:
//檢測nginx配置檔案是否有錯誤 nginx -t //沒有錯誤就可以執行了 nginx.exe //修改配置檔案後熱過載nginx nginx -s reload //停止nginx nginx -s stop //如果錯誤資訊裡提示埠被佔用什麼的,可以先停掉w3c服務,啟動得nginx了再開啟w3c服務 net stop w3svc net start w3svc //cmd下查詢埠占用情況 netstat -ano|findstr 80 //上面的命令查詢出來最後一列是程序ID,再透過下面的CMD命令查詢對應哪個程式 tasklist |findstr 25728
弄好後不出意外就可以在外網輸入http://tool.niunan.net:81來訪問部署在iis上的netcore網站了,nginx會轉發到http://localhost:8003上,而且客戶端IP也會一同提交過去
自己弄的時候先是怎麼都訪問不了,經檢查發現是我華為雲安全組是放開了81埠,但是WIN伺服器上的防火牆沒有放開81埠,改了以後就行了
然後就是會碰到
Bad Request Invalid Hostname
HTTP Error 400. The request hostname is invalid
的錯誤,經查是配置檔案裡的
proxy_set_header Host localhost; #記得iis裡的繫結的主機名也要是localhost
這一行裡的localhost要和IIS繫結裡的主機名對應上,如果IIS主機名寫的是127.0.0.1,這裡也要寫上127.0.0.1
參考:https://blog.csdn.net/m0_65407682/article/details/134121521