一. 问题背景
最近有个小伙伴给我发私信问我,他问到了这样一个问题:“Nginx是什么,以及该如何使用”? 这个问题说简单也简单,说复杂其实也还好,但要想完全学会,那就得对原理有深刻的理解,并要熟练使用了。接下来,我会从以下几个方面带领大家深刻学习Nginx,请大家跟着波哥来具体操作一下吧。
二. Nginx是什么
Nginx是一个高性能的HTTP和反向代理服务器,同时也提供了IMAP/POP3/SMTP服务。
我们知道,Web服务器是用来对外共享资源的 ,类似于我们以前学习的Tomcat一样,是Web项目的部署容器。
而IMAP/POP3/SMTP这三者,则是一种邮件协议,分别是邮件的发送和接收协议,所以Nginx还可以作为一个邮件服务器来使用。
综上所述,Nginx就是一个服务器,这个服务器既可以当成邮件服务器,也可以当成Web服务器来使用。
三. Nginx能干什么
3.1 Nginx能做虚拟主机
那什么是虚拟主机呢?也就是说,这个主机是不存在的,是虚拟出来的。而我们原来所说的服务器,实际上是一台真正的PC机。所以虚拟主机就是原本这个机器不存在,但我们可以使用软件模拟出来,这个就叫做虚拟主机。
#只要你访问的是 8989/xiaobobo.html文件 那么默认去 根目录下去找 名字
#叫做 xiaobobo的这个文件夹里面去找 名字叫做xiaobobo.html的文件
server {
listen 8989;
server_name localhost;
location /xiaobobo.html {
root xiaobobo;
}
}
3.2 反向代理
原本我们需要访问A机器,但现在我们可以通过B机器,转发到A机器来实现访问,B机器就叫做代理。
#这个是反向代理的配置
#如果你的访问后缀是 .jpg的话那么默认就转发到 另外一个服务器去
#相当于会将你原来的请求的主机和端口换成下面的主机和端口 然后再请求
location ~ .jpg$ {
proxy_pass http://1.117.75.21:8080;
}
3.3 负载均衡策略
首先我们来了解一下什么叫负载,举个例子,我们每个人背的 "东西"就是负载。而均衡则是指每个人背的东西一样多。
在程序中,如果有多台服务器来承载请求,那么每个服务器承载的请求个数是一样的,这就称为负载均衡。
接下来波哥给大家介绍几个常用的负载均衡策略。
3.3.1 轮询策略
轮询就是每个请求按时间顺序,逐一分配到不同的后端服务器,这是默认的负载均衡策略。如果后端服务器down掉,能自动剔除。
upstream bobo {
server 1.117.75.21:8080;
server 47.109.53.119:8080;
}
#这个是反向代理的配置
#如果你的访问后缀是 .jpg的话那么默认就转发到另外一个服务器去
#相当于会将你原来的请求的主机和端口换成下面的主机和端口,然后再请求
location ~ .jpg$ {
proxy_pass http://bobo;
}
3.3.2 权重(weight)策略
weight代表权重,默认为 1,权重越高被分配的客户端就越多。指定轮询几率,weight权重大小和访问比率成正比,该策略常用于后端服务器性能不均衡的情况下。
#所谓的权重就是按照 比例来进行分配
#如果有3次请求 2次在第一个机器上 1次在另外一个机器上
#抛一个硬币: 2次 1次朝上 一次朝下 ? 是在无数次抛无线接近于50%
upstream bobo {
server 1.117.75.21:8080 weight=2;
server 47.109.53.119:8080 weight=1;
}
3.3.3 IP_hash策略
ip_hash就是会对每个请求访问的ip进行hash运算,再根据结果进行分配,这样每个访客固定访问一个后端服务器。
#如果在nginx中你设置的负载均衡的算法是 ip_hash的话、那么我们这里只要是你请求的ip地址没变 那么通过这个ip地址 计算出来的访问的机器 也不会发生变化 这就是IP_HASH
#只要你的请求的ip地址没变
#那么通过ip地址计算出来要访问的机器 也就不会发生变化 这个就叫做ip_hash
upstream bobo {
ip_hash;
server 1.117.75.21:8080;
server 47.109.53.119:8080;
}
ip_hash的使用场景:
3.4 动静分离
我们在开发时,有几种”分离“的情况,比如:
- 读写分离:将读的请求放到从服务器上写的请求放到主服务器上,主从复制最终是为了解决读写分离,最终的目的是为了减压。
- 前后分离:指的是前端和后台之间的开发都分离开自己开发自己的,然后前端代码和后台之间采用Ajax请求来完成数据的访问 。
- 动静分离:将动态资源和静态资源分割开,在部署项目的时候将静态资源放到Nginx服务器上,将Servlet请求放到Tomcat服务器上,这个就叫做动静分离。
接下来波哥给大家说一下,在Nginx服务器上如何实现动静分离。
3.4.1 准备HTML文件
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<link rel="stylesheet" type="text/css" href="css/main.css"/>
</head>
<body>
<div id="div01">
样式是否有值
</div>
<img src="img/tupian.jpg" width="300px" height="300px"/>
<br />
<a href="/user.action">点我请求动态资源返回JSON就是对的</a>
</body>
</html>
3.4.2 准备css文件
div{
width: 200px;
height: 200px;
background: pink;
text-align: center;
line-height: 200px;
border: 1px solid red;
}
3.4.3 将这些文件放到/usr/local下的web目录中
3.4.4 准备Controller
package com.qfedu.edu.controller;
import com.qfedu.edu.pojo.User;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author xiaobobo
* @title: UserController
*/
@RestController //使用了这个注解表示的是 下面所有的方法都要返回JSON格式的数据
public class UserController {
/**
* 返回JSON格式了
* @return
*/
@RequestMapping("/user.action")
public Object test(){
return new User(1,"小波波","123");
}
}
3.4.5 准备编写配置文件
server {
listen 9000;
server_name localhost;
#先配置静态资源的映射
location ~* .(jpg|js|css|html|png|gif|map)$ {
root /usr/local/web;
#这些文件读取之后的缓存要缓存1天
expires 1d;
}
#配置动态资源的映射
location ~ .action$ {
proxy_pass http://1.117.75.21:8080;
}
}
四. Nginx的基本安装
以下是Nginx的基本安装过程,供大家参考。
#1、将Nginx 复制到/usr/local目录下去
cp nginx-1.8.1.tar.gz /usr/local/
#2、解压这个压缩目录
tar -zxvf nginx-1.8.1.tar.gz
#3、安装依赖的组件
yum install pcre yum install pcre-devel
yum install zlib yum install zlib-devel
#4、进行配置
cd nginx-1.8.1 && ./configure --prefix=/usr/local/nginx
#5、进行安装(进入解压的根目录)
make&&make install
#6、启动Tomcat
cd /usr/local/nginx/sbin/
./nginx
#7、在浏览器上输入ip:80如果出现了如下页面 那么说明Nginx安装就成功了
五. Nginx基本目录解析
conf:这个目录的基本作用是存放配置文件的地方
html: 这个目录类似于咋们Tomcat的webapps这个目录(存放的是网络访问的资源)
logs:这个目录的主要作用是存放日志的地方
sbin:这个目录的主要作用是存放Nginx的启动文件的地方
六. 总结
以上就是基本的Nginx知识,虽然步骤有点多,但波哥相信各位小伙伴的能力,其实你只要多看几次就一定能掌握这些内容。如果你还有什么不懂的地方,随时可以留言+私信讨论!