Appearance
Nginx
导航目录
正向代理
功能说明:正向代理是指代理服务器代理用户请求,与用户请求方向一致,主要用于客户端访问外部资源时的中转。
- 核心作用:
- 突破网络限制,访问被屏蔽的网站
- 提高访问速度,通过缓存机制减少重复请求
- 隐藏客户端真实 IP,保护用户隐私
配置示例:
js
server {
listen 8080;
resolver 8.8.8.8;
location / {
proxy_pass http://$http_host$request_uri;
}
}
反向代理
功能说明:反向代理是指代理服务器处理用户请求,与用户请求方向相反,主要用于服务器端的负载均衡和请求分发。
- 核心作用:
- 负载均衡:将请求分发到多个后端服务器,提高系统可用性和性能
- 隐藏真实服务器:保护后端服务器的真实 IP,提高安全性
- SSL 终端:在代理服务器上处理 HTTPS 连接,减轻后端服务器负担
- 缓存静态资源:减少后端服务器的请求压力
配置示例:
js
upstream backend {
server 192.168.1.100:8080;
server 192.168.1.101:8080;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
全局设置优化
功能说明:通过优化 Nginx 的全局配置参数,提高服务器性能和稳定性。
worker_processes:设置 Nginx 服务的进程数,推荐设置为 CPU 内核数,充分利用多核性能
worker_processes 4;
worker_cpu_affinity:将 Nginx 进程绑定到特定 CPU 核心,避免进程在不同核心间切换,提高硬件资源利用率
worker_cpu_affinity 0001 0010 0100 1000;
worker_rlimit_nofile:设置一个进程允许打开的最大文件数,理论上越大越好,但不可以超过系统限制
worker_rlimit_nofile 200000;
worker_connections:设置单个进程的最大连接数,最大连接数 = worker_processes × worker_connections
events { worker_connections 65535; }
系统文件限制设置
功能说明:查看和修改服务器最大可以打开文件的数量,这是优化 Nginx 性能的重要系统设置。
操作命令:
bash
# 查看当前系统文件限制
ulimit -a
# 修改最大打开文件数
ulimit -n 300000永久设置:
bash
# 编辑系统限制配置文件
vi /etc/security/limits.conf
# 添加以下内容
* soft nofile 300000
* hard nofile 300000升级 HTTP/2
功能说明:启用 HTTP/2 协议,提高网站加载速度和性能。
前提条件:
- Nginx 版本:必须在 1.9.5 以上
- OpenSSL 版本:必须在 1.0.2e 及以上
配置示例:
js
server {
listen 443 ssl http2;
server_name example.com;
# SSL 配置
ssl_certificate /path/to/certificate.crt;
ssl_certificate_key /path/to/private.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://backend;
}
}HTTP/2 优势:
- 多路复用:多个请求可以在同一个连接上并行处理
- 服务器推送:服务器可以主动推送资源给客户端
- 头部压缩:减少 HTTP 头部的传输大小
- 二进制传输:更高效的数据传输格式
核心模块配置
功能说明:配置 Nginx 的核心模块,包括进程管理、连接数、压缩、负载均衡等关键功能。
js
# Nginx进程数,建议设置为等于CPU总核心数
worker_processes 1;
# 全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
# error_log logs/error.log;
# 一个Nginx进程打开的最多文件
worker_rlimit_nofile 65535;
# 工作模式与连接数上限
events {
# 单个进程最大连接数(最大连接数=连接数*进程数)
# 该值受系统进程最大打开文件数限制,需要使用命令ulimit -n 查看当前设置
worker_connections 65535;
}
# 设定HTTP服务器
http {
# 长连接超时时间,单位是秒,默认为0
keepalive_timeout 65;
# gzip压缩功能设置
gzip on; # 开启gzip压缩输出
gzip_comp_level 6; # 压缩等级
gzip_types application/javascript text/css text/html application/json; # 压缩类型
# HTTP代理服务全局设置
client_max_body_size 10m; # 客户端最大请求体大小
# 设定负载均衡后台服务器列表
upstream backend {
server 192.168.10.100:8080 max_fails=2 fail_timeout=30s;
server 192.168.10.101:8080 max_fails=2 fail_timeout=30s;
}
# 虚拟主机的配置
server {
# 监听端口
listen 80;
# 域名可以有多个,用空格隔开
server_name localhost frontend.com;
# 代理配置
location / {
proxy_pass http://127.0.0.1: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;
}
# 图片缓存时间设置
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
expires 10d;
}
# JS和CSS缓存时间设置
location ~ .*\.(js|css)?$ {
expires 1h;
}
}
}CORS 配置
功能说明:跨域资源共享(CORS)配置,允许不同域名的客户端访问服务器资源。
简单请求
定义:满足以下条件的请求称为简单请求:
- 请求方法:
HEAD、GET、POST - HTTP 头信息:只包含以下字段:
AcceptAccept-LanguageContent-LanguageLast-Event-IDContent-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain
非简单请求
定义:不满足简单请求条件的请求,例如:
- 请求方法是
PUT、DELETE或OPTIONS Content-Type字段的类型是application/json- 包含自定义头部信息
预检机制:非简单 CORS 请求会先发送一个 OPTIONS 预检请求,服务器需要返回 200 状态码以允许后续请求。
配置示例:
js
location / {
add_header 'Access-Control-Allow-Origin' '*';// 跨域白名单
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';
add_header 'Access-Control-Allow-Headers' 'Content-Type';
# 处理非简单请求
if ($request_method = 'OPTIONS') {
return 200;
}
}基础配置
功能说明:Nginx 的基础配置模板,包含进程管理、日志、HTTP 和 Stream 模块的基本设置。
js
# 运行用户
user nginx;
# 进程数
worker_processes 4;
# 加载模块
include /usr/share/nginx/modules/mod-stream.conf;
# 错误日志
error_log /var/log/nginx/error.log warn;
# PID 文件
pid /var/run/nginx.pid;
# 事件模块配置
events {
# 单个进程最大连接数
worker_connections 1024;
}
# HTTP 模块配置
http {
# 包含 MIME 类型定义
include /etc/nginx/mime.types;
# 默认 MIME 类型
default_type application/octet-stream;
# 关闭服务器版本信息
server_tokens off;
# 开启代理错误拦截
proxy_intercept_errors on;
# 日志格式定义
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'"$http_host" "$upstream_addr" "$upstream_status" "$upstream_response_time" "$request_time"';
# 访问日志
access_log /var/log/nginx/access.log main;
# 客户端最大请求体大小
client_max_body_size 100m;
# 开启 sendfile
sendfile on;
# 开启 TCP_NOPUSH
# tcp_nopush on;
# 长连接超时时间
keepalive_timeout 65;
# 开启 gzip 压缩
# gzip on;
# 大客户端头部缓冲区
# large_client_header_buffers 4 1m;
# 包含其他配置文件
include /etc/nginx/conf.d/*.conf;
# 限流配置
limit_req_zone $binary_remote_addr zone=myRateLimit:10m rate=10r/s;
}
# Stream 模块配置(用于 TCP/UDP 代理)
stream {
# 日志格式定义
log_format basic '$time_iso8601 $remote_addr '
'$protocol $status $bytes_sent $bytes_received '
'$session_time $upstream_addr '
'"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
# 访问日志
access_log /var/log/nginx/stream.log basic buffer=1k flush=5s;
# 包含其他 Stream 配置文件
include /etc/nginx/conf.d/*.tcp;
}静态资源配置
功能说明:配置 Nginx 作为静态资源服务器,处理前端静态文件和 API 代理。
js
server {
# 监听端口
listen 50080;
# 服务器名称
server_name localhost;
# 字符集设置
# charset koi8-r;
# 访问日志
# access_log logs/host.access.log;
# 静态资源配置
location /internet_payment_account {
# 静态文件路径
alias /usr/share/nginx/html/frontapp/internet_payment_account/dist;
# 默认索引文件
index index.html index.htm;
# 处理单页应用路由
try_files $uri $uri/ /internet_payment_account/index.html;
}
# API 代理配置
location /ipa-bizcenter/api {
# 客户端最大请求体大小
client_max_body_size 50m;
# 代理到后端 API 服务
proxy_pass http://10.123.78.82:8001/ipa-bizcenter;
# 代理头信息设置
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}静态资源优化建议:
- 启用 gzip 压缩:减少静态文件传输大小
- 设置合理的缓存时间:根据文件类型设置不同的缓存策略
- 使用 CDN:将静态资源部署到 CDN,提高访问速度
- 启用 HTTP/2:支持多路复用,提升加载性能