关于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,实际应用要复杂多,设置更多的参数,实现更多功能,达到反向代理的目的或者作用!!!

posted @   tuqunfu  阅读(660)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示