关于Web服务器IIS、Nginx、Apache反向代理实践
一、前言
在学习ASP.NET Core关于服务器中,了解到使用Kestrel作为应用服务器,通过IIS、nginx、Apache反向代理的方式处理web请求,弥补Kestrel在web服务器上不足,首先明确一下什么是反向代理?定义:是指用户不需要知道目标服务器的地址,也不需要在用户端做任何设定,可以直接通过访问反向代理服务器来获得目标服务器的资源。在这个过程中,反向代理服务器位于用户与目标服务器之间,但对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。
反向代理服务器的主要作用包括①提高内部服务器的安全:反向代理服务器可以隐藏真实的服务器IP地址,提高系统的安全性和隐私性;②加快对内部服务器的访问速度:反向代理服务器可以缓存动态或静态内容,减轻后端服务器的压力,提高页面访问速度;③负载均衡:反向代理服务器可以分发流量到多台服务器上,从而实现负载均衡,保证服务的可用性和稳定性;④压缩:反向代理服务器可以对页面进行压缩,减少页面的大小,提高页面的加载速度。
通过上述定义基本理解反向代理的定义、作用、依据作用应用于实践场景中,本文以实践方式来粗略的实现一个目标服务,在环境中已经搭建一个使用Kestrel作为web服务器的ASP.NET Core应用,访问地址是http://172.16.66.118:5005,然后其它反向代理服务器通过代理访问该服务器。下面基于Windows环境按照软件,部署反向代理。
二、nginx的反向代理
第一步、安装nginx服务器软件,创建系统服务(减少手动启动),启动服务。在https://nginx.org/en/download.html地址中选择Windows环境的软件,下载安装,主要文件信息如下:
注意:文件夹中主要包括conf中配置相关的文件,html中默认请求访问根目录,logs中运行nginx的相关日志,包括错误日志(帮助使用中查找启动问题或者配置错误问题)。注意:对nginx监听端口的配置,防止端口冲突!!!
注意:通过cmd在nginx软件安装的目录下运行相关命令,实现重启、重新加载配置文件项和启停操作,然后在浏览访问这个服务器,查看是否安装部署成功。
第二步、对nginx.conf文件进行反向代理的设置,比如通过访问服务器的http://172.16.66.118:89/dotnet/代理目标服务器的http://172.16.66.118:5005,返回请求信息。主要的配置是在server中创建一个location,如下代码:
server { listen 89; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; } location /dotnet/ { proxy_pass http://172.16.66.118:5005; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} }
完成上述配置,使用cmd重新加载配置,重启软件,通过访问http://172.16.66.118:89/dotnet/可以返回和访问http://172.16.66.118:5005一样的效果。
三、Apache的反向代理
第一步、安装Apache服务器软件,创建系统服务(减少手动启动),启动服务。在https://www.apachelounge.com/download/地址中选择Windows环境的软件,下载安装,主要安装文件信息如下:
注意:主要包括bin文件夹可执行exe,conf中的httpd.conf配置文件,其它的额外功能配置文件,logs中服务器启动运行日志,各个web站点启动运行日志数据;modules中各个模块so文件,因为Apache是基于模块开发、运行的软件,所示很多功能都要加入模块文件,然后在配置中启用模块生效。
第二步、Apache要使用反向代理,要启用相关的模块,查看模块文件是否带这写功能文件,然后在配置文件中开始模块。
注意:在开启模块,然后重启服务可能会报错,因为一些模块需要依赖于其它模块,所以其它模块要开启,否则会启动失败,具体那些模块,通过查看logs文件的启动错误日志查找,依次开启直到成功。
第三步、设置配置文件,通过是vhost功能,设置VirtualHost的节点,http://172.16.66.118:88/dotnet/可以返回和访问http://172.16.66.118:5005一样的效果。
# Virtual Hosts # # Required modules: mod_log_config # If you want to maintain multiple domains/hostnames on your # machine you can setup VirtualHost containers for them. Most configurations # use only name-based virtual hosts so the server doesn't need to worry about # IP addresses. This is indicated by the asterisks in the directives below. # # Please see the documentation at # <URL:http://httpd.apache.org/docs/2.4/vhosts/> # for further details before you try to setup virtual hosts. # # You may use the command line option '-S' to verify your virtual host # configuration. # # VirtualHost example: # Almost any Apache directive may go into a VirtualHost container. # The first VirtualHost section is used for all requests that do not # match a ServerName or ServerAlias in any <VirtualHost> block. # <VirtualHost *:88> ServerAdmin webmaster@dummy-host.example.com DocumentRoot "${SRVROOT}/docs/http-test" ServerName 172.16.66.118 ServerAlias 172.16.66.118 ErrorLog "logs/http-test.log" CustomLog "logs/http-test.log" common ProxyPass /dotnet http://172.16.66.118:5005 ProxyPassReverse /dotnet http://172.16.66.118:5005 </VirtualHost>
四、IIS的反向代理
第一步、在Windows系统中,通过控制面板开启IIS服务,然后安装两个插件,一个是requestRouter_amd64.msi,一个是URL重写,然后重新启动IIS,插件就安装到IIS中,在equestRouter勾选相关项,如下所示:
第二步、在网站中新建一个代理站点,设置访问端口是91,比如创建的poxy站点,通过使用URL重写设置相关配置项,完成代理,最终会反映到web.cofig配置文件中。http://172.16.66.118:91/dotnet/可以返回和访问http://172.16.66.118:5005一样的效果。
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="172.16.66.118:91" stopProcessing="true"> <match url="(.*)" negate="false" /> <action type="Rewrite" url="http://172.16.66.118:5005/" /> </rule> </rules> </rewrite> </system.webServer> </configuration>
五、总结
上述反向代理的实践只是一个Demo,实际应用要复杂多,设置更多的参数,实现更多功能,达到反向代理的目的或者作用!!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?