什么是 Nginx?
Nginx(发音为“engine-x”)是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3 代理服务器。它最初是为了提高高并发下的性能而开发的,具有高效的处理并发连接的能力,因此被广泛应用于 Web 服务器、反向代理服务器、负载均衡器等场景。
Nginx 支持多种功能,最常见的用法包括:
- 静态文件服务器:处理 HTML、CSS、JavaScript、图片等静态内容。
- 反向代理:将客户端的请求转发到后台的应用服务器上,提供负载均衡等服务。
- 负载均衡:将请求均匀地分配给多台后端服务器。
- SSL/TLS 加密:支持 HTTPS 协议。
- WebSocket 支持:支持 WebSocket 协议的代理和负载均衡。
Nginx 安装
在 Ubuntu/Debian 上安装 Nginx
- 更新系统包:
sudo apt update
- 安装 Nginx:
sudo apt install nginx
- 启动 Nginx 服务:
sudo systemctl start nginx
- 设置 Nginx 在系统启动时自动启动:
sudo systemctl enable nginx
- 检查 Nginx 是否安装成功,可以通过访问服务器的 IP 地址来查看默认的欢迎页面。你可以使用浏览器访问
http://<服务器IP>。
在 CentOS/RHEL 上安装 Nginx
- 安装 EPEL 仓库:
sudo yum install epel-release
- 安装 Nginx:
sudo yum install nginx
- 启动 Nginx 服务:
sudo systemctl start nginx
- 设置 Nginx 在系统启动时自动启动:
sudo systemctl enable nginx
- 同样,可以通过浏览器访问服务器的 IP 地址检查是否成功。
Nginx 配置文件结构
Nginx 的配置文件一般位于 /etc/nginx/nginx.conf,这个文件包括了全局配置、HTTP 服务器配置、虚拟主机配置等。常见的配置项包括:
worker_processes:定义 Nginx 使用的工作进程数。server:每个server块代表一个虚拟主机。location:用于定义 URL 路径和后端服务的匹配规则。
# Nginx 主配置文件
worker_processes 1; # 工作进程数
events {
worker_connections 1024; # 每个进程允许的最大连接数
}
http {
include mime.types; # 包含 MIME 类型配置
default_type application/octet-stream;
# 访问日志和错误日志
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
# 定义虚拟主机
server {
listen 80; # 监听端口
server_name localhost; # 主机名
# 根目录和默认文件
root /usr/share/nginx/html;
index index.html index.htm;
# 访问配置
location / {
try_files $uri $uri/ =404;
}
}
}
配置 Nginx 作为反向代理
假设你有一个运行在端口 3000 上的后端应用,想通过 Nginx 来转发客户端请求:
-
打开 Nginx 配置文件
/etc/nginx/nginx.conf或者某个站点的配置文件(通常位于/etc/nginx/sites-available/)。 -
添加一个
server块:
server {
listen 80; # 监听 HTTP 请求
server_name example.com; # 虚拟主机名
location / {
proxy_pass http://127.0.0.1:3000; # 反向代理到本地的 3000 端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
- 保存文件并重新加载 Nginx 配置:
sudo systemctl reload nginx
此时,所有访问 example.com 的请求都会被转发到运行在本地 3000 端口的应用。
配置 HTTPS(SSL/TLS)
为了加密 Web 流量,通常会为网站配置 SSL/TLS(HTTPS)。你可以通过以下步骤启用 HTTPS:
获取 SSL 证书
你可以使用免费证书提供商 Let's Encrypt 获取 SSL 证书,或者购买商业证书。以 Let's Encrypt 为例,可以使用 certbot 工具:
sudo apt install certbot python3-certbot-nginx
然后运行以下命令自动配置 SSL:
sudo certbot --nginx -d example.com
Certbot 会自动获取 SSL 证书并修改 Nginx 配置以启用 HTTPS。
手动配置 SSL
如果你有自己的 SSL 证书文件,可以手动配置 Nginx 使用 SSL:
- 编辑你的 Nginx 配置文件,添加以下配置:
server {
listen 80;
server_name example.com;
# 强制重定向 HTTP 到 HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/ssl/certs/example.com.crt;
ssl_certificate_key /etc/ssl/private/example.com.key;
location / {
proxy_pass http://127.0.0.1:3000;
}
}
- 保存并重新加载 Nginx:
sudo systemctl reload nginx
查看 Nginx 状态与日志
- 查看 Nginx 服务状态:
sudo systemctl status nginx
- 查看 Nginx 错误日志:
tail -f /var/log/nginx/error.log
- 查看 Nginx 访问日志:
tail -f /var/log/nginx/access.log
总结
Nginx 是一个非常强大的 Web 服务器和反向代理服务器,适用于高并发的 Web 应用。它不仅提供了基本的静态文件服务,还支持负载均衡、SSL 加密和反向代理等多种功能。通过本教程的学习,你可以成功安装和配置 Nginx,并将其用于常见的 Web 应用场景中。
如果你需要更深入的了解,可以查阅 Nginx 官方文档。