摘要:
本文介绍了Nginx安装配置与项目部署的全流程。首先详细说明了Nginx的yum安装方法及开机自启设置,重点解析了nginx.conf配置文件的四大核心模块(main/http/server/location)。通过hello-nginx案例演示了静态资源部署和反向代理配置。
在项目部署部分,解决了Maven打包中的常见问题(Lombok警告、依赖冲突等),并介绍了JDK21安装和systemd服务集成方法。最后详细说明了前后端联调流程:前端资源部署、Nginx代理配置、域名映射等,实现通过域名访问完整项目。整个流程涵盖了从基础配置到实际部署的关键环节。
1,nginx的安装
(1)创建`/etc/yum.repos.d/nginx.repo`文件
(2)vim /etc/yum.repos.d/nginx.repo,增加内容:
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
(3)执行安装命令:yum -y install nginx
(4)设置开机自启动:systemctl enable nginx
2,了解重要的配置文件

(1)main block
“main block`位于配置文件的最外层,其包含了影响Nginx服务器整体行为的全局参数,例如
- `user`:定义Nginx工作进程的用户和用户组。
- `worker_processes`:指定Nginx使用的工作进程数。
- `error_log`:配置全局错误日志文件路径。
(2)http block
`http block`位于`main block`中,用于配置HTTP服务器相关功能。例如
- `access_log`:指定访问日志的路径
- `log_format`:指定访问日志的格式
(3)server block
`server block`位于`http block`,用于配置虚拟主机,一个Nginx服务可包含多个虚拟主机,每个虚拟主机都可以独立的提供服务,因此借助Nginx,我们可以在一台服务器部署多个独立的网站,每个虚拟主机使用一个`server block`进行配置,配置的内容包括
- `listen`:虚拟主机监听的端口号。
- `server_name`:指定虚拟主机的域名或者IP。
(4)location block
`location block`位于`server block`,用于配置请求的处理逻辑,一个`server block`中可以包含多个`location block`,例如:
server {
listen 80;
server_name www.atguigu.com;
location /index {
root /var/www/html;
}
location /api {
proxy_pass http://backend-api;
}
}
3,实践案例hello-nginx
(1)简单案例配置:
上传静态资源到server02服务器,注意解压一般放在/usr/share/nginx/html中:unzip hello-nginx.zip -d /usr/share/nginx/html,最终路径如下:
/usr
└── share
└── nginx
└── html
└── hello-nginx
├── css
│ └── style.css
├── images
│ └── img.png
└── index.html
配置Nginx虚拟主机
虚拟主机的配置应位于`/etc/nginx/nginx.conf`的**server block**中,
由于`/etc/nginx/nginx.conf`的**http bolck**中引入了`/etc/nginx/conf.d/*.conf`,
所以虚拟主机在`/etc/nginx/conf.d/`目录下的任意`.conf`文件配置即可。
创建/etc/nginx/conf.d/hello-nginx.conf(一般带上资源名),添加location:
server {
listen 8080;
server_name 192.168.10.102;
location /hello-nginx {
root /usr/share/nginx/html;
index index.html;
}
}
根据请求,如:http://192.158.10.102:8080/hello-nginx就会定位到这个location中,然后根据root路径找到hello-nginx目录,再根据index找到index。html文件,最后返回
注意:/hello-nginx代表的是所有以此为前缀的请求
(2)反向代理
依旧先创建虚拟主机-->创建/etc/nginx/conf.d/hello-proxy.conf文件,然后添加server block:
server{
listen 9090;
server_name 192.168....;
location{
//你想要转发的服务器域名
proxy_pass http://www.baidu.com
}
}
4,项目部署
(1)顶级模块lease的maven上执行clean+package打包操作
毫不意外,出现了大量问题(os:已经习惯了)
1,Generating equals/hashCode implementation but without a call to superclass, even though this class does not extend java.lang.Object. If this is intentional, add '@EqualsAndHashCode(callSuper=false)' to your type.
这个算不上问题,就是一警告,不过解决方法依旧记录一下:再src/main/java下新建lombok.config配置文件,然后添加:
config.stopBubbling=true
lombok.equalsAndHashCode.callSuper=call
当我们给一个继承了父类的子类上使用@Data @ToString @EqualsAndHashCode 注解时,IDE 会警告上述问题,意思是,该注解在实现 ToString EqualsAndHashCode 方法时,不会考虑父类的属性
2,“程序包xxx不存在,找不到符号”(用这个插件打包的Jar包可以直接运行,但是不可依赖!)
真正的问题来了,其实最主要的问题是,我在最顶级的模块lease的pom.xml文件中添加了打包插件,因为common模块和model模块依赖于lease所以也会传递到这个插件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
但是!!!:在需要打成可执行jar的地方添加就好了,如果是被依赖的,就不要添加此插件,也就是common和model模块,所以删除lease中的这个插件,然后单独在web模块的pom文件里添加就行,web下的web-admin,web-app都需要打包为可执行jar包
3,“测试类报错”
这个解决简单,直接删掉测试类即可
5,下载jdk21,小tips:centOS内置了jdk1.8
下载jdk安装包,然后解压到/opt路径下,/opt路径一般用来存放用户自己的下载内容,上传项目jar包到/opt/lease/路径下
6,启动项目,集成systemmd
后续启动可以直接使用systemctl start lease-app/admin命令启动
/opt/jdk-21.0.7/bin/java -jar /opt/lease/web-admin-0.0.1-SNAPSHOT.jar
/opt/jdk-21.0.7/bin/java -jar /opt/lease/web-app-0.0.1-SNAPSHOT.jar
#创建`lease-app.service`文件
vim /etc/systemd/system/lease-app.service
#内容如下
[Unit]
Description=lease-app
After=syslog.target
#/opt/lease/app.log记录日志
[Service]
User=root
ExecStart=/opt/jdk-21.0.7/bin/java -jar /opt/lease/web-app-0.0.1-SNAPSHOT.jar 1>/opt/lease/app.log 2>&1
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
7,结合nginx启动项目

1,打包前端静态资源npm run build生成dist文件,压缩上传到虚拟机,解压路径一般是在/usr/share/nginx/html+app/admin
前端.env.production文件环境变量不能修改,前端代码会全局加载这个变量,修改会导致后续通过域名访问访问不到静态资源的情况:始终定位到default.conf默认配置文件的location中
VITE_APP_BASE_URL='http://admin.lease.atguigu.com'
2,编写配置文件,然后重新加载systemctl reload nginx:
server {
listen 80;//端口,默认80
server_name lease.atguigu.com;//域名
//定位
location / {
root /usr/share/nginx/html/app;//静态资源路径
index index.html;//index文件
}
//处理各种调用后端接口数据
location /app {
proxy_pass http://虚拟IP:8081;
}
}
3,域名映射(模拟)
修改C:\Windows\System32\drivers\etc\hosts文件,使lease.atguigu.com和admin.lease.atguigu.com域名指向虚拟IP:
192.168.xxx.xxx lease.atguigu.com admin.lease.atguigu.com
最后就可以直接通过http://lease.atguigu.com访问项目
1976

被折叠的 条评论
为什么被折叠?



