沉默是金,总会发光
大家好,我是沉默
想象你正经营一家超火爆的线上商店,每天成千上万的顾客蜂拥而至。
你的服务器需要同时处理成千上万的请求,保障网站不宕机,且响应快速顺畅。
这时,Nginx 作为你的“后台大管家”,正默默高效地支撑着上亿用户的访问。它是如何做到既高效又稳定的?本文将带你轻松掌握Nginx的核心秘密!
**-**01-
什么是Nginx?
Nginx(读作“engine x”)是一款免费、开源的高性能 HTTP 和反向代理服务器,同时支持 IMAP、POP3、SMTP 等邮件服务。它以低内存占用和强大并发处理能力著称,能稳定支持 5 万甚至更多的并发连接,成为众多大型网站(如淘宝、GitHub)的首选。
-
轻量高效:启动快,运行稳,几个月都无需重启。
-
多协议支持:HTTP、反向代理及邮件代理一应俱全。
-
BSD-like协议授权:免费、开源、跨平台。
**-**02-
正向代理 vs 反向代理
| 代理类型
|
作用对象
|
主要用途举例
|
用户感知
| | --- | --- | --- | --- | |
正向代理
|
代理客户端
|
VPN:用户借助代理访问国外网站
|
需要客户端配置,用户主动用代理
| |
反向代理
|
代理服务器
|
大型网站负载均衡、隐藏真实服务器IP
|
用户无感知,直接访问代理服务器IP
|
反向代理栗子:淘宝背后有成百上千台服务器,用户访问是发到反向代理服务器,由它分配到具体服务器,且登录状态保持透明。
**-**03-
Nginx 负载均衡&动静分离
当单台服务器压力山大时,如何轻松分摊任务?
Nginx 支持多种负载均衡策略:
-
轮询(默认)
请求按顺序依次分发,简单高效,适合性能均衡的服务器群。 -
加权轮询
为服务器分配不同权重,性能强的承担更多请求,充分利用资源。 -
ip_hash
根据用户 IP 地址分配请求,保证同一用户总访问同一台服务器,解决登录状态丢失问题。
静态文件由 Nginx 直接cao,动态请求转交后端
Nginx 静态文件处理能力强悍,速度极快,但对 PHP、Python 等动态页面支持有限。
企业级架构中,通常用动静分离策略:
-
静态资源(图片、CSS、JS)由 Nginx 直接提供。
-
动态请求代理到 PHP-FPM、uWSGI 或 Apache 等后端处理。
**-**04-
Nginx 配置实战宝典
常用命令
cd /usr/local/nginx/sbin/
./nginx # 启动
./nginx -s stop # 停止
./nginx -s quit # 安全退出
./nginx -s reload # 重新加载配置文件
ps aux|grep nginx # 查看进程
安装与部署简要
-
上传并解压源码包
tar -zwxf nginx-xxx.tar.gz -
进入目录,执行配置脚本
./configure -
编译安装
make && make install -
配置网站,启用配置文件
sudo rm -rf /etc/nginx/sites-available/default
sudo nano /etc/nginx/sites-available/myapp
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t # 检查配置
sudo systemctl restart nginx
配置结构与示例
-
配置结构
全局块(定义用户、进程数)、events块(事件模型、连接数)、http块(路由、反向代理、负载均衡)。 -
关键指令
-
proxy_pass转发请求 -
upstream定义服务器集群 -
location配置请求匹配规则(支持精准、前缀、正则匹配) -
gzip启用内容压缩 -
client_max_body_size限制上传大小 -
HTTPS 示例
user www-data;
worker_processes 2;
events {
use epoll;
worker_connections 2048;
keepalive_timeout 60;
}
http {
include mime.types;
default_type application/octet-stream;
upstream backend {
server 192.168.0.1:8000 weight=5;
server 192.168.0.2:8000 weight=1;
server 192.168.0.4:8001 backup;
}
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
- 负载均衡配置
upstream backend {
server 192.168.0.1 weight=5;
server 192.168.0.2 weight=1;
server 192.168.0.3 backup;
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Location 匹配优先级
| 匹配方式
|
说明
|
优先级(高到低)
| | --- | --- | --- | |
=
|
精确匹配
|
1
| |
^~
|
字符串前缀匹配
|
2
| |
~
|
区分大小写正则匹配
|
3
| |
~*
|
不区分大小写正则匹配
|
4
| |
!~ / !~*
|
不匹配正则
|
5/6
| |
/
|
通用匹配
|
7
|
静态文件缓存与压缩
-
缓存:
expires 10d;让浏览器缓存资源,提高访问速度 -
gzip压缩:开启后传输内容大幅缩小,提升加载速度
日志与超时配置
-
日志格式
通过log_format自定义访问日志格式 -
超时控制
keepalive_timeout,proxy_connect_timeout等避免资源被占用太久,保护服务器性能
总结
Nginx 是 Web 服务器中的性能利器,既可高效处理静态内容,也能配合后端服务实现动态请求代理。通过反向代理和负载均衡,轻松支撑大规模并发访问。合理配置动静分离、缓存、压缩和安全策略,能大幅提升网站性能与安全性。
**-**05-
粉丝福利
我这里创建一个程序员成长&副业交流群,和一群志同道合的小伙伴,一起聚焦自身发展,可以聊:技术成长与职业规划,分享路线图、面试经验和效率工具,探讨多种副业变现路径,从写作课程到私活接单,主题活动、打卡挑战和项目组队,让志同道合的伙伴互帮互助、共同进步。如果你对这个特别的群,感兴趣的,可以加一下,微信通过后会拉你入群,但是任何人在群里打任何广告,都会被我T掉。