前端需要了解的 Nginx

Nginx 简单使用指南

Posted by Shiyanping on January 10, 2019

nginx 对于服务器来说有很多好处,比如:

  1. 反向代理,保护正常服务器安全
  2. 负载均衡,可以有效的分配服务器集群
  3. 可以做 gzip 压缩
  4. 可以添加缓存

我作为一个前端,正在努力学习向大前端进发,所以必须要掌握一些常规的 nginx 操作。

1. 安装

1.1 mac 上安装

mac 上直接使用 brew 安装即可,brew install nginx。安装之后可以到 /usr/local/etc/nginx 目录下找到 nginx.conf 进行配置的修改。

使用 brew 安装的 nginx,具体的几个配置都在下面:

nginx 的配置文件路径:/usr/local/etc/nginx/nginx.conf nginx 的服务器页面默认路径:/usr/local/var/www nginx 的安装路径:/usr/local/Cellar/nginx/1.15.5

1.2 Linux 上的安装

linux 上的安装,建议看一下菜鸟教程,跟着教程走下来,就 OK 了。

http://www.runoob.com/linux/nginx-install-setup.html

注意: 根据菜鸟教程安装的 nginx,他的安装目录是在 /usr/local/webserver/nginx 这个目录下。后续我们会用到这个目录。

2. nginx 常用命令

nignx 主要是通过配置去实现功能,但是常用的启动,重启,停止命令我们还是要知道的。

1
2
3
4
nginx   # 启动nginx
nginx -s reload     # 重新载入配置文件
nginx -s reopen     # 重启 nginx
nginx -s stop       # 停止 nginx

在 mac 上使用 brew 安装好之后,可以直接使用 nginx 的命令启动 nginx。

但是在 linux 上安装好之后我们不能直接通过 nginx 进行操作,我们需要到 /usr/local/webserver/nginx/sbin/ 这个目录下然后执行命令。

3. 开始配置

我们想要修改 nginx 的配置,首先要找到 nginx.conf 所在的位置。并且对 nginx.conf 有一定的了解。首先看看 nginx.conf 所在的位置:

修改 nginx.conf:

mac 上的位置在 /usr/local/etc/nginx/nginx.conf,Linux 如果按照菜鸟教程安装的,位置在 /usr/local/webserver/nginx/conf/nginx.conf

修改启动页面:

如果想要修改 nginx 的启动页面,mac 可以到 /usr/local/var/www 下修改,Linux 到 /usr/local/webserver/nginx/html 下修改 index.html 就可以。

nginx 的内容大致分为以下几块:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#全局块
#worker_processes 2;  # 允许生成的进程数,默认是1
#pid /nginx/pid/nginx.pid;   # 指定nginx进程运行文件存放地址
error_log log/error.log debug;  # 指定日志输出路径
events {   # events 块
    worker_connections 1024;  # 最大连接数
    ...
}
http {  # http 块
    ...  # http全局块
    server {   # server 块
        ...   # server 全局块
        listen  9090;  # 请求端口
        server_name  localhost;  # 请求域名
        location [PATTERN] {  # location 块
            ...
            root   html;   # 文件根目录
            index  index.html index.htm; # 设置访问页
            deny 127.0.0.1;  # 拒绝的ip
            allow 172.18.5.54;  # 允许的ip
        }
        location [PATTERN] {
            ...
        }
    }
    server {
        ...
    }
    upstream [NAME] {  # 代理服务器负载均衡组
        ...
    }
     ...  # http全局块
}
  1. 全局块:配置影响 nginx 全局的指令。一般有运行 nginx 服务器你的用户组,nginx 进程 pid 存放路径,日志存放路径,配置文件引入,允许生成 worker process 数等。
  2. events 块:配置影响 nginx 服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网络连接,开启多个网络连接序列化等。
  3. http 块:可以配置多个 server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mini-type 定义,日志自定义,是否使用 sendfile 传输文件,连接超时时间,单连接请求数等。
  4. server 块:配置虚拟主机的相关参数,一个 http 中可以有多个 server。
  5. location 块:配置请求的路由,以及各种页面的处理情况。
  6. upstream 块:主要配置代理服务器组,包括负载均衡的配置。

配置如果不是很理解,可以接着往下走,给自己的服务器配置一下 nginx,尝试一下就豁然开朗了。

3.1 反向代理与负载均衡

找到 nginx.conf,在 server 中配置路由。

1
2
3
4
5
6
7
8
9
10
11
server {
    listen       9090;
    server_name  localhost;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;
    location / {
            proxy_pass http://tomcats;
    }
}

proxy_pass 就是指该路由具体转发到哪个服务器组,我们这里设置了一个名叫 tomcats 组,在 server 同级的添加一个 upstream 模块,模块名就叫 tomcats,模块里面配置要转发到哪个 ip 服务器上,可以配置多个,多个 IP 如果不设置分配策略的话,会默认轮询分配。

这样就实现了反向代理和负载均衡了,nginx 代理了自己的服务器,到指定的几个 IP 服务器下,然后服务器均衡分配访问过来的流量。

1
2
3
4
5
upstream tomcats {
    server 192.168.100.100:8080;
    server 192.168.100.101;
    server example.com:8080;
}

我们也可以给每个 server 设置不同的分配策略。

1
2
3
4
5
upstream tomcats {
    server 192.168.100.100:8080 weight=2;  # 2/6次
    server 192.168.100.101 weight=3;  # 3/6次
    server example.com:8080 weight=1;  # 1/6次
}

如下图,左侧为没有配置加权的轮询,右侧为配置了加权之后的轮询,会根据加权数去进行分配。

3.2 配置 ip 缓存

我们可以使用 ip_hash 来给每个访问的 ip 进行结果分配,就是一个 ip 访问之后,后续它的访问都会固定打到同一个机器上,这样有利于解决 session 不共享的问题。

配置很简单:

1
2
3
4
5
6
upstream tomcats {
    ip_hash;
    server 192.168.100.100:8080;
    server 192.168.100.101;
    server example.com:8080;
}

配置之后如下:

nginx 还可以开启 gzip 压缩

在编辑的时候,搜索 gzip,就可以找到对应的配置信息了,默认是被注释的,也就是关闭的。我们将注释关掉就可以了。