Nginx
Nginx(发音同”engine x”)是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP邮件代理服务。
它以其高性能、高并发、低内存消耗的特点而闻名,被广泛应用于各种互联网应用中。

Nginx的核心特点:
- 高性能: Nginx采用事件驱动的异步非阻塞处理方式,能够高效地处理大量并发连接。
- 高并发: 能够处理数以万计的并发连接,适合高流量的网站。
- 低内存消耗: 相对于传统的Web服务器,Nginx消耗的内存更少。
- 稳定性高: Nginx的架构设计使其具有很高的稳定性,能够长时间稳定运行。
- 丰富的模块: 拥有丰富的模块,可以满足各种不同的需求。
- 灵活的配置: Nginx的配置文件语法简洁明了,易于理解和配置。
Nginx常见使用场景:

Web服务器:
Nginx可以作为独立的Web服务器,提供静态和动态网页服务。
它能够高效地处理静态资源,如图片、CSS、JavaScript等。
反向代理服务器:
Nginx可以作为反向代理服务器,将客户端的请求转发给后端的多个服务器。
隐藏后端服务器的真实IP地址,提高安全性。
负载均衡器:
Nginx可以将请求均匀地分配给后端的多个服务器,实现负载均衡。
提高网站的可用性和性能。
缓存服务器:
Nginx可以缓存静态资源,减轻后端服务器的压力。
提高网站的响应速度。
静态资源服务器:
Nginx能够非常高效的处理静态资源。
负载均衡算法
轮询(Round Robin):

将请求按顺序依次分配给后端的每个服务器。
简单易用,但无法处理服务器性能差异的情况。
加权轮询(Weighted Round Robin):

根据服务器的性能设置不同的权重,将请求按权重比例分配。
能够更好地利用服务器资源。
最少连接数(Least Connections):

将请求分配给当前连接数最少的服务器。
能够更好地处理服务器负载不均衡的情况。
IP哈希(IP Hash):
根据客户端的IP地址进行哈希运算,将来自同一IP地址的请求分配给同一台服务器。

能够实现会话保持。
Nginx配置详解
Nginx的配置文件主要由以下几个部分组成:

全局块
events {
events块指令;
}
http {
http块指令;
server {
server块指令;
location / {
location块指令;
}
}
}
配置结构说明:
| 块 | 作用说明 |
|---|---|
| main | 全局设置,如 worker 数量 |
| events | 连接处理设置,epoll 等 |
| http | HTTP 服务相关配置 |
| server | 虚拟主机定义 |
| location | URL 匹配与转发策略 |
全局块:
设置Nginx的全局参数,如工作进程数、日志路径等。
常见指令:
worker_processes: 设置Nginx工作进程的数量。通常建议设置为CPU核心数。error_log: 定义错误日志文件的路径和日志级别。pid: 指定Nginx进程ID文件的路径。user: 设置Nginx工作进程运行的用户和组。
events块:
设置Nginx的工作模式和连接数。
常见指令:
worker_connections: 设置每个工作进程可以处理的最大并发连接数。use: 选择Nginx使用的事件驱动模型,如epoll(Linux)、kqueue(FreeBSD、macOS)等。
http块:
设置HTTP服务器的参数,包括server块和location块。
常见指令:
include: 允许包含其他配置文件。default_type: 设置默认的MIME类型。sendfile: 启用高效的文件传输。keepalive_timeout: 设置保持连接的超时时间。gzip: 启用Gzip压缩。
server块:
设置虚拟主机的参数,如监听端口、域名等。
常见指令:
listen: 指定监听的端口和IP地址。server_name: 设置虚拟主机的域名。root: 定义网站的根目录。index: 设置默认的首页文件。access_log: 定义访问日志文件的路径和格式。
location块:
设置请求的URL匹配规则和处理方式。
常见指令:
proxy_pass: 将请求转发给后端代理服务器。root: 设置指定uri的根目录。index: 设置指定uri的默认首页文件。rewrite: 重写URL。return: 返回指定的HTTP状态码或内容。
Nginx配置示例
1.静态文件配置
server {
listen 80;
server_name www.example.com;
location / {
root /var/www/html;
index index.html index.htm;
}
}
2.反向代理配置
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
3.负载均衡配置
upstream backend_servers {
least_conn;
server 10.0.0.1;
server 10.0.0.2;
}
server {
listen 80;
location / {
proxy_pass http://backend_servers;
}
}
mikechen睿哥
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。