1. 介绍与安装

1.1 Nginx 简介

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了 IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的 Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004 年10月4日。
其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

1.2 Nginx 安装

  1. 上传 nginx 安装包到自定义目录下并解压
tar zxvf nginx-1.21.6.tar.gz
  1. 编译安装
./configure --prefix=/usr/local/nginx

报错后 按照下面的错误信息安装对应的依赖

  1. 安装 gcc
checking for OS
+ Linux 3.10.0-693.el7.x86_64 x86_64
checking for C compiler ... not found
./configure: error: C compiler cc is not found
yum install -y gcc
  1. 安装 perl 库
./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.
yum install -y pcre pcre-devel
  1. 安装 zlib 库
./configure: error: the HTTP gzip module requires the zlib library.
You can either disable the module by using --without-http_gzip_module
option, or install the zlib library into the system, or build the zlib library
statically from the source with nginx by using --with-zlib=<path> option.
yum install -y zlib zlib-devel
  1. 再次执行编译安装
./configure --prefix=/usr/local/nginx
make
make install

1.3 启动 Nginx

进入安装好的目录

/usr/local/nginx/sbin
./nginx 启动
./nginx -s stop 快速停止
./nginx -s quit 优雅关闭,在退出前完成已经接受的连接请求
./nginx -s reload 重新加载配置

1.4 设置防火墙

  1. 关闭防火墙
systemctl stop firewalld.service
  1. 设置防火墙开机启动
systemctl disable firewalld.service
  1. 放行端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
  1. 重启防火墙
firewall-cmd --reload

1.5 安装成系统服务

  1. 创建脚本服务
vi /usr/lib/systemd/system/nginx.service
  1. 服务脚本内容
[Unit]
Description=nginx - web server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
ExecQuit=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
  1. 重新加载系统服务
systemctl daemon-reload
  1. 启动服务
systemctl start nginx.service
  1. 开机启动
systemctl enable nginx.service

2. 目录结构

进入 nginx 的主目录,可以看到 nginx 的目录结构

在这里插入图片描述

client_body_temp conf fastcgi_temp html logs proxy_temp sbin scgi_temp uwsgi_temp

其中这几个文件夹在刚安装后是没有的,主要用来存放运行过程中的临时文件

client_body_temp fastcgi_temp proxy_temp scgi_temp
  1. conf: 存放配置文件相关

在这里插入图片描述

  1. html: 用来存放静态文件的默认目录 html、css 等

在这里插入图片描述

  1. sbin: nginx 的主程序

在这里插入图片描述

  1. logs: 存放日志

在这里插入图片描述

3. 基本运行原理

在这里插入图片描述

master: 主进程,管理子进程
worker: 子进程,解析用户请求,并读取资源响应请求

nginx 启动后,会启动多个进程(一个主进程,多个子进程),主进程协调子进程,子进程读取配置文件,去寻找资源,并响应请求。

4. nginx 基础配置

4.1 最小配置


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;
        }
    }

}

4.2 核心配置

worker_processes
worker_processes 1;:默认为1,表示开启一个业务进程

一个 cpu 内核最好对应一个 worker_processes,否则会降低效率

worker_connections
worker_connections 1024;:单个业务进程可接受连接数

include mime.types
include mime.types; :引入http mime类型

default_type application/octet-stream
default_type application/octet-stream;:如果mime类型没匹配上,默认使用二进制流的方式传输。

sendfile on
sendfile on;:使用linux的 sendfile(socket, file, len) 高效网络传输,也就是数据0拷贝。

未开启sendfile
在这里插入图片描述

开启后
在这里插入图片描述

keepalive_timeout 65
keepalive_timeout 65;

4.3 虚拟主机配置

server
虚拟主机配置

    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;
        }
    }

5. 虚拟主机与域名解析

在这里插入图片描述

5.1 域名、dns、ip 地址的关系

  1. 域名(Domain Name):域名是人类友好的互联网标识符,用于代表特定的网站或网络资源。它由一系列的标签组成,以点号分隔,例如"example.com"。域名的作用是提供易记和易于识别的名称,使用户能够更方便地访问互联网资源。

  2. DNS(Domain Name System):DNS是一个分布式的系统,用于将域名转换为与之相关联的IP地址。当用户在浏览器中输入一个域名时,系统会向DNS服务器发送查询请求,以获取与该域名对应的IP地址。DNS服务器负责将域名解析为相应的IP地址,并将解析结果返回给用户的设备,以便建立连接并访问目标网站或资源。

  3. IP地址(Internet Protocol Address):IP地址是互联网上用于唯一标识设备的一组数字。它充当网络设备的身份证,用于在网络中路由和寻址数据包。IP地址分为IPv4和IPv6两种版本,其中IPv4地址由32位二进制数字表示(如192.168.0.1),而IPv6地址由128位十六进制数字表示(如2001:0db8:85a3:0000:0000:8a2e:0370:7334)。

关系解释:
当用户在浏览器中输入一个域名时,首先会通过操作系统的网络设置发送DNS查询请求到DNS服务器。DNS服务器会查找域名对应的IP地址,并将其返回给用户的设备。随后,用户的设备使用获取到的IP地址与目标服务器建立连接,并通过IP地址进行数据传输。因此,域名和IP地址之间的关系是通过DNS系统建立的,域名提供了一个便于记忆的标识符,而DNS则负责将域名解析为相应的IP地址,使得设备能够定位和访问目标服务器。

5.2 浏览器、Nginx 与 http 协议

  1. 浏览器:浏览器是用户用于访问和浏览互联网上网页和其他资源的软件应用程序。常见的浏览器包括Chrome、Firefox、Safari和Edge等。浏览器提供用户界面,使用户能够输入URL(统一资源定位符)或点击链接,然后向服务器请求资源,并将服务器响应的内容显示给用户。

  2. Nginx:Nginx是一个开源的高性能Web服务器和反向代理服务器。它以高效的方式处理客户端请求,并将请求转发到适当的后端服务器,然后将后端服务器的响应返回给客户端。Nginx在Web服务器领域广泛应用,它支持处理静态文件、负载均衡、反向代理和缓存等功能。

  3. HTTP协议:HTTP(Hypertext Transfer Protocol)是一种用于在Web浏览器和Web服务器之间传输数据的协议。它定义了浏览器和服务器之间进行通信的规则和约定。HTTP使用请求-响应模型,浏览器发送HTTP请求到服务器,服务器根据请求进行处理,并返回相应的HTTP响应。HTTP协议定义了请求方法(如GET、POST、PUT、DELETE等)、状态码(用于表示请求的处理结果)、报头(用于传递附加信息)等内容。

关系解释:
当用户在浏览器中输入一个URL或点击链接时,浏览器会解析URL并使用HTTP协议向服务器发送请求。请求经过网络传输到达服务器,服务器使用Nginx等Web服务器接收请求,并根据配置的规则进行处理。Web服务器可能直接返回静态文件,或者通过反向代理将请求转发给后端服务器进行处理。后端服务器处理完请求后,将响应发送回Nginx,然后Nginx将响应返回给浏览器。浏览器接收到响应后,解析并显示相应的内容给用户。因此,浏览器、Nginx和HTTP协议共同构成了用户与服务器之间的通信链路,实现了用户的请求和服务器的响应。

5.3 虚拟主机原理

虚拟主机是一种在单个物理服务器上承载多个独立的网站或应用程序的技术。它的原理是通过在网络服务器上配置和管理多个虚拟主机环境,使每个虚拟主机拥有独立的域名、文件系统、配置和资源。

虚拟主机原理的关键点如下:

  1. 基于域名或IP地址:虚拟主机可以基于域名或IP地址来区分不同的网站。每个虚拟主机被分配一个唯一的域名或IP地址,当请求到达服务器时,服务器根据请求的域名或IP地址来确定应该将请求转发给哪个虚拟主机进行处理。

  2. 虚拟化技术:虚拟主机通过使用虚拟化技术,在单个物理服务器上创建多个虚拟的运行环境。虚拟化技术可以通过操作系统级虚拟化(如容器化)或硬件级虚拟化(如虚拟机)来实现。每个虚拟主机被隔离在自己的虚拟环境中,就像独立的服务器一样,具有独立的文件系统、配置和资源。

  3. 配置和隔离:每个虚拟主机可以拥有自己的配置文件和设置。这使得每个虚拟主机可以根据其特定的需求进行个性化配置,如独立的Web服务器软件、数据库和语言环境。虚拟主机之间相互隔离,一个虚拟主机的配置或故障不会影响其他虚拟主机的运行。

  4. 资源管理:虚拟主机环境可以有效地管理服务器资源。物理服务器上的资源(如CPU、内存、磁盘空间和带宽)可以被划分和分配给各个虚拟主机,确保每个虚拟主机都能获得足够的资源来满足其需求,而不会相互干扰。

  5. 虚拟主机映射:服务器使用配置文件或数据库来映射域名或IP地址与相应的虚拟主机之间的关联关系。当请求到达服务器时,服务器通过查找这些映射关系来确定将请求发送到哪个虚拟主机。

总的来说,虚拟主机通过虚拟化技术和资源管理,使得单个物理服务器能够承载多个独立的网站或应用程序。每个虚拟主机拥有独立的域名、文件系统、配置和资源,实现了多租户的共享服务器环境。

5.4 域名解析与泛域名解析实战

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5.5 Nginx 中的虚拟主机配置

原本一台服务器只能对应一个站点,通过虚拟主机技术可以虚拟化成多个站点同时对外提供服务

在这里插入图片描述

servername匹配规则
我们需要注意的是servername匹配分先后顺序,写在前面的匹配上就不会继续往下匹配了。

完整匹配
我们可以在同一servername中匹配多个域名

server_name vod.mmban.com www1.mmban.com;

通配符匹配

server_name *.mmban.com

通配符结束匹配

server_name vod.*;

正则匹配

server_name ~^[0-9]+\.mmban\.com$;

6. 反向代理

在这里插入图片描述

6.1 网关、代理与反向代理

  1. 网关(Gateway):网关是在不同网络之间进行数据转发和转换的设备或系统。它负责处理不同协议之间的转换,充当两个独立网络之间的桥梁。网关工作在 OSI 模型的第七层(应用层)或第四层(传输层),用于实现网络间的互联和数据传输。

  2. 代理(Proxy):代理服务器是客户端和目标服务器之间的中间服务器。它接收来自客户端的请求,并代表客户端向目标服务器发送请求。代理服务器可以提供一些额外的功能,如缓存、负载均衡、安全策略等。客户端不直接与目标服务器交互,而是通过代理服务器进行通信。

  3. 反向代理(Reverse Proxy):反向代理服务器与传统代理服务器的功能相反。它代表目标服务器与客户端进行通信。当客户端发送请求时,反向代理服务器将请求转发到目标服务器,并将目标服务器的响应返回给客户端。反向代理通常用于负载均衡、安全性和加速性能的目的。

总结起来,网关用于不同网络的互联和数据转换,代理服务器代表客户端与目标服务器进行通信,而反向代理服务器代表目标服务器与客户端进行通信。它们在网络通信中扮演不同的角色,并提供不同的功能。

6.2 Nginx的反向代理配置

在这里插入图片描述

proxy_pass http://baidu.com;

location / {
	proxy_pass http://atguigu.com/;
}

6.3 基于反向代理的负载均衡器

proxy_pass http://httpd;
upstream httpd {
	server 192.168.44.102:80;
	server 192.168.43.103:80;
}

proxy_pass http:// 后面的名字要和 upstream 后面的名字一致

6.4 负载均衡策略

  1. 轮询

默认情况下使用轮询方式,逐一转发,这种方式适用于无状态请求。

  1. weight(权重)

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

upstream httpd {
	server 127.0.0.1:8050 weight=10 down;
	server 127.0.0.1:8060 weight=1;
	server 127.0.0.1:8060 weight=1 backup;
}

down:表示当前的server暂时不参与负载
weight:默认为1.weight越大,负载的权重就越大。
backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。

  1. ip_hash

根据客户端的ip地址转发同一台服务器,可以保持回话。

  1. least_conn

最少连接访问

  1. url_hash

根据用户访问的url定向转发请求

  1. fair

根据后端服务器响应时间转发请求

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐