Windows Server 2003 无法布署.NET Framework4.5 应用解决方案
一、背景描述
业务服务器操作系统为Windows Server 2003,已运行几套业务系统,均基于.NET Framework3.0,4.0,近期新开发项目是基于.NET Framework 4.5,但Win2003无法安装.NET Framework4.5框架,新项目框架又不能降级。服务器只有一个对外IP,IP再不能新增。在不影响原有系统的运行,又能让新项目正常上线,问题该如何解决???
二、解决方案
在Windows 2003服务器安装虚拟机,虚拟机安装Win2008(X86)(因服务器是32位操作系统,虚拟机也只能安装32位Win2008),将新项目布署至虚拟机,外部通过win2003物理机访问win2008虚拟机。
详细解决方法如下
三、技术步骤:
1、下载免费虚拟机软件Oracle VM VirtualBox 5.1.8,并增加虚拟机“Win2008R2”,具体安装过程略过(网上大把资料)。
2、虚拟机网络设置,重点,其中win2003物理机IP:192.168.56.1,win2008虚拟机IP:10.0.2.15,
网卡连接方式:网络地址转换(NAT),并设置端口转发规则(新项目使用服务器80端口,可根据实际情况设置),至此,物理机可正常访问虚拟机80端口,如图
3、将新项目布署至win2008R2虚拟机,项目占用80端口,在虚拟机测试项目运行正常。
4、在win2003物理机安装Nginx,做为请求转发,将win2003服务器80端口的请求转发至win2008R2虚拟机80端口,具体Nginx安装及配置略过。
转发过程:外网请求-----win2003外网IP(x.x.x.x)--------win2003内网IP(192.168.56.1)-----win2008R2(10.0.2.15)
四、优化
1、Nginx 设置为Windows服务,开机启动:
借助"Windows Service Wrapper"小工具,项目地址: https://github.com/kohsuke/winsw
下载地址: http://repo.jenkins-ci.org/releases/com/sun/winsw/winsw/1.18/winsw-1.18-bin.exe
下载该工具后,将其放在 Nginx安装目录下,并重命名为nginx-service.exe,创建配置文件nginx-service.xml(名字要和工具名一样),
创建nginx-service.exe.config(为支持NET 4.0 runtime,默认只支持NET 2.0 runtime),结构如下:
nginx-service.xml 内容如下:
1 <service> 2 <id>nginx</id> 3 <name>Nginx Service</name> 4 <description>High Performance Nginx Service</description> 5 <logpath>C:\nginx\nginx-1.8.1\logs</logpath> 6 <log mode="roll-by-size"> 7 <sizeThreshold>10240</sizeThreshold> 8 <keepFiles>8</keepFiles> 9 </log> 10 <executable>C:\nginx\nginx-1.8.1\nginx.exe</executable> 11 <startarguments>-p C:\nginx\nginx-1.8.1</startarguments> 12 <stopexecutable>C:\nginx\nginx-1.8.1\nginx.exe</stopexecutable> 13 <stoparguments>-p C:\nginx\nginx-1.8.1 -s stop</stoparguments> 14 </service>
nginx-service.exe.config 内容如下:
1 <configuration> 2 <startup> 3 <supportedRuntime version="v2.0.50727" /> 4 <supportedRuntime version="v4.0" /> 5 </startup> 6 <runtime> 7 <generatePublisherEvidence enabled="false"/> 8 </runtime> 9 </configuration>
在cmd中运行如下命令安装windows服务:c:\xxx\nginx-service.exe install (卸载c:\xxx\nginx-service.exe uninstall)
2、将Win2008R2虚拟机设置为开机启动,通过服务方式报错,无法实现。通过“程序---启动”实现,启动脚本如下:
1 @echo off 2 cd D:\Program Files\Oracle\VirtualBox 3 VBoxManage startvm Win2008R2 -type headless 4 pause 5 exit
至此,问题完美解决。如有更好方案.......,请指教。