1、什么是nginx?
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。开源软件,服务器软件.能够支持高达 50,000 个并发连接数的响应。
2、如何安装nginx?
(1)安装nginx软件所需的依赖插件
yum install -y gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
(2)把我们的nginx安装包上传到linux中并解压
(3)创建一个目录作为nginx的安装目录
mkdir /usr/nginx
(4)进入nginx的解压目录
cd /usr/local/nginx-1.18.0
(5)设置nginx的安装路径为上面/usr/nginx
./configure --prefix=/usr/nginx
(6)编译--安装
make ---编译
make install ---编译并安装【执行这一条语句可以不执行上一条语句】
安装成功后可以在自己创建的/usr/nginx目录下看到安装的目录文件
conf:配置目录,其中存放的是关于nginx的配置文件;
html:存放的静态资源;
logs:存放的相关日志;
sbin:启动和关闭nginx的脚本文件;
(7)启动nginx
nginx是一个可执行的文件
./nginx 开启nginx
./nginx -s stop 关闭nginx
./nginx -s reload 重新加载配置文件---修改完配置文件后使用该命令
(8) 访问nginx服务器
nginx的端口号为80,我们访问的时候端口号可加可不加;
我们在Windows浏览器中访问虚拟机中的nginx服务器时要保证我们的虚拟机中的防火墙处于关闭状态或者放行80端口;
1、关闭防火墙
systemctl stop firewalld
systemctl disable firewalld【永久关闭防火墙,也就是在防火墙关闭之后禁用防火墙,下次开机防火墙仍处于关闭状态】
2、放行80端口
firewall-cmd --add-port=80/tcp --zone=public --permanent
重启防火墙服务
systemctl restart firewalld
查看80端口是否放行
firewall-cmd --list-port
3、nginx配置文件
nginx的配置文件在/usr/nginx/conf下
nginx.conf中nginx的最大连接数
添加一个为81端口的服务,设置进入根目录看到的页面是my/my.html
我们修改nginx的配置时,只需要修改这一部分代码即可
# nginx服务的配置
server {
# 监听的端口号
listen 80;
# 服务器的名字
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
# 进入根目录看到的首页
location / {
# 进入根目录看到的页面的所在目录
root html;
# 进入nginx的首页
index index.html index.htm;
# 真实服务器所在的ip加上真实服务器的端口号
# proxy_pass http://127.0.0.1;
}
}
4、nginx的三大核心
反向代理,负载均衡,动静分离
(1)反向代理
正向代理: 该服务器代理的为客户端,对于后面真实的服务器来说,不知道访问者的地址。比如:翻墙软件。
反向代理: 该服务器代理的为服务器端,对于客户来说不知道访问的真实服务器。
(2)使用nginx实现反向代理
实现过程:用户使用浏览器访问nginx代理服务器,再通过nginx访问内网的真实服务器;
准备一个真实项目和Tomcat服务器 并把项目部署到Tomcat.
springboot项目(内置了tomcat,启动项目即可)
(1)将我们编写的项目打包放入Linux中
将我们之前写的springboot项目打包,我们见到的包有jar包也有war包,至于打包打成那种,取决于我们pom.xml文件。
将这个文件拖入虚拟机中;
(2)启动一个Tomcat应用程序 (运行jar包或者war包)
java -jar xxxx.jar
(3)使用浏览器访问
这里需要注意的是要关闭虚拟机的防火墙或者放行8080端口
关闭防火墙
systemctl stop firewalld
放行8080端口
firewall-cmd --add-port=8080/tcp --zone=public --permanent
(4)使用nginx反向代理
配置nginx的配置文件nginx.conf,这个文件在nginx的安装目录下的conf目录下
cd /usr/nginx/conf
vi nginx.conf
server {
# 监听的端口号
listen 81;
# 服务器的名字
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
# 代理我们的服务器
location / {
# 书写方式为ip加上端口号
proxy_pass http://192.168.100.130:8080;#这里的ip为我们项目锁运行的服务器ip地址
}
}
这是我们测试的时候使用nginx所在的ip地址和nginx的端口号访问此项目;要保证我们的项目和nginx都保持在运行状态。
(4)运行war包
打包步骤和上面一样,这里写的时候不是用的springboot项目,而是SSM项目,所以打成了war包,直接放在tomcat的webapps下,启动tomcat即可。
将上面的包放入Linux中
修改nginx.conf 文件
server {
# 监听的端口号
listen 82;
# 服务器的名字
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
# 代理我们的服务器
location / {
# 书写方式为ip加上端口号
proxy_pass http://192.168.100.130:8080/phone/login.jsp;#这里的ip为我们项目锁运行的服务器ip地址
}
}
运行tomcat
cd /usr/local/tomcat9.0/bin
./startup.sh
这里我们添加了82端口,但是Linux防火墙没有放行82端口,所以我们想在Windows系统下访问的话需要放行82端口
放行82端口
firewall-cmd --add-port=82/tcp --zone=public --permanent
重启防火墙服务
systemctl restart firewalld
(3)nginx---负载均衡
我使用的是两个桥接模式的虚拟机,在之后的实际开发过程中,两个服务器运行的项目内容应该是同一个项目,但是这里为了看到nginx负载均衡的效果,分别在两个不同的服务器上运行两个不完全相同的项目来进行测试。
我们访问nginx服务器的路径和端口号,每次刷新会交替执行不同的项目,这里默认采用的负载均衡的策略为轮询策略。
负载均衡的策略
1)、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2)、权重(weight)
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
2)、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
3)、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
4)、url_hash(第三方)
权重weight
ip_hash
(4)nginx---动静分离
静态资源的统一管理。
nginx.conf文件的编辑,这个项目里用到了session,解决nginx中session丢失的问题是请求发送时携带cookie信息,具体代码如下所示。
server {
# 监听的端口号
listen 80;
# 服务器的名字
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
# 代理我们的服务器
location / {
proxy_redirect off;
# 书写方式为ip加上端口号
proxy_pass http://192.168.1.31:8080/phone/;#这里的ip为我们项目锁运行的服务器ip地址
proxy_cookie_path /phone/ /;
proxy_cookie_path /phone /;
proxy_set_header Host $host;
proxy_set_header Referer $http_referer;
proxy_set_header Cookie $http_cookie; #请求发送时携带cookie信息
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# 放行静态资源
#location ~ \.jpg|.png|.css|.js|.woff|.xml$ {
# root webapp;
#}
}
(4)nginx---高可用
准备条件:
两个nginx服务器,一个为主服务器(master),一个为备用服务器(backup)
用户访问的时候访问虚拟ip
(1)需要再每个nginx所在的主机上安装keepalived
yum install -y keepalived 安装keepalived
rpm -q -a keepalived 检查是否安装keepalived
修改keepalived的配置文件,配置文件默认在/etc/keepalived目录
将keepalived.conf文件中的内容替换
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
# 当前服务器的ip
smtp_ server 192.168.1.30
smtp_connect_timeout 30
router_id 192.168.1.30
}
# 定义检查nginx的脚本文件
vrrp_script chk_http_ port {
script "/usr/local/src/nginx_check.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
# 设置主从关系
state MASTER
#网卡接口 网卡类型
interface ens33
virtual_router_id 51
# 优先级,值越大优先级越高,master要高于backup
priority 100
advert_int 1
authentication {
auth type PASS
auth pass 1111
}
# 虚拟IP
virtual_ipaddress {
192.168.1.50
}
}
nginx_check.sh中的文件,将这个文件存放在keepalived.conf中写的路径下
/usr/local/src/nginx_check.sh
#!/bin/bash
# 检查是否开启nginx
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
# 开启nginx nginx脚本所在的路径
/usr/nginx/sbin/nginx
sleep 2
# 开启nginx失败 则执行关闭keepalived
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
# 杀死 keepalived进程
killall keepalived
fi
fi
上面使用的killall命令杀死进程,如果没有killall命令可以先安装
yum install -y psmisc 这个命令可以安装killall
两台机器都启动nginx服务,然后再启动keepalived
启动keepalived
systemctl start keepalived
nginx.conf 中的配置如下