目录
1. 简介
什么是 Nginx
Nginx 的主要功能
Nginx 的应用场景
2. 下载 Nginx
官方网站介绍
不同版本的选择(稳定版、主线版等)
3. 安装 Nginx
源码编译安装(推荐)
使用包管理器安装(如 apt, yum)
从源代码编译安装
在 Windows 系统上的安装
Docker安装Nginx(推荐)
4. Nginx 配置文件结构
配置文件位置
nginx.conf文件结构
5. 启动与停止 Nginx
启动 Nginx
停止 Nginx
重新加载配置
配置环境变量(可选)
6. 基本使用示例
配置一个简单的静态网站
配置反向代理
配置负载均衡
7. 监控与日志
访问日志与错误日志
8. 安全配置(重要)
配置 HTTPS
9. 资源与进一步学习
官方文档链接
进一步学习
推荐在线课程
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 nginxcd /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-releasesudo 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/confmkdir -p /usr/local/nginx/logmkdir -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