如何配置 Nginx:从入门到进阶
Nginx 是一款高性能的开源 Web 服务器,也可以用作反向代理、负载均衡器和 HTTP 缓存。由于其轻量级和高效的设计,Nginx 被广泛用于处理高并发连接场景。在这篇博客中,我将介绍 Nginx 的基本配置,并分享一些常见的实用配置技巧,帮助你快速上手。
1. Nginx 基础配置
Nginx 的核心配置文件通常是 nginx.conf,它通常位于 /etc/nginx/nginx.conf 路径下(对于 Linux 系统),或者在 Windows 下位于 Nginx 的安装目录。以下是一个基本的 Nginx 配置结构示例:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;events {worker_connections 1024;
}http {include /etc/nginx/mime.types;default_type application/octet-stream;# 日志配置access_log /var/log/nginx/access.log;# 发送文件优化sendfile on;tcp_nopush on;# 连接超时keepalive_timeout 65;# 压缩传输gzip on;# 虚拟主机配置server {listen 80;server_name example.com;location / {root /var/www/html;index index.html;}# 错误页面配置error_page 500 502 503 504 /50x.html;location = /50x.html {root /usr/share/nginx/html;}}
}
配置结构解析:
- worker_processes:Nginx 使用的工作进程数,可以根据服务器 CPU 数量自动设置(auto)。
- events:定义工作进程可以处理的最大连接数。
- http:HTTP 服务的全局配置块,包括日志、文件传输和虚拟主机等配置。
- server:虚拟主机配置,用于定义不同的域名和端口的请求处理方式。
- location:定义 URL 路径的匹配规则。
2. Nginx 虚拟主机配置
虚拟主机允许我们在同一台服务器上处理多个站点。Nginx 的虚拟主机配置主要通过 server 块来实现。
基于域名的虚拟主机配置:
假设我们有两个站点,分别为 example.com 和 test.com,可以通过以下方式配置 Nginx:
server {listen 80;server_name example.com www.example.com;location / {root /var/www/example;index index.html;}
}server {listen 80;server_name test.com www.test.com;location / {root /var/www/test;index index.html;}
}
基于端口的虚拟主机配置:
如果你希望基于不同的端口来处理多个站点,例如 http://example.com:8080 和 http://example.com:8081,可以这样配置:
server {listen 8080;server_name example.com;location / {root /var/www/example;index index.html;}
}server {listen 8081;server_name example.com;location / {root /var/www/another_example;index index.html;}
}
3. Nginx 反向代理配置
Nginx 常用于反向代理,它能够将客户端的请求转发到后端服务器上,并将响应返回给客户端。这在负载均衡和应用分离的场景中非常常见。
以下是一个简单的反向代理配置,将请求转发给运行在 localhost:3000 的后端服务:
server {listen 80;server_name example.com;location / {proxy_pass http://localhost: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;proxy_set_header X-Forwarded-Proto $scheme;}
}
反向代理设置解析:
- proxy_pass:指定后端服务地址。
- proxy_set_header:用于设置请求头信息,确保后端应用能获取客户端的真实 IP 等信息。
4. Nginx HTTPS 配置(SSL/TLS)
为了提升网站安全性,我们通常使用 HTTPS。Nginx 支持使用 SSL 证书来加密流量,以下是基本的 HTTPS 配置步骤:
获取 SSL 证书
你可以通过 Let’s Encrypt 获取免费的 SSL 证书,或者从其他 CA 购买。获取证书后,将 .crt(证书文件)和 .key(私钥文件)保存在服务器上。
配置 HTTPS 虚拟主机:
假设证书路径为 /etc/ssl/certs/example.com.crt 和 /etc/ssl/private/example.com.key,你可以这样配置:
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;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers HIGH:!aNULL:!MD5;location / {root /var/www/html;index index.html;}
}# 重定向 HTTP 到 HTTPS
server {listen 80;server_name example.com;location / {return 301 https://$host$request_uri;}
}
5. 负载均衡配置
Nginx 还可以配置为负载均衡器,将请求分发到多个后端服务器。常见的负载均衡方式包括轮询(默认)、权重和 IP 哈希等。
轮询负载均衡:
upstream backend {server backend1.example.com;server backend2.example.com;
}server {listen 80;server_name example.com;location / {proxy_pass http://backend;}
}
基于权重的负载均衡:
你可以为不同的后端服务器设置不同的权重,权重越高的服务器将接收到更多的请求。
upstream backend {server backend1.example.com weight=3;server backend2.example.com weight=1;
}
IP 哈希负载均衡:
使用 IP 哈希将相同 IP 的请求分配到同一个后端服务器上。
upstream backend {ip_hash;server backend1.example.com;server backend2.example.com;
}
6. 总结
Nginx 作为一个功能强大的 Web 服务器,其配置灵活性和强大的反向代理、负载均衡、HTTPS 支持,使其成为构建高性能 Web 应用的首选。无论你是想运行简单的静态网站,还是构建复杂的微服务架构,Nginx 都能满足你的需求。