• Nginx 详解


    Nginx 基本概念

    Nginx 是什么?

    Nginx 是一个高性能的 HTTP 和反向代理服务器,特点是:占有内存少,并发性能强,能承受高负载的考验,可高达 50000 个并发连接数

    Nginx 可以做什么事情?

    反向代理

    正向代理指的是:在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问

    反向代理指的是:客户端请求反向代理服务器,由反向代理服务器选择目标服务器获取数据后返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器的地址,隐藏了真实服务器的 IP 地址

    负载均衡

    客户端发送多个请求到服务器,单个服务器解决不了,我们增加服务器的数量,将请求分发到各个服务器上,将负载分发到不同的服务器上,即负载均衡

    动静分离

    为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度,降低单个服务器的压力

    Nginx 安装、常用命令和配置文件

    Linux 安装 Nginx

    依赖

    #### pcre
    
    #### openssl
    
    #### openssl-devel
    
    #### zlib  
    
    #### zlib-devel
    
    #### gcc-c++
    
    #### libtool
    
    
    
    # 查看版本
    
    pcre-config --version
    
    
    

    安装 Nginx

    usr/local/nginx/sbin 下有启动脚本 
    
    ./nginx 启动
    
    
    
    
    防火墙的设置
    # 查看开放的端口号:
    firewall-cmd --list-all
    
    
    # 设置开放的端口号
    firewall-cmd --add-service=http -permanent
    
    sudo firewall-cmd --add-port=8001/tcp --permanent
    
    
    # 重启防火墙
    firewall-cmd -reload
    
    
    
    

    Nginx 常用命令

    进入 Nginx 的目录

    /usr/local/nginx/sbin
    
    
    # 查看 Nginx 版本号
    
    ./nginx -v
    
    # 启动 Nginx
    ./nginx
    
    # 关闭 Nginx
    ./nginx -s stop
    
    # 重新加载 Nginx (修改配置文件后重新加载——> Nginx 的热部署)
    ./nginx -s reload
    
    
     
    

    Nginx 配置文件

    # 路径:
    /usr/local/nginx/conf/nginx.conf
    
    # 详细信息
    
    ## 第一部分:全局块
    
    ### worker_processes 指的是 Nginx 可以处理的并发数,数字越大,可以处理的并发数越高
    
    
    ## 第二部分:events块,主要影响 Nginx 服务器与用户的网络连接
    ### worker_connections 指的是支持的可连接数,灵活配置
    
    
    ## 第三部分:http 块
    
    ### http 全局块
    #### 指的是:文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等
    
    
    
    ### server块
    #### 全局 server 块
    
    #### location 块
    
    ##### 一个 server 块中可以配置多个 location 块
    
    server {
    	listen			80;				# 监听的 80 端口
    	server_name		localhost;		# 主机名称
    
    	location {
    		
    	
    	}
    }
    
    
    
    
    
    
    

    Nginx 配置实例1:反向代理

    # 实现效果:访问 www.123.com,跳转到 tomcat 主页面
    
    # 具体实现:
    ## linux 安装 tomcat 8080端口
    
    ## 启动 Tomcat 进入 tomcat 的 bin 目录,./startup.sh 启动
    
    ## 对外开放 8080 端口
    firewall-cmd --add-port=8080/tcp ==permanent
    firewall-cmd -reload
    
    ## 更改 hosts 文件,增加域名跟 IP 的映射
    192.168.1.23	www.123.com
    
    ## Nginx 配置
    server {
    	listen		 80;
    	server_name	 192.168.1.23;
    	
    	location / {
    		proxy_pass	http://127.0.0.1:8080;
    	}
    	
    }
    
    

    Nginx 配置实例2:反向代理升级

    # 实现效果:根据访问路径跳转到不同端口的服务中
    ## 访问 http://192.168.1.23:9001/edu/ 直接跳转到 127.0.0.1:8080
    ## 访问 http://192.168.1.23:9001/vod/ 直接跳转到 127.0.0.1:8081
    
    # 具体实现:
    server {
    	listen		 9001;
    	server_name	 192.168.1.23;
    	
    	location ~ /edu/ {
    		proxy_pass	http://127.0.0.1:8080;
    	}
    	location ~ /vod/ {
    		proxy_pass	http://127.0.0.1:8081;
    	}
    }
    
    ## 对外开放 9001 8080 8081 端口
    
    ## 注意: 
    
    ### '=' 表示严格匹配;
    
    ### '~' 表示包含正则表达式,区分大小写
    
    ### '~*' 表示包含正则表达式,不区分大小写
    
    

    Nginx 配置实例2:负载均衡

    # 实现效果:浏览器输入地址:http://192.168.1.23/edu/a.html,负载均衡效果,平均分担到 8080 和 8081 端口中
    
    # 具体实现:
    
    upstream myserver {
    	server 192.168.1.23:8080;
    	server 192.168.1.23:8081;
    }
    
    server {
    	listen		 80;
    	server_name  192.168.1.23;
    	
    	location / {
    		proxy_pass http://myserver;
    	}
    
    
    # Nginx 提供了几种不同的分配方式:
    
    ## 轮询(默认)
    ### 即平均负载
    
    ## weight 加权轮询
    
    upstream myserver {
    	server 192.168.1.23:8080 weight=3;
    	server 192.168.1.23:8081 weight=1;
    }
    ### 8080 负载三次, 8081 负载一次
    
    ## ip_hash
    ### 每个请求按访问 IP 的 hash 结果分配,这样每个访客会固定访问一个后端服务器,可以解决 session 共享的问题,若是同一个 IP 访问仍会轮训
    upstream myserver {
    	ip_hash;
    	server 192.168.1.23:8080;
    	server 192.168.1.23:8081;
    }
    
    ### 加入 ip_hash 即可自动给每次请求固定访问的服务器
    
    
    ## fair(第三方)
    ### 按照后端服务器的响应时间来分配请求,响应短的优先分配
    upstream myserver {
    	server 192.168.1.23:8080;
    	server 192.168.1.23:8081;
    	fair;
    }
    
    

    Nginx 配置实例3:动静分离

    # 指的是:将动态请求跟静态请求分开,可以使用 Nginx 处理静态页面,Tomcat 处理动态页面,目的是为了请求更高效
    
    ## 动态请求指的是:比如:需要请求服务端对数据库进行增删改查,直接去 Tomcat 服务端操作
    
    ## 静态请求指的是:比如:客户端请求一个 html、css、image,直接访问借助 Nginx 部署的静态资源服务器
    
    ## 实现角度分为两种:
    
    ### 一是:纯粹把静态文件独立成单独的域名,放在独立的服务器,也是目前主流的方案;
    
    ### 二是:将动态跟静态文件混合在一起发布,通过 Nginx 来分开,通过location指定不同的后缀名实现不同的请求转发,通过 expires 参数设置,可以使浏览器缓存过期时间,减少与服务器之间的请求和流量。
    
    #### 注意:具体的 Expires 指的是:是给一个资源设定一个过期时间,也就是说无须去服务端验证,直接通过浏览器自身确定是否过期即可,鼓不会产生额外的流量,此种方法非常适合不经常变动的资源。(如经常更新的文件,不建议使用 Expires 来缓存)
    
    ##### Expires 3d 指的是 3 天之内访问这个 URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码 304, 如果修改,则直接从服务器重新下载,返回状态 200
    
    # 具体配置:
    
    server {
    	listen		  80;
    	server_name	  192.168.1.23;
    	
    	location /www/ {
    		root	  /data/;
    	}
    	
    	location /image/ {
    		root	  /data/;
    		autoindex on;		# 列出当前文件夹中的内容;
    	}
    }
    
    
    # 测试:
    
    ## http://192.168.1.23/image/o1.jpg
    
    ## http://192.168.1.23/www/a.html
    
    

    Nginx 配置高可用集群

    借助 Nginx 转发请求到服务器集群中,服务器集群中有某个服务器宕机后会有相应的补救措施,但当 Nginx 宕机后,就会导致请求不到相应的资源,此时即要配置高可用

    # 两台服务器中都要安装 Nginx 跟 Keepalived 做主备高可用
    
    # 修改 Keepalived 的配置文件:
    
    ## /etc/keepalived/keepzlived.conf
    
    ## 启动 keepalived
    
    systemctl start keepalived.service
    
    ### 主服务器中的 keepalived 配置
    
    #### 全局定义
    global_defs {
    	...
    	...
    	smtp_server            192.168.1.23
    	
    	smtp_connect_timeout   30
    	
    	router_id 			   LVS_DEVEL						# 可以写 IP (是代表唯一的值)
    }
    
    vrrp_script chk_http_port {
    	script				  "/usr/local/src/nginx_check.sh"	# 监测 Nginx 服务器是否存活的脚本路径
    	
    	interval		      2									# 监测脚本的执行间隔
    	
    	weight				  2
    }
    
    #### 虚拟 IP 的相关配置
    vrrp_instance VI_1 {
    	state  			      MASTERT						    # 主还是备
    	
    	interface             ens33							    # 网卡
    	
    	virtual_router_id     913                               # 主备机的 virtual_router_id 须相同
    	
    	priority              100                               # 主备机设置不同的优先级,主机大
    	
    	...
    	...
    	
    	virtual_ipaddress     {
    		192.168.1.26									    # 虚拟 IP 地址
    	}
    }
    
    
    
    ### 备服务器中的 keepalived 配置
    
    #### 全局定义
    global_defs {
    	...
    	...
    	smtp_server            192.168.1.24
    	
    	smtp_connect_timeout   30
    	
    	router_id 			   LVS_DEVEL(127.0.0.1)			   # 可以写 IP (是代表唯一的值)
    }
    
    #### 监测脚本配置
    vrrp_script chk_http_port {
    	script				  "/usr/local/src/nginx_check.sh"	# 监测 Nginx 服务器是否存活的脚本路径
    	
    	interval		      2									# 监测脚本的执行间隔 2 秒
    	
    	weight				  2								    # 权重
    }
    
    #### 虚拟 IP 的相关配置
    vrrp_instance VI_1 {
    	state  			      BACKUP						    # 主还是备
    	
    	interface             ens33							    # 网卡
    	
    	virtual_router_id     913                               # 主备机的 virtual_router_id 须相同
    	
    	priority              90                                # 主备机设置不同的优先级,主机大
    	
    	advert_int            1                                 # 每隔多长时间发送心跳监测 1 秒
    	
    	authentication  {
    		auth_type	PASS									# 认证方式是:密码
    		auth_pass   6666                                    # 密码是:6666
    	}
    	
    	virtual_ipaddress     {
    		192.168.1.26									    # 虚拟 IP 地址(可以绑定多个)
    	}
    }
    
    

    nginx_check.sh 监测脚本

    #!/bin/bash
    
    A=`ps -C nginx -no-header | wc -l`
    
    if [ $A -eq 0 ];then
    	/usr/lcoal/nginx/sbin/nginx
    	sleep 2
    	if [ `ps -C nginx -no-header | wc -l` -eq 0 ];then
    		killall keepalived
        fi
    fi
    
    
    
    抟扶摇而上者九万里
  • 相关阅读:
    CUBA 使用 Spring 查询接口
    Java中的数据验证
    CUBA China 最新进展
    遇见CUBA CLI
    CUBA-Platform将全面助力中国开发者
    ES6 延展操作符
    ES6 解构赋值
    Service Worker
    dom元素上添加断点(使用dom breakpoint找到修改属性的javascript代码)
    svg foreignObject的作用(文本换行,生成图片)
  • 原文地址:https://www.cnblogs.com/fengting0913/p/15724017.html
Copyright © 2020-2023  润新知