分布式文件系统 -Nginx部分
1. 初识 Nginx
1.1 什么是 Nginx?
Nginx(发音为“engine x”)是一款开源的高性能服务器软件,由俄罗斯的工程师 Igor Sysoev 开发。它是用 C 语言编写的,并以其出色的性能和灵活性广受欢迎。此外,淘宝还基于 Nginx 修改开发了 Tengine 以适应其特定需求。
1.2 Nginx 能做什么?
Nginx 的功能非常多样化,主要包括:
- Web 服务器:它可以解析 HTTP 协议,处理网站的静态内容。
- 反向代理服务器:Nginx 可以充当反向代理,将客户端的请求转发到内部服务器,从而隐藏内部结构,增加安全性和负载均衡。
- 邮件服务器:它能够解析邮件相关的协议,如 POP3、SMTP 和 IMAP,实现邮件服务功能。
1.3 Nginx 的优势
Nginx 之所以受到广泛欢迎,主要得益于以下几个优势:
- 高性能:在高峰期,Nginx 能够处理数万的并发连接,相比其他 Web 服务器,它的响应速度更快。
- 高扩展性:Nginx 采用低耦合设计,支持丰富的第三方模块,能够灵活扩展功能。
- 高可靠性:Nginx 经过大规模网站的检验,例如 sina.com.cn、xunlei.com 和 163.com。每个 worker 进程相对独立,出现错误时可以快速启动新的 worker 进程。
- 低内存消耗:在 Nginx 中,一般情况下,10000 个非活跃的 HTTP Keep-Alive 连接仅消耗 2.5M 内存。单机支持超过 10 万个并发连接,实际数量远未封顶。
- 热部署:Nginx 采用 master 和 worker 分离设计,可以在不中断服务的情况下升级 Nginx 可执行文件。
- 宽松的 BSD 许可协议:BSD 许可协议允许用户免费使用、修改 Nginx 源码,并重新发布修改版(如淘宝的 Tengine)。
2. 正向与反向代理
2.1 正向代理
正向代理是一种位于客户端和原始服务器之间的服务器。客户端需要将请求发送给代理服务器,然后由代理服务器转发给原始服务器。原始服务器处理请求后,将响应数据返回给代理服务器,最后由代理服务器将数据传递给客户端。正向代理的典型用途包括:
- 局域网访问外部资源:例如,学校或公司网络中的客户端通过正向代理访问互联网。

反向代理
反向代理方式是指代理原始服务器来接受来自
Internet
的链接请求,然后将请求转发给内部网络上的原始 服务器,并将从原始服务器上得到的结果转发给Internet
上请求数据的客户端。那么顾名思义,反向代理就是位于Internet
和原始服务器之间的服务器,对于客户端来说就表现为一台服务器,客户端所发送的请 求都是直接发送给反向代理服务器,然后由反向代理服务器统一调配。

3. Nginx 的安装与配置
3.1 安装步骤
-
下载相关依赖:
- OpenSSL(用于 HTTPS 通信):OpenSSL 官网
- ZLib(用于数据压缩):ZLib 官网
- PCRE(用于解析正则表达式):PCRE 官网
依赖的安装步骤:
# OpenSSL ./configure make sudo make install # ZLib ./configure make sudo make install # PCRE ./configure make sudo make install -
安装 Nginx:
下载 Nginx 的源码包后,执行以下命令来安装:
./configure --with-openssl=../openssl-master --with-pcre=../pcre-8.40 --with-zlib=../zlib-1.2.11 make sudo make install -
Nginx 目录结构:
- 默认安装目录:
/usr/local/nginx - 配置文件目录:
/usr/local/nginx/conf - 静态资源目录:
/usr/local/nginx/html - 日志目录:
/usr/local/nginx/logs - 可执行程序目录:
/usr/local/nginx/sbin
Nginx 可执行程序的路径为
/usr/local/nginx/sbin/nginx。 - 默认安装目录:
-
配置环境变量:
-
将
/usr/local/nginx/sbin/添加到环境变量PATH中,或创建软链接:ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
-
-
启动、停止与重新加载 Nginx:
-
启动 Nginx:
sudo nginx -
立即停止 Nginx:
sudo nginx -s stop -
平滑停止 Nginx(待当前操作完成后停止):
sudo nginx -s quit -
重新加载配置:
sudo nginx -s reload
-
-
测试安装是否成功:
知道 Nginx 所在主机的 IP 地址,例如
192.168.1.100,在浏览器中访问该 IP 地址。如果看到 Nginx 的欢迎界面,则说明安装成功。

Nginx 配置指南
配置文件的位置
Nginx 的主配置文件通常位于:
/usr/local/nginx/conf/nginx.conf
配置文件的组织结构
Nginx 的配置文件分为几个主要模块:
-
http 模块:用于配置 HTTP 相关的通信设置。
- server 模块:定义每台 Web 服务器的配置。
- location 模块:处理客户端请求的具体匹配和操作。
-
mail 模块:处理邮件相关的配置和操作。
常用配置项
-
user:
user nobody;指定 Nginx 进程的运行用户。若遇到权限问题,可以将
nobody更改为root。 -
worker_processes:
worker_processes 1;设置 Nginx 工作进程的数量。推荐设置为 CPU 核心数。
-
error_log:
error_log logs/error.log;指定错误日志文件的位置。
-
pid:
pid logs/nginx.pid;指定存放 Nginx 进程 ID 的文件。
-
events 模块:
events { use epoll; worker_connections 1024; }use epoll;:指定使用epoll作为多路 IO 复用模型。worker_connections 1024;:每个工作进程的最大连接数。
-
http 模块:
http { server { listen 80; server_name localhost; charset utf8; location / { root yundisk; index index.html index.htm; } } }listen 80;:指定 Web 服务器监听的端口(HTTP 默认端口是 80,HTTPS 是 443,FTP 是 21,SSH/SFTP 是 22)。server_name localhost;:指定服务器域名。charset utf8;:指定字符编码。location / { ... }:处理根路径请求,root yundisk;指定静态文件目录,index index.html index.htm;指定默认首页文件。
配置静态网页
-
设置静态网页存储目录
默认目录是:
/usr/local/nginx/html你可以创建一个新的目录,例如:
mkdir /usr/local/nginx/yundisk -
部署静态网页
在
/usr/local/nginx/yundisk目录下放置你的静态网页文件,例如login.html。要使其可通过 HTTP 访问,请在配置文件中设置location模块:location / { root /usr/local/nginx/yundisk; index index.html index.htm; }配置完成后,重新加载 Nginx 配置:
sudo nginx -s reload通过访问
http://192.168.80.254/login.html来测试配置是否生效。
以下是优化后的博客内容:
Nginx 配置示例
1. 如何配置目录和静态文件
1.1 目录和文件的存放
- hello:这是一个目录名,用于存放静态网页文件。
- reg.html:应放置在
hello目录中。
1.2 配置 Nginx 的 location
要让 Nginx 正确处理 hello 目录下的文件,需要在配置文件中添加相应的 location 配置。例如:
location /hello/ {
root /usr/local/nginx/yundisk;
index xx.html;
}
location /hello/ { ... }:指定处理以/hello/开头的请求。root /usr/local/nginx/yundisk;:指定静态文件的根目录。index xx.html;:当访问/hello/目录时,如果没有指定文件,Nginx 会返回xx.html。
2. 配置默认网页
2.1 访问目录
当你访问 http://192.168.80.254/upload/ 时,Nginx 会显示目录下的默认网页 upload.html,因为:
location /upload/ {
root /usr/local/nginx/yundisk;
index upload.html;
}
location /upload/ { ... }:指定处理以/upload/开头的请求。root /usr/local/nginx/yundisk;:指定静态文件的根目录。index upload.html;:当访问/upload/目录时,Nginx 会返回upload.html文件。注意,index指令只在访问目录时生效,当直接请求文件时不会使用index指定的默认文件。
配置文件示例
以下是一个完整的 Nginx 配置示例,展示了如何处理静态文件和目录:
http {
server {
listen 80;
server_name localhost;
location /hello/ {
root /usr/local/nginx/yundisk;
index xx.html;
}
location /upload/ {
root /usr/local/nginx/yundisk;
index upload.html;
}
}
}
配置完成后,重新加载 Nginx 配置使更改生效:
sudo nginx -s reload
优化后的博客内容如下:
3. 负载均衡
3.1 什么是负载均衡?
负载均衡(Load Balancing)是一种将网络流量或应用请求分配到多个服务器上的技术,以实现高可用性和高性能。在负载均衡架构中,请求会根据负载均衡算法分发到不同的应用服务器上。这样,即使某个服务器出现故障,其他服务器仍然可以处理请求,从而实现高可用性。此外,通过集群模式中的负载均衡,应用服务器可以支持纵向扩展,以应对业务增长带来的高并发场景。
3.2 负载均衡算法
常见的负载均衡算法包括轮询、权重和 IP 哈希。默认算法为轮询。
(1)轮询算法
轮询算法将请求按顺序逐一分配给不同的服务器。如果某个服务器出现故障,并且请求超过最大失败次数 max_fails(默认为 1 次),则在失效时间 fail_timeout(默认为 10 秒)内不会再向该节点发送请求。
示例配置:
upstream defaultReverseProxyServer {
server 192.168.0.1:8080;
server 192.168.0.2:8080;
}
(2)权重算法
权重算法根据服务器的权重分配请求。服务器权重可以根据其处理能力设置。如果某个服务器出现故障,并且请求超过最大失败次数 max_fails(可以设置为 N 次),则在失效时间 fail_timeout(默认为 10 秒,可设置)内不会再向该节点发送请求。
示例配置:
upstream weightReverseProxyServer {
server 192.168.0.1:8080 weight=10 max_fails=2 fail_timeout=5s;
server 192.168.0.2:8080 weight=5 max_fails=2 fail_timeout=5s;
}
(3)IP 哈希算法
IP 哈希算法根据用户访问 IP 的哈希结果分配请求。如果来自同一 IP 的请求会被分配到同一台服务器,这种方法适用于需要保持会话状态的应用,如动态网页。
示例配置:
upstream ipHashReverseProxyServer {
ip_hash;
server 192.168.0.1:8080;
server 192.168.0.2:8080;
}
选择合适的算法
在实际应用中,基于权重的负载均衡算法常被使用,因为许多集群部署的服务器资源不均匀。通过设置不同的权重,可以更高效地利用资源并提高并发处理能力。

浙公网安备 33010602011771号