引言
Nginx 是一款高性能的 HTTP 和反向代理服务器,同时也是 IMAP/POP3/SMTP 代理服务器和通用的 TCP/UDP 代理服务器。它以其高并发、低资源消耗、易于扩展和配置灵活等特点,在现代互联网架构中占据重要地位。本文将详细介绍 Nginx 的常用配置,帮助读者从入门到实战掌握 Nginx 的配置技巧。
一、Nginx 简介
Nginx 由俄罗斯人 Igor Sysoev 开发,开源且轻量级。它的设计目标是高效处理高并发连接,支持高达 50,000 个并发连接。Nginx 还支持热部署,可以在不中断服务的情况下更新配置或升级软件。
二、Nginx 常用功能
1. 正向代理与反向代理
- 正向代理:代理客户端访问无法直接访问的服务器资源。
- 反向代理:代理服务器处理来自客户端的请求,并将其转发给内部网络上的服务器,然后将结果返回给客户端。反向代理常用于负载均衡和隐藏真实服务器地址。
2. 负载均衡
Nginx 支持多种负载均衡策略,包括轮询、加权轮询、IP hash 等,可以根据实际业务需求选择合适的策略。
3. Web 缓存
Nginx 可以对静态内容进行缓存,减少对后端服务器的请求,提高系统性能。同时,Nginx 也支持 FastCGI 缓存,适用于动态内容的缓存。
三、Nginx 配置文件结构
Nginx 的配置文件通常位于 /etc/nginx/ 目录下,主配置文件名为 nginx.conf。配置文件以区块(block)的形式组织,主要包括全局块、events 块、http 块等。
1. 全局块
主要设置影响 Nginx 服务器整体运行的配置指令,如运行用户、进程数、错误日志等。
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
2. events 块
影响 Nginx 服务器与用户的网络连接,如工作进程的最大连接数、事件驱动模型等。
events {
worker_connections 1024;
use epoll;
}
3. http 块
配置代理、缓存、日志、第三方模块等,是服务器配置中最频繁的部分。
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;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
}
四、常用配置示例
1. 反向代理配置
反向代理配置主要通过 proxy_pass 指令实现,将请求转发到后端服务器。
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_server;
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_server {
server 192.168.1.100:8080;
server 192.168.1.101:8080 backup;
}
2. 负载均衡配置
负载均衡配置通过 upstream 指令定义一组后端服务器,并通过反向代理将请求分发到这些服务器。
upstream myapp1 {
server backend1.example.com weight=5;
server backend2.example.com;
server backend3.example.com down;
}
server {
listen 80;
location / {
proxy_pass http://myapp1;
}
}
3. 日志配置
Nginx 支持详细的访问日志和错误日志记录,便于问题排查和性能分析。
http {
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;
error_log /var/log/nginx/error.log;
}
4. 缓存配置
开启缓存可以显著提高静态资源的访问速度。
http {
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g
inactive=60m use_temp_path=off;
server {
location /static/ {
proxy_pass http://backend;
proxy_cache my_cache;
proxy_cache_valid 200 302 60m;
proxy_cache_valid 404 1m;
}
}
}
五、Nginx 常用命令
- 查看 Nginx 版本:nginx -v
- 检查配置文件语法:nginx -t
- 启动 Nginx:systemctl start nginx 或 /usr/sbin/nginx
- 停止 Nginx:systemctl stop nginx 或 /usr/sbin/nginx -s stop
- 重启 Nginx:systemctl restart nginx 或 /usr/sbin/nginx -s reload
六、总结
Nginx 是一款功能强大的 Web 服务器和反向代理服务器,通过合理的配置可以显著提高系统的性能和稳定性。本文介绍了 Nginx 的常用功能和配置方法,包括反向代理、负载均衡、Web 缓存等,并提供了详细的配置示例和常用命令,希望能帮助读者更好地掌握 Nginx 的配置技巧。