大家好,我是小麦。今天分享一篇关于NGINX常用的配置清单。
作为一名服务端研发工程师,接触服务器的时间也比较多。在项目对外提供服务,我们一般会使用NGINX来提供对外的服务,因此NGINX的操作也非常多,这就需要我们对NGINX比较熟悉,因此特意整理了一份相对完善的清单。
首先还是对NGINX做一个简单的介绍,分别从是什么?有什么优势?以及使用的业务场景来聊聊NGINX。
什么是NGINX?
NGINX是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3代理服务器。它最初由Igor Sysoev开发,旨在解决C10K问题(即在单台服务器上同时处理1万个客户端连接)。如今,NGINX已经发展成为广泛使用的Web服务器、负载均衡器和反向代理服务器。
NGINX的优势
- 高性能:NGINX以事件驱动架构为基础,能够高效地处理大量并发连接,适用于高流量网站。
- 低资源消耗: NGINX使用较少的内存和CPU资源,能够高效地管理资源,适合在资源有限的环境中运行。
- 稳定性:NGINX在长时间高负载下表现出色,能够保持稳定运行,减少宕机和性能下降的风险。
- 灵活性和可扩展性:通过模块化架构,NGINX可以根据需要进行扩展和定制,以满足特定应用场景的需求。
- 反向代理和负载均衡:NGINX内置强大的反向代理和负载均衡功能,可以分发流量到多个后端服务器,提高应用的可用性和性能。
- 支持多种协议: 除了HTTP/HTTPS,NGINX还支持IMAP、POP3等邮件协议,以及HTTP/2、WebSocket等现代协议。
- 静态文件处理: NGINX在处理静态文件(如HTML、CSS、JavaScript和图像)方面非常高效,适合用于静态内容服务。
常用的业务场景
1、Web服务器:
作为HTTP和HTTPS服务器,提供静态和动态内容服务。用于托管网站和Web应用程序。
2、反向代理:
代理客户端请求,将请求转发到一个或多个后端服务器。用于隐藏后端服务器的真实地址,提供负载均衡和缓存功能。
3、负载均衡器:将流量分发到多个后端服务器,以提高应用程序的可用性和响应速度。支持多种负载均衡策略(如轮询、IP哈希、最少连接等)。
4、内容缓存:缓存后端服务器的响应,减少后端服务器的负载,提高响应速度。适用于静态内容和动态内容的缓存。
5、 SSL/TLS终端:处理SSL/TLS加密和解密,保护数据传输的安全性。用于HTTPS网站和Web应用程序的安全通信。
6、API网关:管理和保护API请求,提供身份验证、速率限制、日志记录和监控等功能。适用于微服务架构和分布式系统。
7、 邮件代理服务器: 代理IMAP和POP3邮件请求,提高邮件服务的性能和安全性。
示例配置
1. 基本Web服务器配置
代码语言:shell复制server {
listen 80;
server_name example.com;
location / {
root /var/www/html;
index index.html index.htm;
}
}
2. 反向代理配置
代码语言:shell复制server {
listen 80;
server_name api.example.com;
location / {
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;
}
}
3. 负载均衡配置
代码语言:shell复制http {
upstream backend {
server backend1.example.com;
server backend2.example.com;
}
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;
}
}
}
4. 静态内容缓存配置
代码语言:shell复制server {
listen 80;
server_name cache.example.com;
location / {
proxy_pass http://backend_server;
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
}
}
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m inactive=60m;
上述内容便是我对NGINX的大致总结,下面就来分享一下具体的只知识内容。
基本配置
- user: 指定运行 NGINX 服务的用户和用户组。user www-data;
- worker_processes: 设置工作进程的数量,通常设置为CPU核心数。worker_processes auto;error_log /var/log/nginx/error.log warn;pid /var/run/nginx.pid;性能优化events { worker_connections 1024; }keepalive_timeout 65;sendfile on;tcp_nopush on;tcp_nodelay on;HTTP 配置http { include /etc/nginx/mime.types; include /etc/nginx/conf.d/*.conf; }
- error_log: 指定错误日志文件的位置和日志级别。
- pid: 指定存储 NGINX 进程 ID 的文件。
- worker_connections: 设置每个工作进程的最大连接数。
- keepalive_timeout: 设置服务器与客户端连接的保持时间。
- sendfile: 启用高效的文件传输。
- tcp_nopush: 提高网络包的传输效率。
- tcp_nodelay: 提高小包数据的传输效率。
- include: 包含其他配置文件。
- default_type: 设置默认的 MIME 类型。default_type application/octet-stream;
- log_format: 定义日志格式。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: 指定访问日志文件的位置和格式。access_log /var/log/nginx/access.log main;
- send_timeout: 设置发送响应的超时时间。send_timeout 60s;
反向代理配置
- proxy_pass: 设置反向代理的地址。location / { proxy_pass http://localhost:8080; }
- proxy_set_header: 设置传递给后端服务器的请求头。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;
- proxy_connect_timeout: 设置连接后端服务器的超时时间。proxy_connect_timeout 60s;
- proxy_send_timeout: 设置向后端服务器发送请求的超时时间。proxy_send_timeout 60s;
- proxy_read_timeout: proxy_read_timeout 60s;
- 设置读取后端服务器响应的超时时间。
SSL/TLS 配置
- ssl_certificate: 指定SSL证书文件。ssl_certificate /etc/nginx/ssl/nginx.crt;
- ssl_certificate_key: 指定SSL证书密钥文件。ssl_certificate_key /etc/nginx/ssl/nginx.key;
- ssl_protocols: 指定支持的SSL/TLS协议。ssl_protocols TLSv1.2 TLSv1.3;
- ssl_ciphers: 指定支持的加密算法。ssl_ciphers HIGH:!aNULL:!MD5;
- ssl_prefer_server_ciphers: 启用服务器首选加密算法。ssl_prefer_server_ciphers on;
虚拟主机配置
- server: 定义一个虚拟主机配置。server { listen 80; server_name example.com; location / { root /var/www/html; index index.html index.htm; } }
- listen: 指定服务器监听的端口和协议。listen 443 ssl;server_name example.com;root /var/www/html;index index.html index.htm;安全配置1、limit_req_zone: 设置速率限制区域。http { limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s; }2、 limit_req: 应用速率限制规则。server { location /api/ { limit_req zone=mylimit burst=5 nodelay; } }
- server_name: 指定虚拟主机的域名。
- root: 设置网站的根目录。
- index: 设置默认的主页文件。
- deny: 拒绝特定IP地址的访问。location / { deny 192.168.1.1; allow all; }
- allow: 允许特定IP地址的访问。location / { allow 192.168.1.0/24; deny all; }
- auth_basic: 启用基本HTTP认证。location /secure/ { auth_basic "Restricted Area"; auth_basic_user_file /etc/nginx/.htpasswd; }
其他有用的配置
- rewrite: 配置URL重写规则。location /old-path/ { rewrite ^/old-path/(.*)$ /new-path/$1 permanent; }
- return: 配置返回特定的HTTP状态码和页面。location / { return 404; }
- try_files: 尝试按照顺序找到文件。location / { try_files $uri $uri/ =404; }
- gzip: 启用Gzip压缩。gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml rss text/javascript;
- expires: 设置缓存控制头。location / { expires 30d; }
完整的 NGINX 配置示例
代码语言:shell复制user www-data;
worker_processes auto;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
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;
error_log /var/log/nginx/error.log warn;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
server {
listen 80;
server_name example.com;
root /var/www/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location /api/ {
limit_req zone=mylimit burst=5 nodelay;
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set