引言
Nginx作为全球使用率最高的Web服务器之一,凭借其高性能、低资源消耗和强大的反向代理能力,成为企业级应用的核心组件。本文将深入讲解Nginx核心配置项、使用注意事项及典型应用场景,助你快速掌握这一利器!
一、Nginx核心配置项详解
1. 全局配置(main块)
- worker_processes: 建议设置为CPU核心数,最大化利用硬件资源。
nginx
worker_processes auto; # 自动适配CPU核心数
- error_log: 日志路径与级别,调试时设为debug,生产环境建议warn。
nginx
error_log /var/log/nginx/error.log warn;
2. 事件驱动(events块)
- worker_connections: 单进程最大连接数,默认1024,高并发场景需调高。
nginx
events {
worker_connections 4096;
use epoll; # Linux推荐epoll模型
}
3. HTTP服务(http块)
- MIME类型:通过include mime.types定义文件类型映射。
- 日志格式:自定义访问日志字段,如记录客户端IP、请求耗时等。
nginx
log_format main '$remote_addr - $time_local "$request"';
access_log /var/log/nginx/access.log main;
4. 虚拟主机(server块)
- 反向代理: 将请求转发至后端服务,需设置proxy_set_header传递真实信息。
nginx
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;
}
}
二、Nginx使用注意事项
1. 安全加固
- 隐藏版本号: 防止攻击者利用已知漏洞。
nginx
server_tokens off;
- HTTPS强制跳转: 避免明文传输风险。
nginx
if ($scheme != "https") {
return 301 https://$server_name$request_uri;
}
2. 性能优化
- 静态资源缓存: 减少后端压力,设置合理过期时间。
nginx
location ~* .(jpg|css|js)$ {
expires 30d;
access_log off;
}
- 限流防CC攻击: 通过limit_req_zone限制请求频率。
nginx
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
3. 常见配置错误
- 路径权限: 确保root或alias指向的目录存在且可读。
- 配置语法: 使用nginx -t检查配置,避免语法错误导致服务中断。
三、Nginx的典型应用场景
1. 反向代理与负载均衡
- 多服务器分发: 通过upstream模块实现请求均衡。
nginx
upstream backend {
server 192.168.1.1:8080 weight=5;
server 192.168.1.2:8080;
}
2. 静态资源托管
- 直接服务文件: 适用于图片、CSS/JS等静态内容。
nginx
server {
location /static/ {
root /var/www/;
}
}
3. SSL/TLS终端
- HTTPS配置: 绑定证书,提升数据传输安全性。
nginx
server {
listen 443 ssl;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
}
四、实战案例:搭建微信公众号后台
- 配置反向代理: 将80端口请求转发至本地Node.js服务。
- 域名备案: 确保server_name使用已备案域名。
- 日志监控: 通过access_log分析接口调用情况。
反向代理完整例子
server {
listen 80;
server_name wechat.example.com; # 你的备案域名
# 微信服务器验证配置
location = / {
default_type text/plain;
return 200 'success'; # 仅用于临时测试,正式环境需删除
}
# 代理所有请求到Node.js服务
location / {
proxy_pass http://127.0.0.1:5050;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
公众号:【码农小站】