0%

Nginx快速入门

Nginx快速入门

Nginx安装

根据前文的部署方案,需要在server02部署Nginx。Nginx官网有详细的安装步骤,具体内容可参考官方文档

  1. 配置Nginx yum存储库

    创建/etc/yum.repos.d/nginx.repo文件

    1
    vim /etc/yum.repos.d/nginx.repo

    增加如下内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    [nginx-stable]
    name=nginx stable repo
    baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
    gpgcheck=1
    enabled=1
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true

    [nginx-mainline]
    name=nginx mainline repo
    baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true
  2. 在线安装Nginx

    执行以下命令,安装Nginx

    1
    yum -y install nginx
  3. 启动Nginx

    执行以下命令启动Nginx

    1
    systemctl start nginx

    执行以下命令查看Nginx运行状态

    1
    systemctl status nginx

    执行以下命令设置开机自启

    1
    systemctl enable nginx
  4. 访问Nginx服务默认首页

    访问http://192.168.10.102,能访问到如下页面,则证明Nginx运行正常。

9.2.2 重要的目录、文件

Nginx中有很多十分重要的目录或者文件,下面对核心内容进行介绍

  1. 配置文件相关
    • /etc/nginx/:主要的Nginx配置文件目录。
    • /etc/nginx/nginx.conf:Nginx的主配置文件,包含全局配置信息。
  2. 日志相关
    • /var/log/nginx/:Nginx的日志文件目录,包括访问日志和错误日志。
    • /var/log/nginx/access.log:访问日志,记录所有进入服务器的请求。
    • /var/log/nginx/error.log:错误日志,记录服务器处理过程中的错误信息。

9.2.3 配置文件概述

  1. 配置文件结构

    nginx.conf文件层次分明,整个文件分为多个区块(block),每个区块下可配置各种参数,也可包含其子级区块,具体结构如下图所示

    nginx.conf通过include /etc/nginx/conf.d/*.conf引入了/etc/nginx/conf.d目录下的所有.conf文件,该目录下的配置文件结构如下图所示

  2. 重要配置说明

    下面分块介绍重要的配置参数

    • main block

      main block位于配置文件的最外层,其包含了影响Nginx服务器整体行为的全局参数,例如

      • user:定义Nginx工作进程的用户和用户组。
      • worker_processes:指定Nginx使用的工作进程数。
      • error_log:配置全局错误日志文件路径。
    • events block

      events block位于main block中,用于配置Nginx服务器的事件处理机制,主要配置Nginx如何处理客户端连接。

    • http block

      http block位于main block中,用于配置HTTP服务器相关功能。例如

      • access_log:指定访问日志的路径
      • log_format:指定访问日志的格式
    • server block

      server block位于http block,用于配置虚拟主机,一个Nginx服务可包含多个虚拟主机,每个虚拟主机都可以独立的提供服务,因此借助Nginx,我们可以在一台服务器部署多个独立的网站,如下图所示

      每个虚拟主机使用一个server block进行配置,配置的内容包括

      • listen:虚拟主机监听的端口号。
      • server_name:指定虚拟主机的域名或者IP。
    • location block

      location block位于server block,用于配置请求的处理逻辑,一个server block中可以包含多个location block,例如

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      server {
      listen 80;
      server_name www.atguigu.com;
      location /index {
      root /var/www/html;
      }

      location /api {
      proxy_pass http://backend-api;
      }
      }

9.2.4 静态资源服务器案例

下面完成一个简单案例,使用Nginx作为静态资源服务器。

项目资料中有一个简单的前端项目hello-nginx,其中只包含html、css等静态资源,现将其部署在server02上。

  1. 上传静态资源到服务器

    hello-nginx.zip上传到server02服务器任意路径。

  2. 解压hello-nginx.zip/usr/share/nginx/html

    1
    unzip hello-nginx.zip -d /usr/share/nginx/html

    最终的路径结构如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    /usr
    └── share
    └── nginx
    └── html
    └── hello-nginx
    ├── css
    │   └── style.css
    ├── images
    │   └── img.png
    └── index.html
  3. 配置Nginx虚拟主机

    虚拟主机的配置应位于/etc/nginx/nginx.confserver block中,由于/etc/nginx/nginx.confhttp bolck中引入了/etc/nginx/conf.d/*.conf,所以虚拟主机在/etc/nginx/conf.d/目录下的任意.conf文件配置即可。

    • 创建/etc/nginx/conf.d/hello-nginx.conf文件

      1
      vim /etc/nginx/conf.d/hello-nginx.conf
    • 添加如下内容

      1
      2
      3
      4
      5
      6
      7
      8
      9
      server {
      listen 8080;
      server_name 192.168.10.102;

      location /hello-nginx {
      root /usr/share/nginx/html;
      index index.html;
      }
      }
    • 重新加载Nginx的配置文件

      1
      systemctl reload nginx
  4. 访问项目

    访问路径为http://192.168.10.102:8080/hello-nginx,若部署成功,可见到如下页面

  5. 案例剖析

    下面通过上述案例来了解Ngxin处理请求的逻辑。

    • 匹配server

      由于Nginx中可存在多个虚拟主机的配置,故接收到一个请求后,Nginx首先要确定请求交给哪个虚拟主机进行处理。这很显然是根据server_namelisten进行判断的。例如上述的请求路径http://192.168.10.102:8080/hello-nginx,就会匹配到以下的虚拟主机

      1
      2
      3
      4
      5
      server {
      listen 8080;
      server_name 192.168.10.102;
      ......
      }
    • 匹配location

      由于一个server block中可能包含多个location block,故Nginx在完成server匹配后,还要匹配locationlocation的匹配是根据请求路径进行判断的。例如以下写法location关键字后边的/hello-nginx就是匹配规则,它表达的含义是匹配以/hello-nginx为前缀的请求,例如上述的http://192.168.10.102:8080/hello-nginx请求就会匹配到该**location**,而

      http://192.168.10.102:8080/nginx则不会。

      1
      2
      3
      location /hello-nginx {
      ......
      }
    • 定位文件

      完成location的匹配后,Nginx会以location block中的root作为根目录,然后查找请求路径对应的资源,例如以下配置

      1
      2
      3
      4
      location /hello-nginx {
      root /usr/share/nginx/html;
      index index.html;
      }

      当请求http://192.168.10.102:8080/hello-nginx 时,Ngxin会在/usr/share/nginx/html/hello-nginx路径中查找资源,由于该路径为目录(而非文件),故Nginx会在该目录下寻找index,也就是上述配置的index.html。然后将index.html响应给客户端。至此,该请求的处理就结束了。

      注意:上述提到的server_namelocation均有多种匹配模式,例如精确匹配、前缀匹配、正则匹配,此处不再展开。

9.2.5 反向代理案例

下面完成一个简单案例,使用Nginx作为反向代理。

使用Nginx反向代理其他网站,比如http://www.atguigu.com

  1. 配置虚拟主机

    创建/etc/nginx/conf.d/hello-proxy.conf文件

    1
    vim /etc/nginx/conf.d/hello-proxy.conf

    内容如下

    1
    2
    3
    4
    5
    6
    7
    8
    server {
    listen 9090;
    server_name 192.168.10.102;

    location / {
    proxy_pass http://www.atguigu.com;
    }
    }
  2. 重新加载Nginx配置文件

    1
    systemctl reload nginx
  3. 观察代理效果

    使用浏览器访问http://192.168.10.102:9090,观察响应结果。

注意:借助反向代理功能,Nginx可以实现负载均衡等高级功能,此处不再展开。

9.3 配置域名映射

现实生活中,几乎所有的网站都是通过域名去访问。真正的域名需要付费购买,此处在宿主机本地配置一下域名映射,模拟一下域名的效果即可。

我们准备两个域名lease.atguigu.comadmin.lease.atguigu.com,前者用于访问移动端网站,后者用于访问后台管理系统。由于两个前端项目都部署在server02上,所以两个域名均指向server02的IP。

Windows的域名映射配置文件位于C:\Windows\System32\drivers\etc\hosts,需要使用管理员身份修改。使用管理员身份运行任意文本编辑器,然后使用其打开hosts文件,并增加如下内容:

1
192.168.10.102 lease.atguigu.com admin.lease.atguigu.com

修改完毕记得保存。