目录
1、nginx介绍
1、简介
2、反向代理
3、负载均衡
2、安装nginx
1、下载nginx
2、解压nginx安装包
3、安装nginx编辑
1、执行configure命令
2、执行make命令
4、启动nginx
1、查找nginx位置并启动
2、常用命令
3、反向代理
1、介绍反向代理配置
1、基础配置
2、详细介绍location指令
2、反向代理配置案例二则
4、负载均衡
1、配置hello集群
2、nginx负载均衡
1、nginx介绍
1、简介
【Nginx是个好东西,没有它的话,这前端开发完了后(非vue开发),还得找一个web容器 大概率是tomcat。咱就需要配置tomcat ,tomcat的配置是比较麻烦的, nginx的配置就简单了好多。】
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器 ,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,公开版本1.19.6发布于2020年12月15日。 其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2022年01月25日,nginx 1.21.6发布。 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。
俄罗斯:俄罗斯有名的是数学家,黑客(俄罗斯,伊朗,朝鲜)
web服务器:
2、反向代理
【你访问A,然后我帮你把你的请求给你转到B。 你访问百度,然后我帮你把地址转到谷歌上。----感觉有点多此一举哈,为啥不直接访问谷歌,要通过反向代理来做 ?】
【比如我可以通过百度去搜索谷歌,还可以通过360去搜索谷歌,也可以通过搜狗搜索谷歌。这样用户的入口就变得多了,虽然目标服务器是同一个,但是都在消耗各自代理服务器的资源。就是nginx自己的资源。而且这样做还有个好处,我在这有一个统一的入口,这个入口是通过nginx进的,后面真正的资源服务器用户是不知道的,这样就比较安全。(减少黑客的直接攻击)】
反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。
3、负载均衡
(Nginx能做负载均衡,但是并不是主力军。)
【负载:就是这个服务器压力有多大;
均衡:就是把这份压力平坦下去,把它分给多个服务器,这样原本是给一台服务器上的压力,现在分给多台服务器了】
负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。 负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
2、安装nginx
基于centOS 7.x安装。
其实也可以安装在docker上,但是docker有个天然的劣势就是对于文件的管理不是很优秀,而nginx刚好需要做文件替换,文件下载这些操作;第二个原因就是装nginx这台服务器,基本上只安装nginx,不安装别的软件,所以没有必要安装docker。
1、下载nginx
http://nginx.org/en/download.html
2、解压nginx安装包
上传文件到 /usr/local/nginx 里,然后解压。
要进入到当前目录下
tar -zxvf nginx-1.22.1.tar.gz
3、安装nginx
1、执行configure命令
./configure
这个命令是用来检查本地环境是否可以安装nginx,缺少哪些环境会给出提示。并生成MakeFile文件,用于安装。
执行后多会输出没有C编译环境,安装一下C环境即可。
C compiler cc is not found
【解决办法,下面这些命令一个一个执行可以,一堆一起执行也可以】
yum install -y openssl*
yum install -y ncurses-devel
yum install -y make zlib-devel gcc c++ libtool openssl openssl-devel
./configure
==上面安装命令都安装完了后,在执行一下 ./configure,就跟刚才不一样了。
2、执行make命令
执行完上面的三个命令之后,查看一下是否生成了MakeFile文件,生成后执行如下编译安装命令:
make install
make install命令执行后开始安装nginx,输出如下图代表安装完成。
4、启动nginx
1、查找nginx位置并启动
whereis nginx
conf:配置文件
html:页面文件
logs:日志文件
sbin:可执行文件
2、常用命令
# 启动nginx
./nginx# 停止nginx
./nginx -s stop# 重新加载配置文件
./nginx -s reload# 查看nginx进程
ps aux|grep nginx
【启动nginx:】
【查看nginx进程:】
启动成功后,在宿主机访问nginx,nginx的端口号默认配置是80。
3、反向代理
作用:
-
通过反向代理可以增加安全性,减少后台服务被攻击的隐患
-
通过缓存的方式可以增加静态资源响应效率
-
通过反向代理实现负载均衡
1、介绍反向代理配置
配置文件在conf目录下的nginx.config文件中。
1、基础配置
介绍nginx.conf配置文件内容:
worker_processes 1;
events {
worker_connections 1024;
}http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;server { #--只需要关注server的配置--
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
} #--只需要关注server的配置--
}
listen:监听哪个端口
server_name:给这个服务取一个名字
location:反向代理的配置
error_page:错页面
root:静态资源的根目录
index:欢迎页,默认的请求页面
2、详细介绍location指令
做反向代理映射地址的
location [ = | ~ | ~* ] uri { }
=:精确匹配,请求地址必须和uri相同才会进入这个location
~:模糊匹配,只要符合uri规则就会进入了这个location
~*:不区分大小写的模糊匹配
2、反向代理配置案例二则
【实现nginx代理百度】
server {listen 80;server_name localhost;location / {proxy_pass http://www.baidu.com;}}
修改完配置文件后,要重新加载一下配置文件
# 重新加载配置文件
./nginx -s reload
【结果是:访问nginx,显示的是百度。】
【实现nginx代理tomcat】
worker_processes 1;
events {
worker_connections 1024;
}http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;server {
listen 80;
server_name localhost;
location / {
proxy_pass http://192.168.1.173:8080;
}
}
}
proxy_pass:反向代理的地址。这个配置的地址最后可以用“/”结尾的,也可以不用“/”结尾,有很大区别。
区别:
有正斜杠代理时会代理到根目录,举例说明:
创建一个html页面:
粘贴到tomcat/webapps/abc文件夹里去:
访问一下123.html页面。
修改一下配置文件:
worker_processes 1;
events {
worker_connections 1024;
}http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;server {
listen 80;
server_name localhost;
location / { ##之前配置文件里有的
root html;
index index.html;
}
location /abc {##意思是说,只有访问/abc的时候,再给我代理到tomcat上;没访问/abc,访问别的 别给我代理tomcat。
proxy_pass http://192.168.1.173:8080/;
}
}
}
修改完配置文件后,要重新加载一下配置文件
./nginx -s reload
请求地址:http://192.168.1.173/abc/123.html
没有正斜杠时,代理后的地址是http://192.168.1.173:8080/abc/123.html
proxy_pass http://192.168.1.173:8080;
有正斜杠时,代理后的地址是http://192.168.1.173//123.html,由此会导致404问题
proxy_pass http://192.168.1.173:8080/;
在实际工作中,两种都有可能用到,注意区别。
4、负载均衡
1、配置hello集群
创建一个【java项目】的springboot工程:(多个项目)
构建集群
清空下载
提取出来保存cmd启动
项目进行启动
进入存储当前项目jar包下
浏览器输入localhost:项目端口号/一级路由/二级路由
将上面的jar包项目拉取到Linux里
Linux里创建目录
进入当前目录下
2、nginx负载均衡
修改/usr/local/nginx/conf下ngint.conf文件
upstream:负载均衡配置,内部可以配多个server
proxy_pass:代理到hw这个负载均衡配置
修改完配置文件后,要重新加载一下配置文件
# 重新加载配置文件
./nginx -s reload
nginx的负载均衡支持多种模式,最常见的是以下三种:
-
轮询:平均分配,逐一做负载,是默认的方式
-
权重:可以设置一个权重值,让某一个服务被分配做负载的比例增大
【访问的时候,显示88 端口1次,99端口两次】(不够智能)
upstream hw {
server 192.168.1.173:88 weight=1;
server 192.168.1.173:99 weight=2;
}
ip_hash:对发送请求过来的ip地址进行hash计算,得到值会分配给upstream中配置的服务,且相同的ip访问计算的结果相同,就会被分配到同一个服务中。【这样做的好处是,实现session共享的问题,可以保证同一个ip地址不会被负载均衡到其他项目里,而导致拿不到session。】
upstream hw {
ip_hash;
server 192.168.1.173:88;
server 192.168.1.173:99;
}
同一个IP,无论访问多少次,都是显示同一个内容。(不够智能)