Nginx是大型架构核心,下面我重点详解Nginx配置@mikechen
Nginx 配置
Nginx 的配置由指令 (directives) 和上下文 (contexts) 组成。
所有指令都以分号 ; 结尾,一个标准的 Nginx 配置文件 (nginx.conf) 看起来像这样:

全局块 (main):配置影响 Nginx 服务器整体运行的指令,如 worker_processes (工作进程数)。
Events 块 (events {}):配置 Nginx 和用户之间的连接,如 worker_connections (每个工作进程的最大连接数)。
HTTP 块 (http {}):配置 HTTP 服务器的具体行为,这是我们最常配置的部分。它包含一个或多个 Server 块。
Server 块 (server {}):配置一个虚拟主机。每个 server 块可以定义一个独立的站点。
Location 块 (location {}):配置如何处理 URI (请求路径)。一个 server 块可以包含多个 location 块。
Server 块:配置你的网站
server 块是 Nginx 配置的核心,它定义了一个虚拟主机,一般对应一个域名。

1. 监听端口和域名
listen: 指定服务器监听的 IP 地址和端口。
listen 80;:监听所有 IP 的 80 端口。
listen 127.0.0.1:8080;:只监听本地的 8080 端口。
server_name: 指定服务器的域名或 IP 地址。
2. 定义根目录和首页
root: 指定网站的根目录。
index: 指定默认首页文件的名称。
示例:
server{
listen80;
server_name mywebsite.com;
root/var/www/mywebsite;
index index.html index.htm;
}Location 块:处理请求路径
location 块是 Nginx 强劲的关键,它根据 URI 路径来分发请求。
1. Location 匹配优先级

匹配规则有优先级,从高到低排列:
= (准确匹配):location = / 只匹配根目录。
^~ (前缀匹配,优先于正则):location ^~ /images/ 会匹配所有 /images/ 开头的请求,且不再检查后面的正则表达式。
~ 或 ~* (正则表达式):~ 是区分大小写的匹配,~* 是不区分大小写的匹配。
2. Location 块常用指令
proxy_pass: 将请求代理到另一个服务器,这是实现反向代理的核心。
rewrite: 使用正则表达式重写 URI。
示例:反向代理
server{
listen80;
server_name api.mywebsite.com;
location/{# 将请求代理到后端服务器proxy_pass http://localhost:3000;# 常用代理头,解决后端获取真实 IP 问题proxy_set_headerHost $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}Nginx高级配置
1. 负载均衡

使用 upstream 块定义一组后端服务器,然后在 location 中引用。
least_conn: 优先将请求分发给连接数最少的服务器。
ip_hash: 根据客户端 IP 地址分配请求,确保同一客户端总是被分发到同一服务器。
示例:
# 定义一个服务器组upstream backend_servers {# 负载均衡算法:默认是轮询 (round-robin)# 也可以是 least_conn; 或 ip_hash;server backend1.example.com;
server backend2.example.com;
}
server{
listen80;
server_name myapp.com;
location/{
proxy_pass http://backend_servers;}
}2. SSL/TLS 加密 (HTTPS)
配置 HTTPS 需要 SSL 证书和私钥。
示例:
server{# 监听 80 端口,并将所有 HTTP 请求重定向到 HTTPSlisten80;
server_name mysecureapp.com;
return301 https://$server_name$request_uri;
}
server{
listen443 ssl;
server_name mysecureapp.com;# 指定证书和私钥路径ssl_certificate/etc/nginx/certs/mysecureapp.com.pem;
ssl_certificate_key/etc/nginx/certs/mysecureapp.com-key.pem;# 其他安全配置ssl_protocolsTLSv1.2TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location/{
proxy_pass http://localhost:8080; # 代理到你的应用}
}Nginx性能优化
1. Gzip 压缩
启用 Gzip 可以显著减小文件大小,加快传输速度。
http{gzipon;gzip_varyon;gzip_comp_level5;# 压缩级别 1-9gzip_types text/plain text/css application/json application/javascript;}2. 错误页面
配置自定义错误页面,提供更好的用户体验。
server{
error_page404/404.html;
error_page500502503504/50x.html;
location=/404.html{
root/usr/share/nginx/html;internal;# 只能被 Nginx 内部重定向访问}# ...}