Nginx代理服务器
1.Nginx的认识
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。 50,000 个并发连接数的响应.
【注:nginx它是一个反向代理的服务器,而且占用内存小,并发能力强。默认并发2w. 】
2.使用Nginx的好处
并发量高且代理后面的服务器提高安全性
3.使用Nginx
下载Nginx包
https://nginx.org/en/download.html
【注:一定要下载linux版本】
3.1安装c语言环境
由于Nginx是由c语言开发,要想使用就必须配置C语言环境
yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
3.2 把下载的nginx放入linux系统
这里依然放入 /usr/local/app 下
解压该压缩文件
tar -zxvf nginx-1.24.0.tar.gz
3.3创建Nginx安装目录
cd 进入到 /usr 文件夹下创建 名为 Nginx的文件夹作为Nginx的安装目录
cd /usr
mkdir Nginx
3.4指定Nginx安装路径
再次进入到Nginx解压目录,也就是 /usr/local/app 下的解压后的Nginx文件
cd进入
ls查看文件
输入命令指定Nginx的安装路径
./configure --prefix=/usr/nginx
3.5编译和安装
还是在解压后的Nginx文件中进行编译安装
make install
编译并安装,成功后查看 ls /usr/Nginx
下的文件
有上面图片中的文件即安装成功
3.6Nginx中文件概述
html: 静态资源目录
logs: 日志----如果启动nginx出现错误时,会在该目录下的日志文件中显示
3.7启动与关闭Nginx
此时进入到Nginx的安装目录中的sbin目录
cd /usr/nginx/sbin
输入
./nginx
启动Nginx
查看是是否启动成功:
ps -ef | grep nginx
启动成功!
关闭和重新加载命令:
./nginx #开启Nginx
ps -ef | grep nginx #查看Nginx进程
./nginx -s stop #关闭nginx
./nginx -s reload #重新加载nginx配置文件
【注:第一次启动成功时一定不要忘了防火墙放行其端口且刷新防火墙】
【注:Nginx默认端口80】
此时,启动成功并放行80端口后,打开浏览器输入 你的虚拟机或者服务器的ip地址:80
ls查看文件找到 名为nginx.conf 的文件并打开
4.1复写server
现在我们模仿人家,自定义一个server标签
server{
listen 82;
server_name localhost;
location / {
root www;
index index.html index.htm;
}
}
更改配置文件后退出保存
刷新其文件,因为更改了配置
cd /usr/nginx/sbin
./nginx -s reload
我在 /usr/nginx/ 下新建了目录名为www,其中创建了一个index.html文件
其中index.html文件写了一句HelloWord
现在我们启动Nginx服务【注:如果没启动就启动,启动了就跳过】
./nginx
打开浏览器输入服务器或者虚拟机ip地址:82
成功!!!
5.Nginx的核心功能
【1】反向代理
【2】负载均衡
【3】动静分离
【4】nginx的高可用
6.Nginx反向代理
知识扩充:
6.1正向代理概念:
vpn服务就是正向代理,由于国内被限制禁止访问国外的一些网站,所以有的时候我们需要借助vpn来达到目的
当我们使用VPN时,我们向国外服务器发起请求,vpn会代理这些请求转发给国外的服务器,国外的服务器会把服务器返回给vpn解析后返回给我们
此时,国外的服务器并不知道vpn后的真实服务,这就是正向代理
6.2反向代理概念:
那么理解正向代理后,反向代理也就不难理解,其也就是通过Nginx代理服务器或其他代理服务器,代理一台或多个服务器接受客户端的请求,Nginx代理服务器会把这些请求分发给后面的服务器,这时,客户端并不知道代理服务器后服务器的真实ip地址,只知道是有Nginx代理的服务器
6.3使用反向代理
(1)搭建nginx服务器--5.0标题之前搭好了
【需要准备两台虚拟机或者服务器演示】
打开Idea新建springboot工程,勾选web依赖
进入后打开pom文件,更改SpringBoot版本为2.3.2
在java包下com.aaa下新建controller层 【注:我的包名是叫com.aaa】
新建HelloController类
给上@RestContortller
新写方法
@GetMapping("/hello")
pubilc String Hello(){
return "Hello~~~~~~~~~~~~";
}
且打包导出
将打包后的jar包拖入到linux系统中,我这里就直接放入/根目录中
运行项目:
java -jar 你拖入的jar包名
【注:linux环境中必须安装了jdk。】
·此时,我们到第二台虚拟机中:
在这中,也需要相应的Nginx环境配置,与第一台虚拟机一样
进入 /usr/nginx/conf 中编辑nginx.conf 文件更改配置
server{
listen 81; #【注:这里是一会要直接访问的端口】
server_name localhost;
location / {
proxy_pass http://192.168.235.135:8080;#【注:这里的ip地址需要写被代理的服务器ip,也就是运行jar包的那台服务器ip地址】
}
}
firewall-cmd --add-port=81/tcp --zone=public --permanent #【注:放开刚刚设置的81端口】
systemctl restart firewalld #【注:放开端口后刷新防火墙】
此时到浏览器上输入第二台的ip地址:81/hello
反向代理成功!!!!
7.Nginx负载均衡
随着产品生命周期的发展。达到了最顶峰,日访客流量日益增多,一台服务器已经满足不了这么大的负担,这时,Nginx提出了负载均衡,指用服务器集群【注:服务器集群指多台服务器组成的群体】来均衡负载这些向服务器发出的请求,本来由一台服务器来负担这些请求,现在由一群服务器来负担请求
这里就用三台服务器来演示:
两台服务器用来搭载软件平台,另一台服务器单独作为Nginx代理服务器
将第6标题中的jar包分别拖入到两台服务器中,这里就直接拖入到根目录下
随后在代理服务器中将两台服务器分别反向代理、负载均衡
打开/usr/local/cof/nginx.cofig配置文件
#定义被负载均衡的所有服务器地址【upstream: 定义集群信息】
upstream aaa{
server 192.168.235.135:8080;
server 192.168.235.136:8080;
}
#定义负载均衡代理端口
server {
listen 83;
server_name localhost;
location /{
proxy_pass http://aaa;
}
}
#第一台服务器反向代理
server {
listen 81;
server_name localhost;
location /{
proxy_pass http://192.168.235.135:8080;
}
}
#第二台服务器反向代理
server {
listen 82;
server_name localhost;
location /{
proxy_pass http://192.168.235.136:8080;
}
}
测试:
运行两个服务器中的jar包
java -jar jar包名称
打开浏览器访问Nginx服务器的IP地址:83/hello
发送请求,发现请求会被均摊到两台服务器中,第一发请求在第一台服务器,第二次发请求在第二台服务器中,不断以此循回
7.1负载均衡的策略:
7.2负载均衡中的权重
在这其中
#定义被负载均衡的所有服务器地址【upstream: 定义集群信息】
upstream aaa{
server 192.168.235.135:8080;
server 192.168.235.136:8080;
}
可以在各个服务器ip地址后加上权重
以人性化减轻各个服务器的负担
比如性能好的服务器就多抗一点负担请求,性能不好的服务器就少一点负担请求
例:
#定义被负载均衡的所有服务器地址【upstream: 定义集群信息】
upstream aaa{
server 192.168.235.135:8080 weight=2;
server 192.168.235.136:8080 weight=1;
}
【注:权重比值越大,承受的负担请求也就大,反之就小】
7.3负载的ip哈希算法
ip哈希策略。---nginx会根据客户的ip---进行哈希计算----根据计算的结果把请求转发给对应的真实服务器。如果客户的ip没有变化,那么它访问的真实服务器也不会发生改变。
#定义被负载均衡的所有服务器地址【upstream: 定义集群信息】
upstream aaa{
server 192.168.235.135:8080;
server 192.168.235.136:8080;
ip_hash;
}
8.Nginx动静分离
【注:把真实服务器中静态资源和动态资源分开。 把静态资源交于nginx来处理。】
【注:适合单体项目---不适合前后端完全分离的项目】
8.1操作Nginx动静分离
- 首先你需要的是一个jar包,jar中要有静态网页,这里就随便弄了几张图片进去,打包成jar包
- 准备一台服务器
- 将jar拖入到服务器中,这里就直接拖入到根目录下【注:该 jar中没有静态资源,这里将静态资源(指js、css、图片音频等)单独拎出来】
- 修改Nginx服务器中的配置文件配置, /usr/nginx/cof/nginx.config
server{
listen 81;
server_name localhost;
location / {
proxy_pass http://192.168.235.135:8080;
}
#以jpg或css或js或png结尾的资源有nginx来处理,去static目录查找对应资源名称。
location ~ \.jpg|.css|.js|.png$ {
root static;
}
}
【注:把static目录放入到nginx的目录下】
运行测试:
确实很完美
【注:高可用是指提升Nginx的可用性,例如当突然停电时或者Nginx服务器出现故障时,会有第二台Nginx服务器瞬间来代替主机,减少不必要的损失】
9.1准备
准备两台nginx服务器。
192.168.235.132[master] 192.168.235.135[backup]
首先进行安装Keepalived
yum -y install keepalived #安装keepalived
9.2修改keepalived配置文件
【注:默认Keepalived安装路径 /etc/keepalived】
9.2.1 nginx_check.sh脚本
将脚本文件放在咱们指定的目录中 /usr/local/src/
9.2.2 启动keepalived服务
systemctl start keepalived
现在人为关闭主机Nginx服务,模拟Nginx主机服务器出故障
杀掉Nginx主机服务器ip
pkill -9 nginx
或者
再次运行访问虚拟ip
发现访问的是备用Nginx服务器
成功!!!!
【注:两台Nginx服务器都要启动Keepalived 和 Nginx服务】
以上便是Nginx代理服务器中的内容,如有漏缺请在下方留言告知,我会及时补充
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异