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