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的并发能力在同类型的网页服务器中表现较好。
Nginx是一个中间件,多用于做反向代理和负载均衡。
先了解正向代理,我想访问其他服务器,但是我无法直接访问到,可以通过一个中间的代理服务器访问,这个过程就是正向代理。
反向代理就是正向代理反过来,别人想访问我的服务器,无法直接访问,可以通过某个技术让别人访问到我的服务器,这个技术就是反向代理。
外部请求增大会增加服务器的压力,就是增加了服务器的负载,这种情况一旦超过了服务器的负荷,就有可能出现服务器宕机的情况,直接影响到软件的运行。
负载均衡就是将服务器的压力通过设定好的算法,分配给不同的服务器,这样每个服务器的压力不会超过负荷了,保证项目高可用。
负载均衡的算法:
轮询、weight、IP hash
基于centOS 7.x安装
在 /usr/local下新建一个文件夹nginx, 在nginx文件夹下 导入
下载地址:
nginx: download
cd /usr/local/nginx
tar -zxvf nginx-1.22.1.tar.gz
进入对应目录 cd /usr/local/nginx/nginx-1.22.1
./configure
检查一下本地,并创建nginx需要的文件
编译一下 make
yum install -y openssl* yum install -y ncurses-devel yum install -y make zlib-devel gcc c++ libtool openssl openssl-devel make install
返回上层目录,查目cd录内容
whereis nginx
进入对应的目录,再进入sbin目录,执行./nginx,启动nginx
nginx默认监听了80端口,浏览器访问看一下是否启动成功
# 启动nginx ./nginx # 停止nginx ./nginx -s stop # 重新加载配置文件 ./nginx -s reload # 查看nginx进程 ps aux|grep nginx
优点:
可以起到防护作用,所有向服务器发送的请求都经过nginx做一次代理,可以减少安全隐患。
通过缓存的放回加速静态资源的请求。
可以实现负载均衡。
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 index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
http:配置的开始,不只有它一个开始,但是我们常用的,经常修改的配置都是以它开始
server:服务,是我们经常要修改的配置
linten:这个服务监听的端口
server_name:这个服务的名字,我们自定义
location:操作最多的指令,详情见3.1.2
error_page:返回状态码时的配置
当前的配置说明:
监听了80端口,访问时根据location匹配请求地址,到NGINX_HOME下的html目录下找对应的资源,如果请求的是根地址,则返回index.html,如果请求出错,返回50x.html。
描述:用于匹配URL的,一个server配置中允许有多个location,顺序匹配,=的优先级最高
语法:location [通配符] uri {
其他配置
}
location [ = | ~ | ~* ] uri { }
通配符
=:精准匹配,只有完全相同才会进入这个location,相当于Java字符串的equals方法
~:区分大小写匹配
~*:不区分大小写匹配
root:用于设置资源位置,他相对于NGINX_HOME路径,如果想用绝对路径,用/开头。接收到请求会在root配置的路径下找资源。
index:是首页配置,在访问根地址时会返回index配置的资源。
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://172.19.186.149:8080; } } }
监听了80端口,将80端口的请求发送到8080端口,简单来说就80端口代理了8080端口。
产生的效果就是原本需要访问8080才能拿到请求,现在访问80端口就可以了。
代理的ip地址可以修改,这个就实现了nginx在一台服务器,后台微服务在其他服务器,避免微服务收到攻击。
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 /jinkens { proxy_pass http://172.19.186.149:8080/; } } }
注意事项:proxy_pass注意最后是否需要加/,大多情况都需要,因为如果不加请求会这样转发:
请求地址是http://172.19.186.149/jinkens,真实的响应是:http://172.19.186.149:8080/jinkens
加了/后,真实的响应是:http://172.19.186.149:8080
root的配置也有这个要求
启动两个tspringboot镜像容器,修改端口号,用于演示集群
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://demo7/; } } upstream demo7{ server 127.0.0.1:8898; server 127.0.0.1:8998; } }
upstream :是配置负载均衡,后跟它的名字
server:负载均衡的两个服务,可以配置多个,需要几个微服务做负载均衡就配几个
location的proxy_pass配置不需要写具体的ip,写upstream的名字
负载均衡的方式有三种:轮询(默认的,不声明采用这个模式)、权重(可以根据实际情况分配权重)、ip hash(请求的ip地址做hash算法处理)