Nginx是什么,使用教程详解!

642 阅读5分钟

一. 问题背景

最近有个小伙伴给我发私信问我,他问到了这样一个问题:“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知识,虽然步骤有点多,但波哥相信各位小伙伴的能力,其实你只要多看几次就一定能掌握这些内容。如果你还有什么不懂的地方,随时可以留言+私信讨论!