Nginx基础讲解
Nginx基础讲解
Nginx 是一款高性能的 HTTP 服务器和反向代理服务器,广泛用于负载均衡、静态资源托管、SSL 终端等场景。以下是对 Nginx 的详细讲解:
1. Nginx 核心概念
事件驱动架构:基于异步非阻塞模型,高效处理高并发连接,资源占用低。
模块化设计:支持通过模块扩展功能(如 HTTP、Stream、gRPC 等)。
反向代理:接收客户端请求并转发至后端服务器,隐藏后端细节。
负载均衡:将流量分发到多个服务器,提升系统可用性和性能
2. 安装与配置
2.1 安装
- Ubuntu/Debian:
sudo apt update
sudo apt install nginx
- CentOS/RHEL:
sudo yum install epel-release
sudo yum install nginx
- 源码编译(定制化强):
./configure --prefix=/usr/local/nginx --with-http_ssl_module
make && make install
2.2 配置文件结构
主配置文件通常为 /etc/nginx/nginx.conf
,结构如下:
# 全局配置
user nginx;
worker_processes auto; # 工作进程数(建议设置为 CPU 核心数)
events {
worker_connections 1024; # 单个进程最大连接数
}
http {
# HTTP 相关配置
include /etc/nginx/mime.types;
server {
listen 80;
server_name example.com;
root /var/www/html;
location / {
index index.html;
}
}
}
3. 核心功能配置
3.1 静态文件服务
server {
listen 80;
server_name example.com;
root /var/www/html; # 静态文件根目录
location / {
try_files $uri $uri/ =404; # 尝试按路径查找文件
}
location /images/ {
alias /var/www/images/; # 路径别名(替换匹配部分)
}
}
3.2 反向代理
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_server; # 转发到后端
proxy_set_header Host $host; # 传递原始 Host 头
proxy_set_header X-Real-IP $remote_addr;
}
}
# 定义后端服务器组
upstream backend_server {
server 192.168.1.1:8080;
server 192.168.1.2:8080;
}
3.3 负载均衡策略
- 轮询(默认) :依次分发请求。
- 权重(weight) :按权重分配流量。
- IP 哈希(ip_hash) :同一客户端 IP 固定到同一后端。
- 最少连接(least_conn) :优先发给连接数最少的后端
upstream backend {
ip_hash;
server 192.168.1.1:8080 weight=2; # 权重为2
server 192.168.1.2:8080;
server 192.168.1.3:8080 backup; # 备用服务器
}
3.4 SSL/TLS 配置
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;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
location / {
proxy_pass http://backend;
}
}
# HTTP 重定向到 HTTPS
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
4. 高级配置
4.1 URL 重写
location /old {
rewrite ^/old/(.*) /new/$1 permanent; # 301 重定向
}
# 条件重写(如移动端跳转)
if ($http_user_agent ~* "mobile") {
rewrite ^(.*)$ /mobile/$1 break;
}
4.2 访问控制
location /admin {
allow 192.168.1.0/24;
deny all;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd; # 密码文件
}
4.3 跨域(CORS)
location /api {
add_header 'Access-Control-Allow-Origin' 'http://client.com';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization';
}