需求场景:目前有三个前后端分离项目(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