Nginx

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
原文地址:https://www.cnblogs.com/persisit/p/13867787.html