1. 简介
什么是 Nginx
Nginx(发音为“engine-x”)是一个高性能的 Web 服务器和反向代理服务器。它不仅能够处理静态文件(如 HTML、图片等),还可以作为负载均衡器和 HTTP 缓存,帮助分担后端服务器的压力。在 Java 开发中,Nginx 常用作将用户请求转发到 Spring Boot 或其他 Java 应用的中间层。
Nginx 的主要功能
- 静态文件服务:Nginx 能高效地提供静态资源,如 HTML、CSS 和 JavaScript 文件,速度非常快,适合直接向用户展示网页。
- 反向代理:当用户请求到达 Nginx 时,它可以将请求转发到后端的 Java 应用(如 Spring Boot),然后将响应返回给用户。这有助于隐藏后端服务的细节,提高安全性。
- 负载均衡:Nginx 可以将用户请求分发到多台后端服务器上,确保流量均匀分配,提高应用的可用性和性能。
- HTTPS 支持:通过配置 SSL/TLS,Nginx 可以安全地处理加密请求,保护用户的数据传输。
Nginx 的应用场景
- 静态网站托管:对于小型项目或前端资源,Nginx 是一个理想的选择,因为它能够快速交付静态文件。
- API 网关:在微服务架构中,Nginx 可以作为 API 网关,将来自用户的请求分发到不同的服务(如 Java 后端服务),实现更好的管理和监控。
- 负载均衡:在高并发场景下,Nginx 可用作负载均衡器,将请求分散到多台 Java 应用服务器上,提高系统的响应速度和可靠性。
- 安全防护:通过配置,Nginx 可以防止常见的网络攻击(如 DDoS),保护后端 Java 应用的安全性。
2. 下载 Nginx
官方网站介绍
Nginx官方网站:nginx news
不同版本的选择(稳定版、主线版等)
1、在官网选择download(下载)
2、选择安装的版本(一般选择稳定版本 Linux版本)
3. 安装 Nginx
源码编译安装(推荐)
1、安装依赖包
yum -y install gcc pcre-devel zlib-devel openssl openssl-devel
- gcc:C 编译器,用于将 Nginx 的源代码编译成可执行文件。
- pcre-devel:用于支持正则表达式功能,Nginx 在处理 URL 重写和匹配时需要这个库。
- zlib-devel:用于数据压缩,Nginx 支持 Gzip 压缩功能以提高传输效率。
- openssl 和 openssl-devel:提供 SSL/TLS 加密功能,允许 Nginx 支持安全的 HTTPS 连接。
2、下载安装包并上传到服务器并解压
下载稳定版本Linux版
进入指定目录 创建Nginx安装目录
cd /usr/local
创建Nginx安装目录 并进入安装目录
mkdir nginx
cd /nginx
3、上传Nginx安装包并且解压
tar -zxvf nginx-1.26.2.tar.gz
(解压Nginx安装包)
查看解压出来的安装包
ls
3、指定Nginx安装目录
./configure --prefix=/usr/local/nginx
(该命令用于指定 nginx 的安装目录 告诉系统Nginx安装在这里)
踩坑(一定要进入解压的安装包再去指定安装目录 否则会报错没有那个文件或目录)
4、编译并执行安装
make && make install
(两个命令一起执行,表示先 make 编译后,再通过 install 安装)
使用包管理器安装(如 apt, yum)
在 CentOS 上安装 Nginx,你可以使用以下命令:
sudo yum install epel-release
sudo yum install nginx
安装完成后,使用 sudo systemctl start nginx
启动 Nginx,并用 sudo systemctl enable nginx
设置为开机自启。想深入了解 Nginx 的配置吗?
在 Windows 系统上的安装
conf:存在Nginx配置文件的目录
docs:存放Nginx文档的目录
html:存放静态html文件的目录
logs:存放Nginx日志的目录
temp:存放临时文件的目录
双击nginx目录下的nginx.exe应用程序,一般情况下,会有一个黑色的弹窗一闪而过,这就代表启
动成功了。
只不过,我这里是弹出来一个黑色窗口,问题不大!
然后在浏览器地址栏输入 localhost:80 ,然后再回车(80端口号可以省略,就算输入了也不显示)
如果能看到这个页面,那么nginx启动就成功了。
Docker安装Nginx(推荐)
1、下载镜像
docker pull nginx
2、创建nginx配置文件
启动容器之前要创建nginx配置文件,因为nginx容器只有/etc/nginx目录,没有nginx.conf文件,如
果服务器和容器都没有nginx.conf文件,执行启动命令docke会将nginx.conf作为目录创建,这并不
是我们想要的结果
#创建挂载目录
mkdir -p /usr/local/nginx/conf
mkdir -p /usr/local/nginx/log
mkdir -p /usr/local/nginx/html
容器中的nginx.conf文件和conf.d文件夹复制到宿主机
# 生成容器
docker run --name nginx -p 9001:80 -d nginx
# 将容器nginx.conf文件复制到宿主机
docker cp nginx:/etc/nginx/nginx.conf /usr/local/nginx/conf/nginx.conf
# 将容器conf.d文件夹下内容复制到宿主机
docker cp nginx:/etc/nginx/conf.d /usr/local/nginx/conf/conf.d
# 将容器中的html文件夹复制到宿主机
docker cp nginx:/usr/share/nginx/html /usr/local/nginx/
复制完成后删除容器
docker stop nginx
docker rm nginx
3、创建nginx容器运行
docker run \
-p 9002:80 \
--name nginx \
-v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/local/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /usr/local/nginx/log:/var/log/nginx \
-v /usr/local/nginx/html:/usr/share/nginx/html \
-d nginx:latest
4. Nginx 配置文件结构
配置文件位置
踩坑(刚刚指定了安装目录为/usr/local/nginx)编译安装完后就会安装到这里 不用再进到安装包里 我说进去为什么没有sbin 进去的是安装包
- conf 目录 : 存放配置文件
- html 目录 : 存放静态资源文件
- logs 目录 : 存放运行日志文件
- sbin 目录 : 存放脚本文件
重点目录/文件:
- conf/nginx.conf nginx配置文件
- html 存放静态文件(html、CSS、Js等)
- logs 日志目录,存放日志文件
- sbin/nginx 二进制文件,用于启动、停止Nginx服务
nginx.conf文件结构
在开发中 我们经常需要在conf目录修改nginx.conf文件
修改完后进入到sbin目录执行./nginx -t 检查配置是否正确(如果不正确 检查配置)
如果配置没有问题执行./nginx -s reload命令 重新加载配置文件(无需重启)
5. 启动与停止 Nginx
启动 Nginx
对于Nginx命令 需要进入到sbin目录执行
./nginx
停止 Nginx
./nginx -s stop
重新加载配置
在修改完
nginx.conf
配置文件后,如果直接重启 Nginx 可能会影响线上用户。这时,可以使用重新加载配置的命令,无需完全重启 Nginx。
在重新加载配置之前,建议使用
./nginx -t
命令检查配置文件是否有误,然后再进行配置的重新加载。这样可以确保新的配置正确无误,避免潜在问题。
配置环境变量(可选)
在执行 Nginx 命令时,虽然需要进入到
sbin
目录,但我们可以通过配置环境变量,使得在任何目
录都能方便地执行 Nginx 命令。这就像安装 JDK 后配置环境变量一样,允许你在命令行中随时执
行
java -version
等命令。
+++ 回到根目录 +++
cd /
+++ 编辑系统配置文件 +++
vim /etc/profile
+++ 配置环境变量 (如下图)+++
PATH=/usr/local/nginx/sbin:$PATH
+++ 刷新配置文件 +++
source /etc/profile
6. 基本使用示例
配置一个简单的静态网站
1、准备一个静态网页 上传到指定位置
2、配置nginx.conf文件
server
块:定义一个虚拟主机,处理特定域名和端口的请求。location
块:处理具体的 URL 路径请求。root
:指定根目录,路径直接拼接。alias
:指定别名,重写请求路径,不改变原始 URI。
3、访问 ip + /test
配置反向代理
实现效果:使用nginx反向代理,访问 ip 直接跳转到ip:8080(tomcat)
1、上传tomcat到服务器 启动tomcat(下载tomcat 上传指定位置并且解压 在bin目录执行./startup.sh启动tomcat 我这里给tomcat文件夹改了个名字 方便后面进行负载均衡)
2、配置nginx.conf文件
proxy_pass
是 Nginx 中用于反向代理的指令,简单来说,它的作用是将客户端请求转发到另一个服务器(通常是后端应用服务器)。
踩坑 如果location 有/ 并且proxy_pass后面没有/ edu路径就会保留
配置负载均衡
Nginx 的负载均衡功能可以把用户的请求分配到多台服务器上,帮助处理更多的流量。这样可以提
高网站的性能和可靠性,确保如果一台服务器出现问题,其他服务器还能继续工作。通过不同的分
配策略(比如轮询或最少连接),Nginx 能够优化资源使用,确保每台服务器的负载保持均衡。
要配置Nginx负载均衡,你可以在配置文件中使用
upstream
指令定义服务器组,然后在
server
块中
使用
proxy_pass
转发请求。举个例子:
upstream myapp {
server backend1.example.com;
server backend2.example.com;
}
server {
location / {
proxy_pass http://myapp;
}
}
Nginx支持多种负载均衡算法,包括:
- 轮询(round robin):默认算法,依次将请求分发给每个服务器。
- 最少连接(least connections):将请求发送给当前连接数最少的服务器,适合连接时间不均的场景。
- IP哈希(ip hash):根据请求IP地址分配服务器,确保同一IP的请求始终到同一服务器,适合会话保持。
- 权重(weighted):给不同服务器分配权重,按权重比例分配请求,适合性能不均的服务器。
7. 监控与日志
访问日志与错误日志
Nginx的日志主要分为两种:
- 访问日志(access log):记录每个请求的信息,比如客户端IP、请求时间、请求方法、URL、响应状态码、响应时间等。这有助于分析流量和监控性能。
- 错误日志(error log):记录Nginx运行中的错误信息,比如请求处理失败、配置问题等。可以帮助排查问题和调试。
8. 安全配置(重要)
配置 HTTPS
阿里云官方配置链接:Nginx或Tengine服务器配置SSL证书_数字证书管理服务(原SSL证书)(SSL Certificate)-阿里云帮助中心
1、nginx配置HTTPS需要SSL证书 而SSL证书需要到CA中心申请 这里我们去阿里云进去一个申请
2、创建证书 输入对应的域名
3、申请证书 (在域名里面配置DNS解析 我这里他是自动配置上了)
4、下载对应的证书文件
4、nginx.conf配置
打开nginx.conf,搜索ssl,如果还没配置ssl,可看下面代码配置一下
ssl的server :将证书文件解压后放在配置的路径上,路径最后的证书名称要修改成对应的证书名称。(路径配的是windows的,Linux自行修改一下)
9. 资源与进一步学习
官方文档链接
Nginx中文网:nginx 中文网 官网
进一步学习
博客主页右下角有我联系方式 学习交流 资源 简历指导
推荐在线课程
【【狂神说】Nginx最新教程通俗易懂,40分钟搞定!】 https://www.bilibili.com/video/BV1F5411J7vK/?share_source=copy_web&vd_source=42558fbe7fb2269474043c72b7f3c886
【尚硅谷Nginx教程(亿级流量nginx架构设计)】 https://www.bilibili.com/video/BV1yS4y1N76R/?share_source=copy_web&vd_source=42558fbe7fb2269474043c72b7f3c886
【黑马程序员Nginx教程,Java进阶从0到1学会Nginx分布式框架】 https://www.bilibili.com/video/BV1ov41187bq/?share_source=copy_web&vd_source=42558fbe7fb2269474043c72b7f3c886
版权归原作者 陶然同学 所有, 如有侵权,请联系我们删除。