Windows系统内网最全部署(IIS/Nginx+WinSW)前后端分离项目(jar+dist)以及解决相同网段访问不了问题

1.前端的第一种部署方法IIS(不推荐):

IIS虽然是可视化界面但是比nginx要麻烦很多,主要的是坑是在URL重写配置。

首先一定要提前把URL Rewrite和Application Request Routing这两个给装进U盘里,缺一不可。

我简单的介绍一下这两个的作用:URL重写用来配置跨服务器的请求转发,ARR用来实现跨服务器的请求转发。

官方下载地址分别为:URL Rewrite : The Official Microsoft IIS SiteApplication Request Routing : The Official Microsoft IIS Site
打开网页移到最下面,根据自己的需求跟需要部署的Windows架构来选择下载。

  1. x86:指 32 位架构的操作系统或 CPU。
  2. x64:指 64 位架构的操作系统或 CPU。

 Windows安装IIS直接看这位博主发的就行:Windows IIS服务器安装(超详细)_iis安装-优快云博客

都安装好后打开IIS

1.IIS 管理里找到一个图标 "Application Request Routing Cache",点击进去进行配置

2.进去后,点击 Server Proxy Settings

3.在设置页面,勾选 Enable proxy

4.应用保存刚才设置

5.在dist目录下创建一个web.config(URL重写的配置文件)把以下根据你的需求修改好后按Ctrl+S保存即可

<configuration>  
  <system.webServer>  
    <rewrite>  
      <rules>
                <clear />
                <rule name="Proxy to Backend" enabled="true" stopProcessing="true">

#这个api/和/watershed/下面的是根据前端设置的APP_API_BASE和API_BASE来决定的

#前端的代码:VITE_APP_API_BASE=‘/watershed/api/’;base:‘/watershed/’

#http://localhost:8080/api/{R:1} 根据你的需求要不要改
#模版为http://运行后端主机的IP:后端端口/后端的基地址即前缀/{R:1}
#其他的不用改
#记得把带井号的这几句话给删了,不然会报错,不规范的格式
                    <match url="^api/(.*)" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                    </conditions>
                    <action type="Rewrite" url="http://localhost:8080/api/{R:1}" logRewrittenUrl="true" />
                </rule>
                <rule name="Rewrite to index.html" enabled="true" stopProcessing="true">
                    <match url="(.*)" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="/watershed/" />
                </rule>  
      </rules>  
    </rewrite>  
  </system.webServer>  
</configuration>

6.在 网站 下的 Default Web Site 右键 添加应用程序

7.别名随便写,物理路径写dist目录的绝对路径,比如D:\project\watershed\app\dist

8.点击确定

2.前端的第二种部署方法Nginx(推荐):

Nginx官方下载地址:

nginx: download

选择 Stable version(稳定版本) 下的第三个:nginx/Windows-1.26.3 (可能版本不一样 下载最新的版本就行)

下载好后解压到目录里就行,之后只需要修改nginx.conf就行
1.为了可维护性、灵活性,我是把Nginx配置拆分到conf.d目录(在nginx根目录新建一个就行)

2.conf目录里的nginx.conf配置文件如下:

# 全局配置部分  
worker_processes auto;               # 自动分配工作进程数量(根据 CPU 核心数)  
error_log logs/error.log warn;       # 错误日志路径和日志级别  
pid logs/nginx.pid;                  # PID 文件路径  

# 事件处理块  
events {  
    worker_connections 1024;         # 每个工作进程的最大连接数  
}  

# HTTP 配置块  
http {  
    include       mime.types;        # 包含默认的 MIME 类型  
    default_type  application/octet-stream;  

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '  
                      '$status $body_bytes_sent "$http_referer" '  
                      '"$http_user_agent" "$http_x_forwarded_for"';  
    access_log  logs/access.log  main;  # 访问日志路径和日志格式  

    sendfile        on;              # 开启高效文件传输  
    keepalive_timeout  65;           # 连接保持超时时间  

    # gzip 压缩配置(全局)  
    gzip on;  
    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript;  
    gzip_proxied any;  
    gzip_vary on;  
    gzip_min_length 1024;  

    # 引入子配置文件  
    include D:/webserve/nginx-1.26.3/conf.d/*.conf;  # 加载 conf.d 目录下的所有 .conf 文件
}

 3.conf.d目录里的watershed.conf(名字根据你的项目自己取)配置文件如下:

    # 定义一个 HTTP 服务  
    server {  
        listen 80;                   # 监听 80 端口  如果你不想写server_name也可以直接在80后面写default_server 一样的效果
        server_name _;       # 服务的域名或 IP 下划线表示“匹配任意未被其他 server 块匹配的域名”,也可理解为“默认或兜底”域名配置。
    # 没有任何前缀时nginx默认定向到Nginx页面 即index  index.html
    # 当前缀只有/时定向到Nginx页面 nginx.config的默认根目录是nginx根目录里的html目录 所以不需要加root或alias
    location / {  
        index  index.html;
    }


    # 301表示永久重定向到/ld-watershed/
    location /ld-watershed {  
        return 301 /ld-watershed/;  
    }  

    # 注意要用alias alias是替换访问目录而root是添加访问目录

    location /ld-watershed/ {  
        alias D:/project/watershed/app/dist/;  
        index index.html;  
        try_files $uri $uri/ /ld-watershed/index.html;  
    }

    # API 代理配置,将 /watershed/api/ (即前端写的APP_API_BASE)开头的请求转发到后端服务  
    location /ld-watershed/api/ {  
        proxy_pass http://localhost:8080/liandu/;            # 后端服务地址 跟上文的web.config的模版差不多 少了 {R:1} 而已
        proxy_set_header Host $host;                                    # 设置 Host 请求头  
        proxy_set_header X-Real-IP $remote_addr;                        # 客户端真实 IP  
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    # 转发链中的 IP  
    }
    }  

4.配置好后在nginx根目录运行CMD,直接运行nginx就行
 

 记得把带#的话给删了 否则直接复制粘贴可能会报格式错误
start nginx #运行nginx

nginx -s reload #nginx配置文件重载
nginx -s stop #停止运行nginx

 3.后端Jar包部署方式WinSW(推荐):

后端部署Jar有三种方式:cmd命令运行、bat脚本运行、WinSW运行。

前两个都有弊端:cmd关了窗口就会停止运行、bat主机如果卡死重启则不会重启。

WinSW只是个工具,就是把jar包运行程序变成一个服务,这样即可以后台运行也会随着主机重启而自动重启。

WinSW官方下载地址:

Release WinSW v2.12.0 · winsw/winsw · GitHub

根据Windows的架构对应版本进行下载,配置文件也可以从这里面下然后进行修改,也可以自己建一个.xml类型文件,然后在放WinSW目录里建一个jar目录跟logs目录。如图

配置文件内容如下:

<service>
  <!-- ID of the service. It should be unique across the Windows system-->
  <id>随便写</id>
  <!-- 服务名称-->
  <name>随便写</name>
  <!-- 服务说明 -->
  <description>随便写</description>
  <!-- 指定程序依赖的 jre  -->
  <executable>D:\sdk\jdk8\bin\java.exe</executable>
  <!-- jar 运行命令  -->
  <arguments> -jar %BASE%\jar\jar包的名字.jar </arguments>
  <!-- 输出日志目录  -->
  <logpath>%BASE%\logs</logpath>
  <!-- %BASE% 为部署主目录  -->
</service>

在该主目录打开CMD,运行WinSW工具。指令如下:

winsw.exe install #安装服务
winws.exe start #启动服务
winsw.exe stop #停止服务

winsw.exe uninstall #卸载服务

# 如果更换jar包只需要 先停止再启动服务就行 不需要重新安装服务

4.如何看是否部署成功:

前端看网页是否能加载出来
后端直接curl查看接口

5.同一网段下的主机访问不了的解决方法: 

这种情况大多数是网络层或传输层没有放行所致,设置放行80端口即可:

1.网络层:

  • 如果有路由器或三层交换机等网络设备启用了防火墙功能,需要在对应设备上进行端口转发或放行规则的配置。
  • 如果在云服务器(例如阿里云、AWS 等)上,需要打开其安全组规则,允许外部访问 TCP 80 端口。

2. 传输层:

  • 服务器操作系统本身也可能开启了防火墙(如 Windows Firewall)。要在系统防火墙中开放相应的 TCP 80 端口入站规则。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值