Nginx简介

  在学习Nginx之前我们需要先大致了解一下Nginx是什么、它能做什么事情,然后再开始学习和使用。

  Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,Nginx是一款轻量级的Web 服务器/反向代理服 务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。

  其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

  简单来说Nginx是一个轻量级Web服务器 与 反向代理服务器。

应用场景

  • http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。
  • 虚拟主机。可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。
  • 反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。

正向代理与反向代理

  在学习Nginx之前需要先了解正向代理与反向代理的概念。

正向代理

  正向代理是指一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

正向代理用途

  1. 访问原来无法访问的资源,如google
  2. 可以做缓存,加速访问资源
  3. 对客户端访问授权,上网进行认证
  4. 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息

反向代理

  反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

反向代理的作用:

  1. 保证内网的安全,可以使用反向代理提供WAF功能,阻止web攻击
  2. 负载均衡,通过反向代理服务器来优化网站的负载

总结:

  在正向代理中,代理服务器与客户端同属于一个局域网,对服务器隐瞒了真实的客户端。

  在反向代理中,代理服务器与服务端同属于一个局域网,对客户端隐瞒了真实的服务器。

  实际上代理服务器在两种代理中做的事都是代为收发请求和响应。不过从结构上来看正好左右互换了一下。所以把后出现的那种代理方式称为反向代理。

安装Nginx

  首先我们需要明确Nginx是服务端的东西,所以一般安装在Linux系统之上,我这里使用的是阿里云服务器,系统版本是ubuntu-16。

以下列举三种安装方式:

一、使用apt-get 快速安装

# 切换至root用户
sudo su root
apt-get install nginx -y

查看版本

nginx -v

显示版本信息即安装成功

安装成功后查看配置文件位置:

whereis nginx

安装后文件的位置:

  • 主程序
/usr/sbin/nginx
  • 配置文件
/etc/nginx
  • 静态文件
/usr/share/nginx
  • 日志
/var/log/nginx

常用操作指令

以apt-get 方式快速安装的,操作时可直接全局操作。

1、启动Nginx服务

# 启动成功无任何显示,直接访问80端口可查看是否启动成功
sudo service nginx start

2、停止Nginx服务

# 停止成功无任何提示,若停止成功则无法再访问80端口
sudo service nginx stop

3、重启

# 此操作无任何提示,无错误信息则表示执行成功
sudo service nginx restart

4、重新加载

# 此操作无任何提示信息,用于修改nginx配置文件后重新加载
sudo nginx -s reload

5、检测Nginx配置是否正确

sudo nginx -t

配置正确则显示:

6、完全卸载Nginx

apt-get --purge autoremove nginx

可以通过查看版本号检测是否卸载成功:

或者也可以通过进程查看:

​ 上图表示卸载成功

二、在官网下载安装包安装

1、进入官网下载安装包http://nginx.org/en/download.html

下载稳定版即可:

2、将已下载好的安装包发送至服务器

我这里是选择放在 /usr/local/nginx 路径下

或者进入该目录下直接通过命令下载到当前目录

wget http://nginx.org/download/nginx-1.16.1.tar.gz

3、安装相关依赖包

#安装gcc
apt-get build-dep gcc 
#安装pcre
apt-get install libpcre3 libpcre3-dev
#安装zlib,压缩、解压
apt-get install zlib1g-dev
#安装openssl,安装套接字层密码库
apt-get install openssl libssl-dev

4、编译Nginx

# 进入nginx目录
/usr/local/nginx/nginx1.16
# 执行命令
./configure
# 执行make命令
make (若此处报错  可以执行 sudo apt-get install build-essential 解决)
# 执行make install命令
make install

以上指令若无报错信息即为执行成功

5、启动Nginx

#进入nginx启动目录
cd /usr/local/nginx/sbin
# 启动nginx
./nginx

  直接访问80端口,若显示如下网页则启动成功:

  也可以通过查看进程来检测是否启动成功:

ps -ef | grep nginx

操作指令

  以安装包方式编译安装的Nginx与 直接通过apt-get安装的操作指令有些不同。以安装包方式安装的Nginx,在操作之前必须先进入nginx所在路径,如下:

1、查看Nginx的版本号

./nginx -v

2、启动Nginx

./nginx

3、停止Nginx

./nginx -s stop

4、重新加载Nginx配置文件

./nginx -s reload

配置文件所在位置:

  通过安装包编译安装的Nginx在安装完成之后 在/usr/local/ 路径下会自动生成一个 nginx 文件夹

# 配置文件所在路径
/usr/local/nginx/conf/nginx.conf

三、Docker 安装 Nginx

  先参考https://www.runoob.com/docker/docker-install-nginx.html (等发表docker篇后再做描述)

配置文件

  此时Nginx已经安装成功并且可以启动运行了,接下来我们来了解一下Nginx的配置文件以及相关配置。

配置文件组成

  我们打开Nginx的配置文件(不同安装方式的配置文件所在位置不同,上面有详细位置描述),去除掉注释信息,最简单的配置文件如下:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }
		
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

  由此可见Nginx的配置文件由三部分组成。

  • 第一部分:全局块

      从配置文件到 events块 之间的内容为 全局块,主要会设置一些影响nginx服务器整体运行的配置指令

      主要包括配置运行 Nginx 服务器的用户(组)、允许生成的worker process 数、进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。

    比如:

    worker_processes  1;
    

  worker_processes 表示Nginx可支持并发处理量的值,该值越大,则可以支持的并发处理量也越多。

  • 第二部分:events块

  events块涉及的指令主要影响Nginx服务器与用户的网络连接,常用的设置包括 是否开启对多work process下的网络连接进行序列化、是否允许同时接收多个网络连接、选取哪种事件驱动模型来处理连接请求、每个work process可以同时支持的最大连接数等。

  比如:

 # 表示work process 支持的最大连接数为 1024
 worker_connections  1024;

  这部分的配置对Nginx的性能影响较大,在实际应用中应该灵活配置。

  • 第三部分:http块

      http块是Nginx服务器配置中最频繁的部分,代理、缓存、和日志定义等绝大多数功能和第三方模块的配置都在这里。

      注意:http块也可以包括 http全局块 和 server块。

    1、http全局块

      http 全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。

    2、server块

      server块和虚拟主机有着密切的关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的生产是为了节省互联网服务器硬件成本。

      每个http块可以包括多个server块,每个server块就相当于一个虚拟主机。

      而每个server块也分为全局server块,以及可以同时包含多个location块。

  ① 全局server块

    最常见的配置是本虚拟主机的监听配置和本虚拟主机的名称或IP配置。

   location块

    一个server块可以配置多个location块。

  这块的主要作用是基于Nginx服务器接收到的请求字符串(例如server_name/uri-string)。对虚拟主机名称(也可以是IP别名)之外的字符串(例如 前面的/uri-string)进行配置,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

Nginx配置实例

  • 反向代理

  • 负载均衡

  • 动静分离