专业编程基础技术教程

网站首页 > 基础教程 正文

nginx配置详解史上最全

ccvgpt 2024-09-09 02:20:56 基础教程 48 ℃

Nginx 是一个高性能的 HTTP 服务器和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。以下是 Nginx 配置文件的详解,它涵盖了各种常见的配置选项和高级用法。假设配置文件路径为 /etc/nginx/nginx.conf。



nginx配置详解史上最全

全局配置块# 定义Nginx运行的用户和用户组

user nginx;
# 定义Nginx进程数,一般设置为CPU核心数
worker_processes auto;
# 定义Nginx进程PID存放路径
pid /var/run/nginx.pid;
# 定义错误日志存放路径和日志级别
error_log /var/log/nginx/error.log warn;

事件块

events {
# 设置单个进程的最大连接数
worker_connections 1024;
# 是否允许多worker进程间接受连接
use epoll; # Linux推荐使用epoll
multi_accept on;
}

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;
# 减少网络报文段的数量
tcp_nopush on;
tcp_nodelay on;
# 连接超时时间
keepalive_timeout 65;
# 哈希表大小
types_hash_max_size 2048;
# Gzip模块设置
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
# 默认虚拟主机配置
server {
# 监听端口
listen 80;
# 服务器名称
server_name example.com www.example.com;
# 访问日志路径
access_log /var/log/nginx/example.com.access.log main;
# 根目录
root /var/www/example.com/html;
# 默认首页
index index.html index.htm;
# 位置块
location / {
try_files $uri $uri/ =404;
}
# 静态文件缓存配置
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
access_log off;
}
# 反向代理配置
location /api/ {
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;
proxy_set_header X-Forwarded-Proto $scheme;
}
# 禁止访问隐藏文件
location ~ /\.ht {
deny all;
}
}
# HTTPS虚拟主机配置
server {
listen 443 ssl;
server_name example.com www.example.com;
# SSL证书和密钥文件路径
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
# SSL设置
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
root /var/www/example.com/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
access_log off;
}
location /api/ {
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;
proxy_set_header X-Forwarded-Proto $scheme;
}
location ~ /\.ht {
deny all;
}
}
# 负载均衡配置
upstream backend_server {
server backend1.example.com weight=5;
server backend2.example.com;
}
}

全局配置块

  • user: 定义Nginx的运行用户和用户组。
  • worker_processes: 定义Nginx的工作进程数,通常设置为CPU核心数。
  • pid: 定义Nginx进程ID文件的存放路径。
  • error_log: 定义错误日志的存放路径和日志级别。

事件块

  • worker_connections: 设置每个工作进程的最大连接数。
  • use: 指定事件驱动模型,Linux推荐使用epoll。
  • multi_accept: 允许工作进程同时接受多个连接。

HTTP块

  • include: 包含其他配置文件,如MIME类型文件。
  • default_type: 设置默认的MIME类型。
  • log_format: 定义日志格式。
  • access_log: 设置访问日志存放路径。
  • sendfile: 开启高效文件传输模式。
  • tcp_nopush: 减少网络报文段的数量。
  • tcp_nodelay: 减少延迟。
  • keepalive_timeout: 连接的超时时间。
  • types_hash_max_size: 哈希表大小。
  • gzip: 开启Gzip压缩,定义压缩类型和级别。

服务器块(Server Block)

  • listen: 监听端口。
  • server_name: 定义服务器名称,可以配置多个。
  • access_log: 设置服务器的访问日志存放路径。
  • root: 设置网站根目录。
  • index: 设置默认首页文件。
  • location: 定义URL匹配规则。try_files: 尝试访问文件或目录,如果失败返回404。proxy_pass: 反向代理配置,转发请求到后端服务器。proxy_set_header: 设置转发请求的头信息。expires: 设置静态文件的缓存时间。deny: 禁止访问特定文件。

HTTPS配置

  • ssl_certificate: 定义SSL证书文件路径。
  • ssl_certificate_key: 定义SSL证书密钥文件路径。
  • ssl_session_cache: 设置SSL会话缓存。
  • ssl_session_timeout: 设置SSL会话超时时间。
  • ssl_ciphers: 定义SSL加密套件。
  • ssl_prefer_server_ciphers: 优先使用服务器端的加密套件。

负载均衡配置

  • upstream: 定义后端服务器组。server: 定义后端服务器和权重。

重定向配置

server {
listen 80;
server_name www.example.com;
return 301 https://example.com$request_uri;
}

限制IP访问

location /admin {
allow 192.168.1.0/24;
deny all;
}
防止DDOS攻击
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_req_zone $binary_remote_addr zone=req:10m rate=1r/s;
server {
location / {
limit_conn addr 10;
limit_req zone=req burst=5 nodelay;
}
}
}

Nginx配置示例涵盖了基本和高级配置选项。你可以根据实际需求进行调整和扩展。

最近发表
标签列表