Nginx介绍
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
内存: 不到2M
并发能力强: 3-5万次/秒 理想环境下 /tomcat服务器 150-220/秒
Nginx下载
Nginx安装
- Nginx安装路径不要放到C盘 要求路径中不能有中文+空格------职业操作
- 要求以超级管理员的权限 启动nginx服务器. 动态获取权限.
- 检查任务管理器 查看是否有nginx服务项
1.224k的是守护进程,1.508k的是主进程
- 浏览器访问nginx服务器.
Nginx安装中遇到的问题
- nginx不能正常启动.
执行了nginx启动命令之后,在任务管理中 详细信息中检查是否有服务. 如果没有则表示nginx启动异常.
- 一般检查80端口是否被占用
输入命令:netstat -ano,列出所有端口的情况。在列表中我们观察被占用的端口
*查看被占用端口对应的PID,输入命令:netstat -aon|findstr "80",回车,记下PID
(可不要这个步骤)继续输入tasklist|findstr "5544",回车,查看是哪个进程或者程序占用了5544PID
*打开任务管理器结束PID:5544的进程或程序
Nginx命令
关于Nginx进程项说明
Nginx每次启动时会生成2个进程项:
- 主进程: 主要提供nginx反向代理服务的.
- 守护进程 防止主进程意外关闭的.
如果需要关闭nginx,则应该先关闭守护进程,再关闭主进程.
基本命令
前提条件: 要求在nginx的根目录中执行cmd命令.
规范: 启动nginx之后,执行nginx的重启指令,检查是否有异常.
启动nginx start nginx 即使启动不成功,也不会报错!!!!
重启nginx nginx -s reload 如果配置文件编辑异常,则会显示报错信息
停止nginx nginx -s stop
反向代理入门案例
http {#使用的什么协议
server {#反向代理的具体服务信息
listen 80; # 监听端口号
server_name localhost; # 监听的服务名称
#反向代理的配置,获取用户指定的请求之后,将请求转向到什么位置(路径转向)
# / 请求访问的根目录
location / {
# root关键字 反向代理文件目录
#将localhost:80 映射到目录D:/java/LX中,
#访问localhost:80时实际上访问的是D:/java/LX目录
root D:/java/LX;
#映射到nginx自带的html文件中
root html;
# index关键字 默认跳转页面
#输入localhost时跳转的初始页面(默认是html文件中的index.html)
index index.html index.htm;
}
}
#反向代理服务 一个服务就是一个service
#配置域名代理
server {
listen 80;
server_name www.sky.com;
location / {
#代理的是服务器地址www.sky.com访问的是localhost:8080
proxy_pass http://localhost:8080;
}
}
}
localhost的主页面
网络访问链路说明
HOSTS文件记录了本机访问的域名与IP的映射关系
编辑HOSTS文件
C:\Windows\System32\drivers\etc
利用switchHosts编辑文件
switchHosts文件方便一点不要每次都顺着路径找(所以可以不用)
127.0.0.1 www.sky.com;
- 如果没有权限,修改hosts文件权限
右键属性- - ->安全- - ->给所有权限打钩- - ->添加- - ->输入当前计算机名称
Nginx负载均衡策略
- 什么是负载均衡
准备多台tomcat服务器
规划说明
准备3台tomcat服务器,并且端口号依次为8091/8092/8093,之后完成项目Windows部署.
编辑MsgController
说明:动态获取当前服务器端口号信息
package com.sky.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MsgController {
@Value("${server.port}")
private int port;
//主要获取当前访问服务器的端口号信息!!!
@RequestMapping("/getPort")
public String getMsg() {
return "您当前访问服务器的端口号:"+port;
}
}
项目打包
注意事项:
1).按照规定修改端口号信息 8091/8092/8093
2).将项目整体打包部署.
3).打完包保存为 8091/8092/8093
项目发布
- cmd中发布 8091/8092/8093
利用命令实现项目发布: java -jar 8089.war
- 说明: 通过命令发布项目之后,浏览器访问速度较慢.(不正常)
关闭方式:
方式1: 直接关闭当前dos命令窗口
方式2: ctrl + c 方式 释放资源.
Nginx实现负载均衡
负载均衡需求说明
要求: 通过http:// www.sky.com 方式 依次访问8091/8092/8093服务器.
#配置域名代理
server {
listen 80;
server_name www.sky.com;
location / {
#代理的是服务器地址
#proxy_pass http://localhost:8091;
proxy_pass http://sky1;
#proxy_pass http://sky2;
#proxy_pass http://sky3;
}
}
1.负载均衡策略----轮询(默认)
#1.轮询策略(默认)
upstream sky1{
server localhost:8091 down; #标记宕机(down)之后就不会再访问
server localhost:8092;
server localhost:8093 backup; #备用机(backup)正常情况下不会访问,只有主机宕机或主机遇忙时才会生效
}
2.负载均衡策略----权重策略(weight)
upstream sky2{
server localhost:8091 weight=6 max_fails=1 fail_timeout=60s;
server localhost:8092 weight=3 max_fails=1 fail_timeout=60s;
server localhost:8093 weight=1 max_fails=1 fail_timeout=60s;
}
负载均衡策略—IPHASH策略
说明: 如果需要用户与后端服务器进行绑定时,可以使用IPhash策略.
案例A: 有时用户可能做登录操作,可能将用户信息保存到session对象 中,如果这时采用轮询/权重的策略,可能访问其他的业务服务器.导致用户频繁的登录.
upstream sky3{
ip_hash; #一般只做测试时用
server localhost:8091 weight=6; #宕机(down)
server localhost:8092 weight=3;
server localhost:8093 weight=3; #备用机(backup)
}
IPHASH原理:
补充知识:
1).IPHASH一般只做测试时用.
2).使用IPHASH可能造成负载不均的现象. 某些服务器负载压力过高.有宕机的风险.
3).使用IPHASH时,如果后端服务器宕机,则直接影响用户的使用.
4).工作中如果需要实现用户信息的共享,一般采用SSO的方式进行.
用户只需一次登录就可以访问所有相互信任的应用系统
属性介绍
down属性(要手动标识)
说明:如果遇到某台tomcat服务器宕机,则可以通过down属性标识故障机,则nginx永远不会主动访问故障机.
backup 属性
说明: backup的作用表示标识备用机. 一般情况下备用不工作.当遇到主机全部宕机或遇忙时,这时备用机才会生效.
设定访问超时
属性说明:
1.max_fails=1 允许访问失败的最多次数
2.fail_timeout=60s 失败的超时时间(理解为时间区间,60s内不会再次访问故障机)
当服务器宕机时,这时配置文件还没有被标识为down时.开启了高可用的机制. 只要失败的次数超过最大失败次数,则
在指定的时间周期之内,不会再次访问故障机.
关于Nginx工作原理说明
默认条件下,nginx会按照指定的负载均衡规则访问服务器。如果访问的服务器又出现了问题,那么则会访问下一台服务器。但是随着负载均衡的继续,任然访问故障机.效率低.