win系统环境搭建(七)——使用Nginx部署前后端分离项目

2023-09-20 18:17:48

windows环境搭建专栏🔗点击跳转

win系统环境搭建(七)——使用Nginx部署前后端分离项目

系列windows环境搭建开始讲解如何给win系统搭建环境,本人所用系统是腾讯云服务器的Windows Server 2022,你可以理解成就是你用的windows10系统。我会尽量从Linux的视角去操纵win系统,以达到返璞归真的效果。我将会讲述:

  1. 如何安装jdk。
  2. 如何安装maven。
  3. 如何安装mysql8(我将使用压缩包安装)。
  4. 如何安装redis。
  5. 如何安装nginx。
  6. 如何使用nginx部署前后端分离的项目。
  7. 如何安装nvm以使用node和npm。

    也许该系列会更多吧。

我要实现的效果是,客户访问80端口访问前端,访问80端口的api服务即可访问到8080端口的后端服务。

1.前端

将vue项目打包的dist文件夹,放置到C:\tencent里,没有的文件夹tencent话就新建。

mkdir C:\tencent

2.后端

2.1 启动服务

mkdir C:\tencent\server

将jar包放置到到C:\tencent\server

进入目录

cd C:\tencent\server

关于vim,不会用可以看这两篇win系统环境搭建(一)——Windows安装一些小工具一文搞定vim,从安装到入门到精通,助你成功入门vim,这里并不需要你必须用vim,只要是编辑文本的东西就ok!


新建bat脚本

vim start.bat

记得令文件编码为gbk,因为win系统默认gbk。

:set encoding=gbk

(这里即使你不用vim,用的其他编辑器,也请记得保存bat脚本编码为GBK)。

start.bat内容如下

@echo off

:: 分配堆内存大小(总内存的四分之一)
set heap_memory=1
:: 获取线程数量
set thread_count=%NUMBER_OF_PROCESSORS%

:: 启动 Java 应用程序
:: `-server`:指定Java虚拟机以服务器模式运行,以获得更好的性能。
:: `-Dfile.encoding=UTF-8`:设置文件编码为UTF-8,确保正确处理文本数据。
:: `-XX:ActiveProcessorCount=8`:指定并行处理器的数目为8,以影响Java虚拟机的线程和CPU利用情况。
:: `-Xms2g`:指定Java虚拟机的最小堆内存为2g。
:: `-Xmx4g`:指定Java虚拟机的最大堆内存为4g。
:: `-XX:+UseParallelGC`:启用并行垃圾回收器,以提高垃圾回收的效率。
:: `-XX:+UseCompressedOops`:启用压缩指针,以减少内存消耗。
:: `-XX:ParallelGCThreads=8`:指定并行垃圾回收器的线程数为8。
:: `-XX:+DisableExplicitGC`:禁用显式的垃圾回收调用
:: `-XX:+HeapDumpOnOutOfMemoryError`:当发生堆溢出异常时,自动生成堆转储文件(Heap Dump)。
:: `-Djava.net.preferIPv4Stack=true`:该属性为 true 可确保 JVM 在具备 IPv6 支持的情况下仍然优先使用 IPv4。
start javaw -server -Dfile.encoding=UTF-8 -XX:ActiveProcessorCount=%thread_count% -Xms%heap_memory%G -Xmx%heap_memory%G -XX:+DisableExplicitGC -XX:+UseParallelGC -XX:+UseCompressedOops -XX:ParallelGCThreads=%thread_count% -XX:+HeapDumpOnOutOfMemoryError -Djava.net.preferIPv4Stack=true -jar "C:\tencent\server\tencent-2023.09.13.jar"

启动服务

可以在cmd面板执行如下,也可以直接双击执行,即可运行jar服务。

C:\tencent\server\start.bat

2.2 终止服务

进入目录

cd C:\tencent\server

新建bat脚本

vim stop.bat

记得令文件编码为gbk,因为win系统默认gbk。

:set encoding=gbk

stop.bat内容如下

@echo off

:: 获取端口号 8080 对应的进程 PID
for /F "tokens=5" %%a in ('netstat -ano ^| findstr "8080" ^| findstr "LISTENING"') do set "PID=%%a"

:: 检查是否找到了 PID
if "%PID%"=="" (
    echo 无法找到端口号为 8080 的进程。
) else (
    echo 找到端口号为 8080 的进程,PID 为: %PID%
    
    :: 杀死进程
    taskkill /F /PID %PID%
)

终止服务

可以在cmd面板执行如下,也可以直接双击执行,即可终止服务。

C:\tencent\server\stop.bat

3.nginx

3.1 配置文件

# Nginx所属用户和用户组,这里配置的是nobody。由于Nginx并不会直接向客户端发送数据,只有在请求到达时才加入到Nginx的I/O处理队列中,所以Nginx只需要拥有访问目录的权限即可,无需高额权限
#user  nobody;

# 工作进程数,一般设置为系统CPU核心数。对于单核服务器来说,设置为1即可;对于多核服务器,可以设置成CPU核心数
worker_processes  2;

# 定义错误日志文件路径。Nginx生产环境重要的调试信息将会记录在该文件中
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

# 定义Nginx主进程的PID文件所在位置。若需要向Nginx主进程发送信号时,必须要知道这个进程的PID,因此需要记录到PID文件中
#pid        logs/nginx.pid;

events {
	# 最大并发数。当同时有多个客户端访问Nginx时,每个访问者占据一个连接,当连接数到达该配置变量的值时,新的访问请求将会等待,直到空闲连接数不到该值再处理新的请求
    worker_connections  1024;
}

http {
	# 引入mime.types文件,它可以为不同的文件扩展名设定不同的MIME类型。Nginx不像Apache这样会根据文件扩展名自动推断文件类型,如果文件没有被正确识别MIME类型,就可能会出现浏览器无法正确解释的问题
    include       mime.types;
	
	# 默认MIME类型,如果服务器无法识别它,那么就让浏览器自己来识别。当Nginx无法识别当前返回的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;
	
	# 开启高效文件传输,建议保持默认的开启状态。Nginx的高效文件传输技术可以让其更快地将文件内容传输到客户端,提高文件传输速度
    sendfile        on;

	# 禁用TCP节点推送
	#tcp_nopush     on;
	
    # 客户端保持连接的时间,超时后断开连接。连接复用机制,当客户端发送完请求后,连接还会继续保持一段时间,以便快速发起下一次请求
	#keepalive_timeout  0;
    keepalive_timeout  65;  

	# 开启数据压缩功能
	#gzip  on;

    server {
		# Nginx监听端口,当有请求到达该端口时,Nginx将会处理该请求。当客户端发送了请求过来后,Nginx会监听到该端口被占用,便会启用该server块去处理该请求
        listen       80;

		# 指定服务端的域名/IP,如果没有域名,则使用IP地址。当Nginx接收到一个请求时,首先会按照请求中的Host(或X-Forwarded-Host)头信息的域名取匹配server_name指令中的值,只要匹配上即可
        server_name  localhost;
        
		# 该行是将字符集设置为koi8-r,koi8-r是一种字符编码格式
		#charset koi8-r;
        # 设置字符集为 utf-8
        charset utf-8;

		# 该行是定义了当前这个server块的访问日志文件的存储位置。其中logs/host.access.log表示存储的目录和文件名,main表示使用标准的日志格式。如果该行没有被注释掉,就会在相应的目录下生成一份日志文件,记录该server块的访问日志
        #access_log  logs/host.access.log  main;

		# URL匹配规则。在Nginx中,URL匹配是由location指令提供的
        location / {                
            # 当URL中的路径为空时,会默认从这里找到对应的文件。该块内容的作用是指定处理该请求所使用的文件系统根目录路径
            root   "C:\tencent\dist";
            # try_files指令将尝试匹配请求的文件,如果找不到,则返回index.html
            try_files $uri $uri/ /index.html;
        }

        # 后端接口配置
        location /api/ {
            # 设置代理服务器发送的http请求头中Host的值为接收到的客户端请求头中的Host值
            proxy_set_header Host $http_host;
            # 设置代理服务器发送的http请求头中X-Real-IP的值为当前请求的客户端IP地址
            proxy_set_header X-Real-IP $remote_addr;
            # 设置代理服务器发送的http请求头中REMOTE-HOST的值为当前请求的客户端IP地址
            proxy_set_header REMOTE-HOST $remote_addr;
            # 设置代理服务器发送的http请求头中X-Forwarded-For的值为所有经过的代理服务器IP地址列表,多个IP地址之间用逗号隔开
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            # 将客户端请求通过代理服务器转发到指定地址
            proxy_pass http://127.0.0.1:8080/api/;
            # 设置代理服务器与后端服务器建立连接的超时时间
            proxy_connect_timeout 3600s;
            # 设置代理服务器从后端服务器读取数据的超时时间
            proxy_read_timeout  3600s;
            # 设置代理服务器向后端服务器发送数据的超时时间
            proxy_send_timeout  3600s;
        }

		# 配置 404 页面。当请求的文件不存在,或者因为某种原因无法访问到指定的文件时,返回404
        # error_page  404              /404.html;
        
		# 错误页面的配置,当出错时会跳转到该页面。当服务端返回错误状态码时,可以为不同的状态码指定不同的错误页面
        error_page   500 502 503 504  /50x.html;
		# 当请求 URL 精确匹配 /50x.html 时,根据配置路径返回静态页面。配合error_page使用,可以为错误页面指定特定的URI
        location = /50x.html {
            root   html;
        }

        # 将 PHP 脚本代理到监听在 127.0.0.1:80 的 Apache 服务器,或将 PHP 脚本代理到监听在 127.0.0.1:9000 的 FastCGI 服务器
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
        #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;
        #}
    }

    # 另一个使用 IP、名称和端口的虚拟主机配置
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

    # HTTPS 服务器
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
}

C:\Program Files\nginx-1.22.1\conf目录下的文件nginx.conf替换为上面的内容。

3.2 nginx重新加载

进入目录

cd C:\Program Files\nginx-1.22.1

执行

nginx -s reload

至此,就配置完成了,dist文件和jar包就不提供了。

更多推荐

redis实战-redis实现异步秒杀优化

秒杀优化-异步秒杀思路未优化的思路当用户发起请求,此时会请求nginx,nginx会访问到tomcat,而tomcat中的程序,会进行串行操作,分成如下几个步骤1、查询优惠卷2、判断秒杀库存是否足够3、查询订单4、校验是否是一人一单5、扣减库存6、创建订单在这六步操作中,又有很多操作是要去操作数据库的,而且还是一个线程

android-适配方案-密度适配-最小宽度限定符

一最小宽度的该如何计算始终以真实屏幕的最小宽度作为匹配计算,无论横竖屏转变都是以最小宽度为准匹配实际适配调试经验:因为适配过程中可能会动态的调节设备像素和密度。根据如下工具代码打日志,可以快速调试当前设备。packagecom.jicaai.radio.utils;importandroid.app.Activity;

Golang开发--计时器(Timer)和定时器(Ticker)

计时器(Timer)在Go中,可以使用time包提供的计时器(Timer)来执行定时任务。计时器允许你在指定的时间间隔后执行某个操作。time.Timer结构表示一个计时器,它会在指定的时间段后触发单次操作。创建计时器:使用time.NewTimer(duration)函数创建一个计时器,其中duration是一个ti

9月13-14日上课内容 第三章 ELK日志分析系统及部署实例

本章结构ELK日志分析系统简介ELK日志分析系统分为ElasticsearchLogstashKibana日志处理步骤1.将日志进行集中化管理2.将日志格式化(Logstash)并输出到Elasticsearch3.对格式化后的数据进行索引和存储(Elasticsearch)4.前端数据的展示(Kibana)Elast

python自(2)切片 字典 遍历删除添加修改查询定义函数函数返回值作用域序列化异常报错urllib使用一个类型六个方法下载 视频音频图片

切片##切片#s='helloword'##下标索引为0的#print(s[0])#h##左闭右开(左是下标开始的,右是几个索引值)例如从0开始算4个索引值#print(s[0:4])#hell##更改起始值的开始位置#print(s[1:])#elloword##下标结束位置#print(s[:5])#hello##

二叉搜索树(BST,Binary Search Tree)

文章目录1.二叉搜索树1.1二叉搜索树概念1.2二叉搜索树的查找1.3二叉搜索树的插入1.4二叉搜索树的删除2二叉搜索树的实现3二叉搜索树的应用3.1二叉搜索树的性能分析1.二叉搜索树1.1二叉搜索树概念二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都

面试官:用Vue3.0 写过组件吗?如果想实现一个 Modal你会怎么设计?

🎬岸边的风:个人主页🔥个人专栏:《VUE》《javaScript》⛺️生活的理想,就是为了理想的生活!目录一、组件设计二、需求分析三、实现流程目录结构组件内容实现API形式事件处理其他完善一、组件设计组件就是把图形、非图形的各种逻辑均抽象为一个统一的概念(组件)来实现开发的模式现在有一个场景,点击新增与编辑都弹框出

linux文件权限

借东风七星坛上卧龙登,一夜东风江水腾。不是孔明施巧计,周郎安得逞才能?基本权限文件权限设置:可以使某个用户或者某个组能够对文件进行某些操作权限对象:u===>属主g===>属组o===>其他人----------------基本权限类型r--->read读--->4w--->write写--->2x--->exec执行

Vue2+Vue3

文章目录Vue快速上手Vue是什么第一个Vue程序插值表达式Vue核心特性:响应式Vue指令v-htmlv-show与v-ifv-else与v-else-ifv-onv-bindv-forv-model指令修饰符计算属性watch侦听器(监视器)watch——简写watch——完整写法Vue生命周期和生命周期的四个阶段

【Linux学习笔记】权限

1.普通用户和root用户权限之间的切换2.权限的三个w2.1.什么是权限(what)2.1.1.用户角色2.1.2.文件属性2.2.怎么操作权限呢?(how)2.2.1.ugo+-rwx方案2.2.2.八进制方案2.2.3.文件权限的初始模样2.2.4.进入一个目录,需要什么权限呢?2.3.为什么要有权限呢?(why

计算机毕业设计 基于SSM+Vue的校园短期闲置资源置换平台的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌🍅文末获取源码联系🍅👇🏻精彩专栏推荐订阅👇🏻不然下次找不到哟————————————————计算机毕业设计题目《10

热文推荐