学习 Nginx 的主要语法和配置选项对于有效地管理和优化 Web 服务器非常重要。以下是一些关键的 Nginx 语法和概念,涵盖了基本配置、反向代理、负载均衡、缓存等方面。
基本语法
-
配置文件结构
- Nginx 配置文件通常位于
/etc/nginx/nginx.conf
或/usr/local/nginx/conf/nginx.conf
。 - 配置文件由多个块组成,包括
main
块、events
块、http
块、server
块和location
块。
- Nginx 配置文件通常位于
-
注释
- 使用
#
进行单行注释。nginx
- 使用
# 这是一个注释
3.指令
- 指令分为简单指令和块指令。
- 简单指令由指令名和参数组成,以分号结尾。
nginx
worker_processes auto;
块指令由指令名和一对花括号 {}
组成,内部可以包含其他指令
nginx
events {worker_connections 1024;
}
主要配置块
-
main 块
- 定义全局配置。
nginx
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /run/nginx.pid;
2.events 块
- 定义连接处理的相关参数
nginx
events {worker_connections 1024;multi_accept on;use epoll;
}
3.http 块
- 包含与 HTTP 请求处理相关的配置。
nginx
http {include /etc/nginx/mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;gzip on;server {listen 80;server_name example.com;location / {root /usr/share/nginx/html;index index.html index.htm;}}
}
4.server 块
- 定义虚拟主机(站点)的具体配置。
nginx
server {listen 80;server_name example.com;location / {root /usr/share/nginx/html;index index.html index.htm;}
}
5.location 块
- 定义 URL 路径匹配规则及对应的处理方式
nginx
location /images/ {alias /data/images/;
}location ~ \.php$ {fastcgi_pass unix:/var/run/php-fpm.sock;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;
}
反向代理
-
proxy_pass
- 将请求转发到后端服务器。
nginx
location /api/ {proxy_pass http://backend_server;
}
- upstream
- 定义一组后端服务器。
nginx
upstream backend_server {server backend1.example.com;server backend2.example.com;
}
负载均衡
-
轮询
- 默认的负载均衡策略。
nginx
upstream backend_server {server backend1.example.com;server backend2.example.com;
}
加权轮询
- 根据权重分配请求。
nginx
upstream backend_server {server backend1.example.com weight=3;server backend2.example.com;
}
IP 哈希
- 根据客户端 IP 地址进行哈希分配。
nginx
upstream backend_server {ip_hash;server backend1.example.com;server backend2.example.com;
}
缓存
- proxy_cache
- 启用反向代理缓存。
nginx
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;server {location / {proxy_pass http://backend_server;proxy_cache my_cache;proxy_cache_valid 200 301 302 10m;proxy_cache_valid any 1m;}
}
日志记录
- access_log
- 记录访问日志。
nginx
access_log /var/log/nginx/access.log main;
log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';
SSL/TLS 配置
- SSL 证书
- 配置 HTTPS 支持。
nginx
server {listen 443 ssl;server_name example.com;ssl_certificate /etc/nginx/ssl/example.com.crt;ssl_certificate_key /etc/nginx/ssl/example.com.key;location / {root /usr/share/nginx/html;index index.html index.htm;}
}
示例配置
以下是一个综合示例,展示了上述大部分配置:
nginx
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /run/nginx.pid;events {worker_connections 1024;multi_accept on;use epoll;
}http {include /etc/nginx/mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;gzip on;proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;upstream backend_server {server backend1.example.com;server backend2.example.com;}server {listen 80;server_name example.com;location / {return 301 https://$host$request_uri;}}server {listen 443 ssl;server_name example.com;ssl_certificate /etc/nginx/ssl/example.com.crt;ssl_certificate_key /etc/nginx/ssl/example.com.key;access_log /var/log/nginx/access.log main;log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';location / {root /usr/share/nginx/html;index index.html index.htm;}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;proxy_cache my_cache;proxy_cache_valid 200 301 302 10m;proxy_cache_valid any 1m;}location ~ \.php$ {fastcgi_pass unix:/var/run/php-fpm.sock;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}}
}
总结
通过掌握上述 Nginx 配置的基本语法和常见配置选项,你可以有效地管理 Web 服务器,实现反向代理、负载均衡、缓存等功能,并确保高性能和高可用性。进一步的学习可以通过官方文档和其他资源来深入理解每个配置项的详细用法和最佳实践。