nginx.conf 中的常用配置及其应用场景
1. 基本配置
1.1 worker_processes 和 worker_connections
worker_processes
表示 Nginx 使用的工作进程数量。一般设置为服务器 CPU 核心数。worker_connections
代表每个工作进程允许的最大并发连接数。这两个参数决定了 Nginx 能处理的最大并发连接数。
worker_processes auto;
events {
worker_connections 1024;
}
1.2 access_log 和 error_log
access_log
和 error_log
分别表示 Nginx 的访问日志和错误日志的位置和级别。通常将这两个日志分开存放,以便更好地分析和定位问题。
http {
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
}
2. 虚拟主机
使用 server
块可以为 Nginx 定义虚拟主机。这可以让 Nginx 同时托管多个网站。
http {
server {
listen 80;
server_name example.com;
location / {
root /var/www/example.com;
index index.html index.htm;
}
}
}
3. 反向代理
反向代理是 Nginx 中最常用的功能之一。通过 proxy_pass
配置项,我们可以将客户端的请求转发给后端服务器。这可以用于隐藏真实服务器地址、负载均衡等场景。
http {
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_server;
}
}
}
4. 负载均衡
Nginx 可以实现简单的负载均衡。通过 upstream
配置块,我们可以为后端服务器定义一个代理组,然后在 proxy_pass
配置项中引用该代理组。
http {
upstream backend_servers {
server backend1.example.com;
server backend2.example.com;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_servers;
}
}
}
5. 缓存
通过在 location
块中配置缓存,Nginx 可以缓存后端服务器的响应。这可以提高网站性能并减轻后端服务器压力。
http {
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m;
server {
listen 80;
server_name example.com;
location / {
proxy_cache my_cache;
proxy_pass http://backend_server;
}
}
}
6. 限流
通过 limit_req
和 limit_req_zone
配置项,我们可以在 Nginx 中实现简单的请求限流。这可以防止恶意请求和爬虫对后端服务器产生过大的压力。
http {
limit_req_zone $binary_remote_addr zone=my_limit:10m rate=1r/s;
server {
listen 80;
server_name example.com;
location / {
limit_req zone=my_limit burst=5 nodelay;
proxy_pass http://backend_server;
}
}
}
7. HTTPS 配置
为了保证数据传输安全,我们通常需要为网站配置 HTTPS。在 Nginx 中,我们可以通过 ssl_certificate
和 ssl_certificate_key
配置项指定 SSL 证书和私钥的路径。同时,需要设置 listen
配置项以便在 443 端口上监听 HTTPS 请求。
http {
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/ssl/certs/example.com.crt;
ssl_certificate_key /etc/ssl/private/example.com.key;
location / {
proxy_pass http://backend_server;
}
}
}
8. 跨域资源共享(CORS)
在前后端分离的应用中,我们通常需要配置跨域资源共享(CORS)。在 Nginx 中,我们可以通过 add_header
配置项添加相关的 HTTP 响应头。
http {
server {
listen 80;
server_name api.example.com;
location / {
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain; charset=utf-8';
add_header 'Content-Length' 0;
return 204;
}
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
proxy_pass http://backend_server;
}
}
}
以上就是 Nginx 中 nginx.conf
常用配置及其应用场景的介绍。通过灵活配置和应用这些功能,我们可以充分发挥 Nginx
的性能优势,提高网站的运行效率和安全性。