Nginx零基础入门知识

本文最后更新于:2 年前

Nginx 简介

Nginx 概述

Nginx (“engine x”) 是一个高性能的 HTTP 和反向代理服务器,特点是占有内存少,并发能力强,在同类型的网页服务器中表现较好。可以作为静态页面的 web 服务器,专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率 ,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数。

反向代理

Nginx 服务器的反向代理服务是其最常用的重要功能,由反向代理服务也可以衍生出很多与此相关的 Nginx 服务器重要功能,比如后面会介绍的负载均衡。这里简要介绍了正向代理和反向代理,更多内容可查看这篇文章

  • 正向代理

    如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。

    正向代理

  • 反向代理

    反向代理,客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。

反向代理

负载均衡

客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服务器处理完毕后,再将结果返回给客户端。

不使用负载均衡

这种架构模式对于早期的系统相对单一,并发请求相对较少的情况下是比较适合的,成本也低。但是随着信息数量的不断增长,访问量和数据量的飞速增长,以及系统业务的复杂度增加,这种架构会造成服务器相应客户端的请求日益缓慢,并发量特别大的时候,还容易造成服务器直接崩溃。

我们首先想到的可能是升级服务器的配置,比如提高 CPU 执行频率,加大内存等提高机器的物理性能来解决此问题,但是我们知道摩尔定律的日益失效,硬件的性能提升已经不能满足日益提升的需求了。

上面的分析我们去掉了增加服务器物理配置来解决问题的办法,也就是说纵向解决问题的办法行不通了,那么横向增加服务器的数量呢?这时候集群的概念产生了,单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。

使用负载均衡

动静分离

为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。

Nginx 安装

以下安装教程测试于 nginx1.12.2,如有问题可参考Nginx 安装菜鸟教程

安装 PCRE 依赖

PCRE 作用是让 Nginx 支持 Rewrite 功能。

  1. 下载 PCRE 安装包

    下载地址:http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz

    1
    2
    [root@gaojie src]# cd /usr/local/src/
    [root@gaojie src]# wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz

    如果使用weget命令出现以下错误,是因为 yum 仓库配置有问题。重新配置 yum 仓库即可,具体看如下教程.

  2. 解压安装包:

    1
    [root@gaojie src]# tar zxvf pcre-8.35.tar.gz
  3. 进入安装包目录

    1
    [root@gaojie src]# cd pcre-8.35
  4. 编译安装

    1
    2
    [root@gaojie pcre-8.35]# ./configure
    [root@gaojie pcre-8.35]# make && make install
  5. 查看pcre版本

    1
    [root@gaojie pcre-8.35]# pcre-config --version

安装编译工具及库文件

所需依赖如下:

  • openssl

  • zlib

  • gcc

1
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

安装 Nginx

  1. 下载 Nginx,下载地址: https://nginx.org/en/download.html

    1
    2
    [root@gaojie src]# cd /usr/local/src/
    [root@gaojie src]# wget http://nginx.org/download/nginx-1.12.2.tar.gz
  2. 解压安装包

    1
    [root@gaojie src]# tar zxvf nginx-1.12.2.2.tar.gz
  3. 进入安装包目录

    1
    [root@gaojie src]# cd nginx-1.12.2.2
  4. 编译安装

    1
    2
    [root@gaojie nginx-1.12.2]# ./configure 
    [root@gaojie nginx-1.12.2]# make && make install
  5. 查看nginx版本

    1
    [root@gaojie nginx-1.12.2]# /usr/local/nginx/sbin/nginx -v

到此,nginx 安装完成。

开放端口号

在 windows 系统中访问 linux 中 nginx,默认不能访问的,因为防火墙问题。我们可以直接关闭防火墙,也可以开发 nginx 对应的端口号

  1. 查看已经开放的端口号

    1
    firewall-cmd --list-all

    可以看到,当前只开放了 8080 端口。

  2. 设置要开放的端口号

    nginx 默认端口为 80 ,我们需要在防火墙中开放 80 端口:

    1
    2
    firewall-cmd --add-service=http –permanent
    firewall-cmd --add-port=80/tcp --permanent
  3. 重启防火墙

    1
    firewall-cmd –reload

启动 Nginx

启动 nginx 的命令:

1
[root@gaojie nginx-1.12.2]# /usr/local/nginx/sbin/nginx

此时使用就可以查看到 nginx 线程:

访问站点

此时就可以通过 ip:80 在浏览器中访问:

Nginx 常用命令

使用以下命令前提条件是,进入 nginx 目录中:

1
cd /usr/local/nginx/sbin
  1. 查看 nginx 版本号

    1
    ./nginx -v
  2. 启动 nginx

    1
    ./nginx
  3. 停止 nginx

    1
    ./nginx -s stop
  4. 重新加载 nginx

    1
    ./nginx -s reload

Nginx 配置文件

配置文件位置

1
/usr/local/nginx/conf/nginx.conf

配置文件组成

nginx 配置文件(nginx.conf)由三部分组成,分别是 全局块、events 块、http 块。

全局块

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

1
2
3
4
5
6
7
8
9
10
11
#user  nobody;

#这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约。设置值一般和 CPU 核心数一致。
worker_processes 1;

#日志位置和日志级别
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid logs/nginx.pid;

events 块

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

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

1
2
3
4
events {
#每个 work process 支持的最大连接数为 1024.
worker_connections 1024;
}

http 块

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

需要注意的是:http 块也可以包括 http 全局块、server 块。

http 全局块

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
http
{
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';

#charset gb2312;

server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;

******
}

server 块

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

每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。

全局 server 块

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

1
2
3
4
listen 80; #监听端口
server_name localhost; #域名
index index.html index.htm index.php;
root /usr/local/webserver/nginx/html; #站点目录
locaton 块

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

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

1
2
3
4
5
6
7
8
9
#请求跳转
location / {
root html;
index index.html index.htm;
}

location = /50x.html {
root html;
}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!