Nginx
作者:
最大50000+的连接数,热部署,在线升级
# 作用
1. 反向代理
2. 负载均衡
3. 动静分离
代理
正向代理:在浏览器配置代理服务器的,请求目标服务器,
反向代理:客户端对代理服务器无感知,因为客户端不需要任何的配置就可以访问,我们只需要把请求发送到反向代理服务器,由反向代理服务器选择目标服务器获取数据后,再返回给客户端,此时代理服务器和目标服务器可以看成是统一一个服务器,对外只是暴露代理服务器地址,隐藏了真实服务器的IP地址
安装Nginx
# 1. pcre
wget https://netix.dl.sourceforge.net/project/pcre/pcre/8.40/pcre-8.40.tar.gz
cd /usr/src
mv ~/pcre-8.40.tar.gz .
tar -zxf pcre-8.40.tar.gz
cd pcre-8,40
./configue # configure: error: no acceptable C compiler found in $PATH \ yum install gcc gcc-c++
make && make install
pcre-config --version # 安装之后,查看pcre的版本号
# 2. zlib openssl
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
# 3. nginx
wget http://nginx.org/download/nginx-1.18.0.tar.gz
cd /usr/src
mv ~/nginx-1.18.0.tar.gz .
tar -zxf nginx-1.18.0.tar.gz
cd nginx-1.18.0
./configure
make && make install
# 测试开启nginx 服务
cd /usr/local/nginx/sbin
./nginx
# 防火墙
firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
# 添加开放端口,并重新加载防火墙
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --reload # ports: 80/tcp
Nginx常用命令
cd /usr/local/nginx/sbin
# 查看nginx版本号
[root@mix sbin]# ./nginx -v
nginx version: nginx/1.18.0
[root@mix sbin]# ./nginx -V
nginx version: nginx/1.18.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)
configure arguments:
# 关闭nginx服务
./nginx -s stop
./nginx -s quit
# 启动nginx
./nginx
# 重新加载
./nginx -s reload
Nginx 配置文件
# 位置
/usr/local/nginx/conf/
# 查看 nginx.conf
三部分
1. 全局块
worker_processes 1;
2. events块
worker_connections 1024;
3. http块
Nginx 配置实例
实例1:反向代理
1. 实现效果
1) 打开浏览器,在浏览器地址栏输入www.1123.com,跳转到linux系统的tomcat主页
# 准备工作
- download tomcat wget https://mirror.bit.edu.cn/apache/tomcat/tomcat-9/v9.0.39/bin/apache-tomcat-9.0.39.tar.gz
- mv apache-tomcat-9.0.39.tar.gz /usr/src
- cd /usr/src
- tar -zxf apache-tomcat-9.0.39.tar.gz
- cd apache-tomcat-9.0.39
- cd bin
- ./startup.sh
[root@mix bin]# ./startup.sh
Using CATALINA_BASE: /usr/src/apache-tomcat-9.0.39
Using CATALINA_HOME: /usr/src/apache-tomcat-9.0.39
Using CATALINA_TMPDIR: /usr/src/apache-tomcat-9.0.39/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/src/apache-tomcat-9.0.39/bin/bootstrap.jar:/usr/src/apache- tomcat-9.0.39/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
# tomcat默认开启8080端口
# 开放防火墙8080
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-all
2) 修改C:WindowsSystem32driversetchost
添加 192.168.122.164 www.123.com
3) 修改 nginx.conf 文件
server {
listen 80;
server_name 192.168.122.164; ####
location / {
proxy_pass http://127.0.0.1:8080; ####
root html;
index index.html index.htm;
}
4) 思考,目前我们nginx和tomcat在同一台服务器上,我们通过nginx反向代理了tomcat,那么现在我们要访问tomcat是通过nginx服务器了,那之前直接访问tomcat开启的8080端口就可以防火墙关闭了
2 . 实现效果
1) 使用nginx做反向代理,根据访问路径不同跳转到不同的端口服务中
nginx监听9001
访问http://127.0.0.1:9001/edu/ 直接跳转到127.0.0.1:8080
访问http://127.0.0.1:9001/vod/ 直接跳转到127.0.0.1:8081
2) 准备工作,两台tomcat 8080 和 8081
3)
location 中路径匹配指令说明
1. ~ 表示url包含正则表达式,并且区分大小写
2. ~* 表示url包含正则表达式,不区分大小写
3. ^~ 表示url不包含正则表达式, nginx服务器找到与url匹配度最高的lcoation执行处理请求
4. = 表示要求请求的字符串与url严格匹配一模一样
# 注意 当url中包含正则表达式时,一定要使用 ~ 或者 ~*
实例2:负载均衡 load balance
1. 实现方式
upstream myserver {
server 192.168.122.164:8080 ;
server 192.168.122.164:8081;
}
server{
location / {
proxy_pass http://myserver;
}
}
分配策略:
1. 轮训 round rode 每个请求按照时间顺序逐一分配,当某一服务器宕机,将其剔除
2. 权重 weight 默认是1, 权重越高分到的请求越多
3. ip_hash 直接在upstream模块中 添加ip_hash 每个访客固定访问一个后端服务器 解决session共享的问题
4. fair 按照服务器的响应时间分配,响应时间越短那分配请求越多
Nginx动静分离
# 如查询数据库,动态请求
# 如查询主页,图片,html 静态请求
- 把纯粹的静态资源放在单独的域名下,单独的服务器,目前主流的推荐方案
- 动态和静态文件混合放,只是在nginx服务器上分开
location 指定不同的后缀名实现不同的转发,通过expire设置浏览器缓存的时间,减少与服务器直接的请求和浏览
如3d 表示在3天内访问这个url 发送一个请求,比对服务器该文件最后更新的时间是否变化,如果没有变化从服务器抓取,返回装代码304,如果变化了, 那么从服务器重新下载,返回状态码200
测试准备
1)在linux系统中准备静态资源,html, css ,
location /www/ {
root /data/;
}
location /image/ {
root /data/;
autoindex on; # 可以列出文件夹中文件的目录
}
Nginx 高可用
# 问题
# 若nginx服务器出现宕机,那请求就处理不了了
# 这就引入高可用
配多台nginx 主备服务器切换 正常使用主nginx 出现问题时使用备nginx
keeplived
虚拟ip
# 准备工作
1)两台虚拟机环境
www.123.com
www.456.com
2) keepalived
两台机器上分别安装 yum -y install keepalived
检查 rpm -qc keepalived
检查配置文件路径 rpm -qc keepalived
检查都安装哪里文件 rpm -ql keepalived
配置文件修改:
/etc/keepalived/keepalived.conf
Keepalived
# vrrp : virtial router redundant protocol