• 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
    
  • 相关阅读:
    我开发过程中用到的工具
    我最近写的DataGrid合并/删除相同列通用函数,跟大家分享
    开源项目- Archive Explorer
    SQLite准备出3.0了!
    软件缺陷管理指南 3
    介绍一些.net好站点
    几个著名java开源缓存系统的介绍
    SQL中的Where,Group By,Order By和Having的用法/区别
    Unix/Linux中Cron的用法
    java中判断字符串是否为纯数字
  • 原文地址:https://www.cnblogs.com/persisit/p/13867787.html
Copyright © 2020-2023  润新知