前后端分离项目在Linux的部署方法、一台Nginx如何部署多个Web应用

news/2024/7/7 21:45:05 标签: 服务器, 运维, nginx

需求场景:目前有三个前后端分离项目(vue+springboot),Linux服务器一台,nginx一个,比如服务器地址为www.xxxxxxx.com  我想通过80端口访问服务①(即访问www.xxxxxxx.com);通过81端口访问服务②(即www.xxxxxxx.com:81);通过82端口访问服务③(即www.xxxxxxx.com:82)

 ①部署后端服务

Linux中找到一个地方,将打包好的后端jar放入其中,然后再创建一个存放控制台输出的日志文件(名字随意)

之后,切换到此文件夹,运行让jar在后台启动的指令

[root@iZbp1h09ipy0b1t88cquonZ ~]# cd /usr/local/javajar
[root@iZbp1h09ipy0b1t88cquonZ javajar]# nohup java -jar scbz_demo-0.0.1-SNAPSHOT.jar > scbz_demo.log &

指令解析:nohup java -jar jar包的名字 > 指定输出的日志文件 &

                nohup 表示让它后台启动,ctrl + c 后仍然也可以启动

如果想结束这个服务可以直接杀死这个进程:

[root@iZbp1h09ipy0b1t88cquonZ javajar]# ps -ef|grep java
root      546760       1  0 11月15 ?      00:00:34 java -jar scbz_demo-0.0.1-SNAPSHOT.jar
root      635284       1  0 11月15 ?      00:00:53 java -jar studentOrganizationRecruitSystem-0.0.1-SNAPSHOT.jar
root      747441  739287  0 14:52 pts/1    00:00:00 grep --color=auto java
[root@iZbp1h09ipy0b1t88cquonZ javajar]# kill -9 546760

②打包前端项目

使用 npm run build 将前端项目打包,然后放到nginx的静态目录中

③修改nginx配置(最重要)

首先,常用几个指令

#检查配置文件正确性
nginx -t

#启动nginx
nginx

#关闭nginx
nginx -s stop

#重新加载配置文件
nginx -s reload

#查看nginx进程
ps -ef|grep nginx

#杀死进程
kill -9 xxxxxxxx

先来看server这项配置

	# 一个server代表一个服务
    server {
        # 这个服务映射到的端口
        listen       82;
        # 服务名称
        server_name  localhost;
        
        # 这个服务所对应的页面文件地址
        location / {
            root   html/dist;
            index  index.html index.htm;
        }

   		# 这也是解决刷新页面之后404问题
	    location @router {
            rewrite ^.*$ /index.html last; 
        }

        # 将这个服务的所有以 /szbz/**  开头的接口,全都转发到proxy_pass这个地址去,而8889即为这个服务所对应的后端服务端口,其余配置均不需要改动
        location /scbz/ {
        	add_header Access-Control-Allow-Origin * always;
		    proxy_pass http://47.66.xxx.xx:8889;         
		    proxy_connect_timeout    6;
		    proxy_send_timeout        30;
		    proxy_read_timeout        30;            
		    proxy_set_header X-Forwarded-Host $host;
		    proxy_set_header X-Forwarded-Server $host;
		    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
		    client_max_body_size    100m;        
		}

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

修改后的配置文件:


user  root;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    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;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

	# 生辰八字
    server {
        listen       82;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

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

   		# 这也是解决刷新页面之后404问题
	    location @router {
            rewrite ^.*$ /index.html last; 
        }

        location /scbz/ {
        	    add_header Access-Control-Allow-Origin * always;
		    proxy_pass http://47.66.xxx.xx:8889;         
		    proxy_connect_timeout    6;
		    proxy_send_timeout        30;
		    proxy_read_timeout        30;            
		    proxy_set_header X-Forwarded-Host $host;
		    proxy_set_header X-Forwarded-Server $host;
		    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
		    client_max_body_size    100m;        
		}

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
	
	
	# 招聘门户
    server {
        listen       80;
        server_name  recruit_portal;

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

   		# 这也是解决刷新页面之后404问题
	    location @router {
            rewrite ^.*$ /index.html last; 
        }

        location /protal {
        	add_header Access-Control-Allow-Origin * always;
		    proxy_pass http://47.66.xxx.xx:8000/protal;
		    proxy_set_header X-NginX-Proxy true;
		    proxy_set_header X-Real-IP  $remote_addr;
		    proxy_set_header X-Forwarded-Host $host;
		    proxy_set_header X-Forwarded-Server $host;
		    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;   
		}

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
	
	# 招聘管理
    server {
        listen       81;
        server_name  recruit;

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

   		# 这也是解决刷新页面之后404问题
	    location @router {
            rewrite ^.*$ /index.html last; 
        }

        location /prod-api {
        	add_header Access-Control-Allow-Origin * always;
		    proxy_pass http://47.66.xxx.xx:8000;       
		    proxy_connect_timeout    6;
		    proxy_send_timeout        30;
		    proxy_read_timeout        30;            
		    proxy_set_header X-Forwarded-Host $host;
		    proxy_set_header X-Forwarded-Server $host;
		    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
		    client_max_body_size    100m;
		    # 路径重写
    		rewrite ^/prod-api(.*) $1 break;
		}

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }


}

82端口,将所有的 /scbz/**   的接口都代理到proxy_pass进行处理

80端口,将所有的 /prod-api/protal/**  的接口都代理到proxy_pass进行处理

81端口,将所有 /prod-api/**  的接口,先经过路径重写后,再代理到proxy_pass进行处理

location /protal {
    add_header Access-Control-Allow-Origin * always;  # 设置响应头,允许跨域请求
    proxy_pass http://47.66.xxx.xx:8000/protal;  # 将请求转发到指定的后端服务器
    proxy_set_header X-NginX-Proxy true;  # 设置请求头,表明经过Nginx代理
    proxy_set_header X-Real-IP  $remote_addr;  # 设置请求头,传递客户端真实IP地址
    proxy_set_header X-Forwarded-Host $host;  # 设置请求头,传递原始请求中的Host头
    proxy_set_header X-Forwarded-Server $host;  # 设置请求头,传递原始请求中的Server头
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 设置请求头,传递原始请求中的客户端IP地址
    proxy_connect_timeout 6;  # 设置与后端服务器建立连接的超时时间
    proxy_send_timeout 30;  # 设置向后端服务器发送请求的超时时间
    proxy_read_timeout 30;  # 设置从后端服务器读取响应的超时时间
    client_max_body_size 100m;  # 设置客户端请求的最大请求体大小为100MB
}

使用 Nginx 进行路径重写时,rewrite 指令用于匹配和修改请求的路径。

让我们逐个解释 rewrite ^/your-prefix(.*) $1 break; 中的每个部分的含义:
        rewrite:这是 Nginx 的指令,用于执行路径重写操作。
        ^/your-prefix(.*):这是一个正则表达式,用于匹配以 /your-prefix 开头的路径。^ 表示匹配路径的开头,/your-prefix 是你要替换的请求前缀,(.*) 表示匹配任意字符的零个或多个实例,并且将其捕获到一个变量中。
        $1:这是一个变量,用于引用正则表达式中捕获的内容。在这里,$1 引用了 (.*) 中捕获的路径的剩余部分。
        break:这是 rewrite 指令的标志,表示停止执行后续的重写规则。

其中,html文件除了指定在ngingx下的资源文件外,还可以指定全路径

更多nginx的安装,以及配置文件的详情解析,可移步到:

Linux安装Nginx,及Nginx详解,使用_安装nignix_Wmenghu的博客-CSDN博客文章浏览阅读603次。安装之前先安装一些依赖包去官网下载一个版本Nginx把我下载的是 nginx-1.16.1.tar.gz 先把它上传到Linux中去,上传到一个自己知道的文件夹,然后进入这个文件夹,进行解压这个命令可以解压到当前文件,然后在 /usr/local 下面建一个文件夹叫 nginx 等下就安装到这个文件夹中去。先cd 进入到刚刚nginx-1.16.1.tar.gz安装包解压的路径里去,再执行然后执行进行编译和安装这时候就安装好了,进入刚刚的安装目录去看一下目录结构conf..._安装nignixhttps://blog.csdn.net/w13966597931/article/details/126236809?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170012063616800197075154%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=170012063616800197075154&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-126236809-null-null.nonecase&utm_term=nginx&spm=1018.2226.3001.4450


http://www.niftyadmin.cn/n/5189933.html

相关文章

【原创】java+swing+mysql校园活动管理系统设计与实现

前言: 本文介绍了一个校园活动管理系统的设计与实现。该系统基于JavaSwing技术,采用C/S架构,使用Java语言开发,以MySQL作为数据库。系统实现了活动发布、活动报名、活动列表查看等功能,方便了校园活动的发布和管理&am…

计算机毕业设计选题推荐-一周穿搭推荐微信小程序/安卓APP-项目实战

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

基于Python3的scapy解析SSL报文

scapy对于SSL的支持个人觉得不太好,至少在构造报文方面没有HTTP或者DNS这种常见的报文有效方便,但是scapy对于SSL的解析还是可以的。下面我们以一个典型的HTTPS的报文为例,展示scapy解析SSL报文。 一:解析ClientHello报文 from sc…

ES7.x 新特性与重大变化

1.1 ES7.0 自适应副本选择。更智能的选择副本。refresh刷新策略。在不设置刷新时间的情况下,从原来的默认1s刷新一次,添加一个判断策略,如果30s内没有搜索,则不再refresh。默认配置5个分片,改为1个分片。使用Lucene8, 改进了 top-k 查询的搜索性能 。更好的主节点选举能力…

性能压力测试的优势与重要性

性能压力测试是软件开发过程中至关重要的一环,它通过模拟系统在极限条件下的运行,以评估系统在正常和异常负载下的表现。这种测试为确保软件系统的可靠性、稳定性和可伸缩性提供了关键信息。下面将探讨性能压力测试的优势以及为什么在软件开发中它具有不…

Springboot更新用户头像

人们通常(为徒省事)把一个包含了修改后userName的完整userInfo对象传给后端,做完整更新。但仔细想想,这种做法感觉有点二,而且浪费带宽。 于是patch诞生,只传一个userName到指定资源去,表示该请求是一个局部更新&#…

什么是好用的HR人才测评?

对于HR来说,选用一个合适的测评工具,我想不外乎以下几点: 1、成本可控 不是所有的HR都能申请到足够的资金,去做专业的人才测评,尤其是中小企业,这可是一笔不小 的开支。即使是基层普通岗位的成本&#xf…

shell之head命令

head命令 head命令是UNIX和Linux环境中常用的命令,用于在标准输出上显示文件的开头内容。 具体来说,head命令默认会显示给定文件开头的10行内容。如果指定了多个文件名,head命令会逐个显示每个文件的开头内容,并在每个文件显示的…