一、Nginx 简介
1.1 基本概念
Nginx 是一款高性能的 HTTP 和反向代理服务器,同时也提供了 IMAP/POP3/SMTP 服务。由俄罗斯的工程师 Igor Sysoev 开发,在 2004 年首次发布。Nginx 以其轻量级、高并发处理能力、低内存消耗和丰富的功能特性,在互联网行业中被广泛应用。无论是大型网站、云计算平台,还是小型企业应用,Nginx 都能稳定可靠地提供服务。
1.2 核心功能
- HTTP 代理与反向代理:Nginx 可以作为正向代理服务器,代替客户端向目标服务器发起请求;也能作为反向代理服务器,接收客户端请求,并将请求转发到后端的多个服务器上,实现负载均衡。
- 负载均衡:通过多种负载均衡算法,如轮询、加权轮询、IP 哈希等,将客户端请求均匀地分配到后端的多个服务器节点,提高系统的处理能力和可用性。
- 静态资源服务:能够高效地处理静态文件(如 HTML、CSS、JavaScript、图片等)的请求,直接将静态资源返回给客户端,减轻后端应用服务器的压力。
- 缓存功能:支持对请求和响应进行缓存,减少对后端服务器的访问次数,提高响应速度,降低带宽消耗。
- SSL/TLS 加密:提供 SSL/TLS 证书配置,实现 HTTPS 协议,保证数据传输的安全性和完整性。
- 虚拟主机:可以在一台物理服务器上通过配置多个虚拟主机,为不同的域名或 IP 地址提供独立的 Web 服务。
1.3 应用场景
- Web 服务器:替代传统的 Apache 等 Web 服务器,为网站提供高效的静态和动态内容服务。
- 反向代理服务器:隐藏后端真实服务器,保护服务器安全,并通过负载均衡提高服务的可用性和性能。
- API 网关:作为 API 请求的入口,对 API 请求进行转发、限流、鉴权等处理。
- 邮件代理服务器:处理 IMAP/POP3/SMTP 协议相关的邮件服务。
二、Nginx 配置
2.1 配置文件结构
Nginx 的配置文件通常位于/etc/nginx/nginx.conf(不同操作系统和安装方式可能有所不同)。其配置文件采用分层结构,主要分为以下几个部分:
- 全局块:配置影响 Nginx 全局运行的指令,如工作进程数、错误日志路径等。
user nginx; worker_processes auto; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; |
- events 块:配置 Nginx 的网络连接相关参数,如最大连接数等。
events { worker_connections 1024; } |
- http 块:配置 HTTP 协议相关的指令,是 Nginx 配置的核心部分,包括服务器配置、虚拟主机配置、负载均衡配置等。
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; } |
在 http 块中,还可以包含多个 server 块,每个 server 块用于配置一个虚拟主机。
server { listen 80; server_name example.com; 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; } } |
2.2 关键配置项详解
- user:指定 Nginx 工作进程运行的用户和用户组,默认是nginx用户。
- worker_processes:设置 Nginx 工作进程的数量,通常设置为 CPU 核心数,以充分利用服务器资源。
- error_log:配置错误日志的路径和日志级别,常见的日志级别有debug、info、notice、warn、error、crit、alert、emerg。
- pid:指定 Nginx 主进程 ID 的存储文件路径。
- worker_connections:每个工作进程允许的最大连接数。
- listen:指定虚拟主机监听的 IP 地址和端口号,如listen 80;表示监听 80 端口,listen 192.168.1.100:80;表示监听特定 IP 的 80 端口。
- server_name:设置虚拟主机的域名,可以配置多个域名,如server_name example.com www.example.com;。
- location:用于匹配请求的 URL,并对匹配到的请求进行相应的处理。可以设置请求的根目录、索引文件、反向代理转发等。例如:
location /api/ { proxy_pass http://backend_servers; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } |
上述配置表示将以/api/开头的请求转发到名为backend_servers的后端服务器组,并设置相关的请求头信息。
2.3 负载均衡配置
Nginx 支持多种负载均衡算法,下面以加权轮询为例,介绍负载均衡的配置方法:
http { upstream backend_servers { server 192.168.1.101:8080 weight=5; server 192.168.1.102:8080 weight=3; server 192.168.1.103:8080; } server { listen 80; server_name example.com; location / { proxy_pass http://backend_servers; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } } |
在上述配置中,upstream定义了名为backend_servers的后端服务器组,其中包含三台服务器,通过weight参数设置了每台服务器的权重,权重越高,分配到的请求越多。server块中的proxy_pass指令将请求转发到backend_servers后端服务器组。
三、Nginx 命令
3.1 启动 Nginx
在安装好 Nginx 后,可以使用以下命令启动 Nginx 服务:
- systemd 方式(适用于大多数 Linux 发行版):
sudo systemctl start nginx |
- 传统方式:进入 Nginx 的安装目录(默认为/usr/sbin),执行以下命令:
sudo /usr/sbin/nginx |
3.2 停止 Nginx
- 快速停止:立即终止 Nginx 进程,可能会导致正在处理的请求中断。
sudo systemctl stop nginx |
或
sudo /usr/sbin/nginx -s stop |
- 优雅停止:等待所有正在处理的请求完成后再停止 Nginx 服务。
sudo systemctl quit nginx |
或
sudo /usr/sbin/nginx -s quit |
3.3 重启 Nginx
- 先停止再启动:
sudo systemctl restart nginx |
- 重新加载配置文件:在不停止 Nginx 服务的情况下,重新加载配置文件,使新的配置生效。
sudo systemctl reload nginx |
或
sudo /usr/sbin/nginx -s reload |
3.4 检查配置文件语法
在修改 Nginx 配置文件后,可以使用以下命令检查配置文件是否存在语法错误:
sudo nginx -t |
如果配置文件语法正确,会显示类似 “nginx: the configuration file /etc/nginx/nginx.conf syntax is ok” 的提示信息;如果存在错误,会提示具体的错误位置和原因。
3.5 查看 Nginx 版本
使用以下命令可以查看 Nginx 的版本信息:
nginx -v |