1. 全局配置
这些配置通常位于配置文件的最顶部,影响整个 NGINX 的行为。
-
worker_processes:
- 作用:指定 NGINX 进程的数量。建议设置为服务器 CPU 核心的数量以提高性能。
- 示例:
worker_processes 1;
-
error_log:
- 作用:指定错误日志文件的位置和日志级别(如
debug
,info
,notice
,warn
,error
)。 - 示例:
error_log /var/log/nginx/error.log warn;
- 作用:指定错误日志文件的位置和日志级别(如
-
pid:
- 作用:指定保存 NGINX 进程 ID 的文件。
- 示例:
pid /var/run/nginx.pid;
2. 事件配置
这些配置影响 NGINX 处理连接的方式。
- worker_connections:
- 作用:指定每个工作进程可以处理的最大连接数。
- 示例:
worker_connections 1024;
3. HTTP 模块
用于配置 HTTP 服务器相关的选项。
-
include:
- 作用:包含外部文件或配置,例如 MIME 类型配置文件。
- 示例:
include mime.types;
-
default_type:
- 作用:设置默认的 MIME 类型,用于无法识别的文件。
- 示例:
default_type application/octet-stream;
-
sendfile:
- 作用:开启或关闭
sendfile
系统调用,提高静态文件的传输效率。 - 示例:
sendfile on;
- 作用:开启或关闭
-
keepalive_timeout:
- 作用:指定客户端连接在空闲状态下保持连接的时间(秒)。
- 示例:
keepalive_timeout 65;
-
client_max_body_size:
- 作用:指定客户端请求的最大请求体大小。用于限制上传文件的大小。
- 示例:
client_max_body_size 20M;
-
gzip:
- 作用:启用或禁用 gzip 压缩,减少传输的数据量。
- 示例:
gzip on;
-
gzip_types:
- 作用:指定要压缩的 MIME 类型。
- 示例:
gzip_types text/plain text/css application/json application/javascript;
-
map:
- 作用:用于将变量的值映射到另一个变量。常用于复杂的条件判断。
- 示例:
map $http_upgrade $connection_upgrade { default upgrade; '' close; }
4. Server 块
用于定义虚拟服务器,可以根据域名、IP 地址或端口进行匹配。
-
listen:
- 作用:指定服务器监听的端口和协议。
- 示例:
listen 80;
或listen 443 ssl;
-
server_name:
- 作用:指定虚拟主机名。可以使用多个主机名,或使用通配符。
- 示例:
server_name example.com www.example.com;
-
ssl_certificate:
- 作用:指定 SSL 证书文件的位置。
- 示例:
ssl_certificate /etc/nginx/certs/ssl_certificate.crt;
-
ssl_certificate_key:
- 作用:指定 SSL 证书私钥的位置。
- 示例:
ssl_certificate_key /etc/nginx/certs/ssl_certificate.key;
-
location:
- 作用:定义如何处理特定的 URI 请求。
- 示例:
location / { root /var/www/html; index index.html; }
-
proxy_pass:
- 作用:将请求转发到其他服务器或应用。
- 示例:
proxy_pass http://backend_server;
5. SSL 配置
配置 HTTPS 相关选项,确保安全通信。
-
ssl_ciphers:
- 作用:指定支持的 SSL/TLS 加密套件。
- 示例:
ssl_ciphers HIGH:!aNULL:!MD5;
-
ssl_protocols:
- 作用:指定支持的 SSL/TLS 协议版本。
- 示例:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
-
ssl_prefer_server_ciphers:
- 作用:启用此选项后,服务器将优先选择它自己的加密算法,而非客户端首选的。
- 示例:
ssl_prefer_server_ciphers on;
6. 生成 SSL 证书的基本步骤
- 生成私钥:
openssl genpkey -algorithm RSA -out ssl_certificate.key
- 生成证书签名请求 (CSR):
openssl req -new -key ssl_certificate.key -out ssl_certificate.csr
- 使用 CSR 生成自签名证书:
openssl x509 -req -days 365 -in ssl_certificate.csr -signkey ssl_certificate.key -out ssl_certificate.crt
7. 常用的 NGINX 命令
- 启动 NGINX:
nginx
- 停止 NGINX:
nginx -s stop
- 平滑重启 NGINX:
nginx -s reload
- 测试配置文件:
nginx -t
8. 示例配置
# 全局配置
worker_processes 1; # 指定工作进程的数量,通常设为 CPU 核心数
error_log /var/log/nginx/error.log warn; # 指定错误日志的位置和日志级别
pid /var/run/nginx.pid; # 指定保存 NGINX 进程 ID 的文件
# 事件配置
events {
worker_connections 1024; # 每个工作进程最大连接数
}
# HTTP 模块配置
http {
include mime.types; # 包含 MIME 类型配置文件
default_type application/octet-stream; # 默认 MIME 类型
sendfile on; # 启用高效的文件传输
tcp_nopush on; # 启用 TCP_NOPUSH 选项,优化大文件传输
tcp_nodelay on; # 启用 TCP_NODELAY 选项,减少延迟
keepalive_timeout 65; # 设置客户端连接保持的超时时间(秒)
client_max_body_size 20M; # 限制客户端请求体的最大尺寸
client_body_buffer_size 128k; # 设置客户端请求体缓冲区大小
proxy_buffer_size 64k; # 设置代理缓冲区大小
proxy_buffers 32 64k; # 设置代理缓存区的数量和大小
proxy_busy_buffers_size 128k; # 设置忙碌缓存区的大小
gzip on; # 启用 gzip 压缩
gzip_http_version 1.1; # 指定支持 gzip 压缩的 HTTP 协议版本
gzip_vary on; # 启用 Vary 头部,以便缓存代理根据 gzip 进行内容变更
gzip_comp_level 6; # 设置 gzip 压缩级别(1-9)
gzip_proxied any; # 启用对所有代理请求的 gzip 压缩
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; # 指定需要 gzip 压缩的 MIME 类型
map $http_upgrade $connection_upgrade {
default upgrade; # 支持 WebSocket 升级
'' close; # 关闭连接
}
# 服务器配置
server {
listen 80; # 监听 HTTP 80 端口
server_name example.com www.example.com; # 设定虚拟主机名
root /var/www/html; # 设置网站根目录
index index.html index.htm; # 设置默认首页文件
location / {
try_files $uri $uri/ =404; # 尝试访问文件或目录,若未找到则返回 404
}
location /images/ {
root /var/www/images; # 配置图片目录
}
}
# SSL 配置
server {
listen 443 ssl; # 监听 HTTPS 443 端口
server_name secure.example.com; # 设置 HTTPS 主机名
ssl_certificate /etc/nginx/certs/ssl_certificate.crt; # 设置 SSL 证书路径
ssl_certificate_key /etc/nginx/certs/ssl_certificate.key; # 设置 SSL 证书私钥路径
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; # 配置 SSL 加密套件
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 启用的 SSL/TLS 协议版本
ssl_prefer_server_ciphers on; # 优先使用服务器配置的加密算法
location / {
root /var/www/secure; # 设置 HTTPS 目录
index index.html index.htm; # 设置默认首页文件
}
}
# 代理配置
server {
listen 8080; # 监听 HTTP 8080 端口
server_name proxy.example.com; # 设置代理主机名
location /api/ {
proxy_pass http://backend_server; # 将请求转发到后端服务器
proxy_set_header Host $host; # 设置请求头中的主机名
proxy_set_header X-Real-IP $remote_addr; # 设置客户端真实 IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 设置代理链中的客户端 IP
}
}
}
标签:certificate,配置文件,示例,server,说明,Nginx,nginx,gzip,ssl
From: https://www.cnblogs.com/daikaiqiang/p/18382262