一、Nginx 简介
1.、概述
Nginx 是俄罗斯人编写的十分轻量级的 HTTP 服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个 IMAP/POP3/SMTP 代理服务器。
Nginx是开源、高性能、高可靠的 Web 和反向代理服务器,能支持高达 50,000个并发连接数。Nginx 是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,其特点是占有内存少,并发能力强。
2、什么是正向代理?
正向代理:如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访 问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。
正向代理是代理用户客户端,为客户端发送请求,使真实的用户客户端对服务器不可见。它最典型的用途就是可以用来访问受地理限制的内容、保护用户隐私、帮助爬虫爬取数据、广告效果测试、网站测试等等。
3、什么是反向代理?
反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只 需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返 回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器 地址,隐藏了真实服务器 IP 地址。
作用是隐藏服务器的IP地址、提高访问速度、保持负载平衡、保护免受黑客攻击。
4、什么是动静分离?
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速 度。降低原来单个服务器的压力。根据请求的不同的资源类型,将不同的请求分发到不同的资源服务器。
5、什么是负载均衡?
单个服务器的处理能力是有限的,当大量用户的请求时候,需要通过Nginx统一管理用户的请求,Nginx将用户的请求按照配置的策略分配到不同的负载服务器,将流量分布到多个应用服务器,通过nginx 提高web 应用程序的性能、可扩展性和可靠性。
二、下载与安装
两种方式:
- 通过官网下载安装,较为繁琐
- 访问官网nginx.org/
- 找一篇博客,按照操作,较为繁琐,这里不在详细展开
- 通过docker安装,方便快捷
# 下载镜像
docker pull nginx:latest# 查看镜像docker images# 启动容器docker run --name nginx -p 8080:80 -d nginx# 在浏览器访问,http://127.0.0.1:8080/# 出现Nginx的欢迎页面,说明启动成功# 复制配置文件到宿主机docker cp nginx:/etc/nginx/nginx.conf D:\dockerFile\nginxdocker cp nginx:/etc/nginx/conf.d/ D:\dockerFile\nginx\confdocker cp nginx:/usr/share/nginx/html/ D:\dockerFile\nginx\htmldocker cp nginx:/var/log/nginx/ D:\dockerFile\nginx\logs# 停止容器docker stop nginx# 删除容器docker rm nginx# 重新启动容器docker run -p 8080:80 --name nginx -v D:\dockerFile\nginx\nginx.conf:/etc/nginx/nginx.conf -v D:\dockerFile\nginx\logs:/var/log/nginx -v D:\dockerFile\nginx\html:/usr/share/nginx/html -v D:\dockerFile\nginx\conf:/etc/nginx/conf.d -d nginx# 重新加载配置文件docker exec nginx nginx -s reload
三、配置文件
nginx.conf 配置文件:
user nginx; worker_processes auto; error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/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"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; }
这里引用了另外一个配置文件default.conf
server { listen 80; listen [::]:80; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
根据上述文件,我们可以很明显的将 nginx.conf 配置文件分为三部分:
第一部分:全局块
从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配 置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以 及配置文件的引入等。
比如上面第一行配置的:
worker_processes auto;
这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是 会受到硬件、软件等设备的制约
第二部分:events 块
比如上面的配置:
events { worker_connections 1024;}
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。
上述例子就表示每个 work process 支持的最大连接数为 1024.
这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。
第三部分:http 块
http { include /etc/nginx/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"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; } # default.conf 文件中内容 server { listen 80; listen [::]:80; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。 需要注意的是:http 块也可以包括 http 全局块、server 块。
这里的 server 块被单独拿出来放到了 default.conf 文件中
①、http 全局块 http 全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
②、server 块 这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了 节省互联网服务器硬件成本。 每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。 而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。
1、全局 server 块
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置。
2、location 块 一个 server 块可以配置多个 location 块。
这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称 (也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓 存和应答控制等功能,还有许多第三方模块的配置也在这里进行。