Nginx 是一款高性能的开源 Web 服务器,也可以用作反向代理、负载均衡器和 HTTP 缓存。由于其轻量级和高效的设计,Nginx 被广泛用于处理高并发连接场景。在这篇博客中,我将介绍 Nginx 的基本配置,并分享一些常见的实用配置技巧,帮助你快速上手。
1. Nginx 基础配置
Nginx 的核心配置文件通常是 nginx.conf,它通常位于 /etc/nginx/nginx.conf 路径下(对于 Linux 系统),或者在 Windows 下位于 Nginx 的安装目录。以下是一个基本的 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:
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,可以这样配置:
nginx
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 的后端服务:
nginx
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,你可以这样配置:
nginx
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 哈希等。
轮询负载均衡:
nginx
upstream backend {
server backend1.example.com;
server backend2.example.com;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
}
}
基于权重的负载均衡 :
你可以为不同的后端服务器设置不同的权重,权重越高的服务器将接收到更多的请求。
nginx
upstream backend {
server backend1.example.com weight=3;
server backend2.example.com weight=1;
}
IP 哈希负载均衡 :
使用 IP 哈希将相同 IP 的请求分配到同一个后端服务器上。
nginx
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
}
6. 总结
Nginx 作为一个功能强大的 Web 服务器,其配置灵活性和强大的反向代理、负载均衡、HTTPS 支持,使其成为构建高性能 Web 应用的首选。无论你是想运行简单的静态网站,还是构建复杂的微服务架构,Nginx 都能满足你的需求。