Nginx
什么是Nginx
Nginx是一个 高性能 的Http和反向代理Web服务器、且提供邮件服务,特点 占用内存小、并发能力强,支持高达 5 万个并发数。
Nginx架构
- 一个
Master
进程和多个Worker
进程,Master
进程管理维护Worker
进程,Worker
进程以独立的单进程的io多路复用的网络模型(Linux),从而实现热部署;worker
进程的数量以服务器的cpu数量对应时能把性能发挥到极致。 - Nginx最大连接数:worker_processes * worker_connections,即:
worker
进程*每个进程的连接数。 - Nginx处理静态资源最大并发数:worker_processes * worker_connections/2,即:一个请求2个连接。
- Nginx处理反向代理最大并发数:worker_processes * worker_connections/4,即:一个请求4个连接。
Nginx应用
反向代理
- 正向代理:VPN,安装在客户端
- 反向代理:安装在服务端
动静分离
* 将不需要后台操作的静态文件进行缓存操作,让后台更多的处理动态请求,提高资源的访问速度。
负载均衡
- 内置策略:
- 轮询(默认):均等访问不同的服务器。
- 加权轮询:根据不同的服务器配置,添加不同的权重,权重越大访问越多。
- ip hash:以客户端请求的ip进行hash操作,以hash结果将同一个ip分发到同一台服务器进行处理,可以解决
session
不共享问题。
- 扩展策略:
Nginx 配置
-
全局块:
-
worker_processes auto:根据
cpu
个数自动分配worker
进程数量。- worker_processes 1:处理并发服务,值越大支持并发越高,受环境的制约(cpu)。
-
worker_priority -20 :设置cpu进程时间片的时间长度,通过调整
NICE
即静态优先级-20~19
区间。静态优先级越小优先级越高。#查看NICE的值,nginx为nginx应用的用户组 top -u nginx
-
worker_cpu_affinity cpumask:为了
worker
进程能够使用cpu
的高速缓存,将worker
进程和cpu
进行一对一绑定。#示例 4个cpu,绑定cpu0,cpu1,cpu2,cpu3 worker_processes 4; worker_cpu_affinity 0001 0010 0100 1000; #查看cpu缓存级数、每级大小。 dmesg | grep cache #查看cpu0 缓存大小(有三级缓存) cat /sys/devices/system/cpu/cpu0/cache/index1/size cat /sys/devices/system/cpu/cpu0/cache/index2/size cat /sys/devices/system/cpu/cpu0/cache/index3/size #查看cpu1 缓存大小(有三级缓存) cat /sys/devices/system/cpu/cpu1/cache/index1/size
-
accept_mutex on|off:
Linux 3.9+
时使用“reuseport
”会有更好性能,建议:设置为off
关闭。#reuseport 示例 list address[:port] reusepor; accept_mutex off;
-
-
events 块:网络连接。
- worker_connections 1024:每个work支持的最大连接数。
-
http 块:代理、缓存、日志、负载均衡、动静分离。
-
server块:
- listen 80:监听tcp80端口。
- server_name localhost:主机名称。
- location [ = | / | ~ | ~ | ^~ ] uri*:
- = :不含正则的严格匹配。
- ~ :正则匹配,并区分大小写。
- ~* :正则匹配,并区分大小写。
- ^~ :不含正则,标识uri和请求字符串匹配度最高的locaion进行处理。
- **proxy_pass http://127.0.0.1:8080 **:反向代理
Nginx优化
-
三大方向:文件IO、网络IO、网络连接。
- 文件IO
- 优化读取速度:sendfile on;
- 文件IO
-
设置进程静态优先级:worker_priority -20
-
设置
worker
进程数:worker_processes cpu个数 -
绑定
cpu
提高缓存命中率:worker_cpu_affinity cpumask -
worker
进程间的负载均衡:accept_mutex off -
设置单个
worker
进程连接数:worker_connections 1024 -
设置所有
worker
进程连接数:worker_rlimit_nofile 1024 -
使用epoll事件模型:在
RHEL/CentOS
系统默认使用epoll事件。#优化示例 worker_processes 4; worker_cpu_affinity 0001 0010 0100 1000; worker_priority -15; events { worker_connections 1024; accept_mutex off; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; gzip on; server { listen 80 reuseport; server_name www.a.com a.com; #将所有HTTP请求通过rewrite指令重定向到HTTPS。 #rewrite ^(.*)$ https://$host$1; return 301 https://$host$request_uri; location = / { proxy_pass http://127.0.0.1:8080/en/; } location / { proxy_pass http://127.0.0.1:8080/; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } server { listen 443 ssl reuseport; server_name www.a.com a.com; root html; index index.html index.htm; ssl_certificate /usr/local/5514532_www.a.com.pem; ssl_certificate_key /usr/local/5514532_www.a.com.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #表示使用的加密套件的类型。 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #表示使用的TLS协议的类型。 ssl_prefer_server_ciphers on; location = / { proxy_pass http://127.0.0.1:8080/en/; } location / { proxy_pass http://127.0.0.1:8080/; } }
Linux安装、操作
1、官方下载-稳定版本
http://nginx.org/en/download.html
2、上传解压安装
#解压到/usr/local/目录下
tar -zxvf nginx-1.20.0.tar.gz -C /usr/local/
#安装依赖
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
#重命名
cd /usr/local/
mv nginx-1.20.0 nginx
#进入到Nginx
cd nginx
#执行配置
./configure --with-http_stub_status_module --with-http_ssl_module --with-pcre
#编译安装
make && make install
#检查是否安装成功
/usr/local/nginx/sbin/nginx -v
3、常用命令
#启动 /usr/local/nginx/sbin/nginx #重载配置 /usr/local/nginx/sbin/nginx -s reload #强制停止 /usr/local/nginx/sbin/nginx -s stop #正常停止 /usr/local/nginx/sbin/nginx -s quit #检查语法 /usr/local/nginx/sbin/nginx -t #查看进程 ps -ef|grep nginx #开放防火墙80端口(同时服务器安全组也要开放) firewall-cmd --permanent --zone=public --add-port=80/tcp #重载防火墙配置 firewall-cmd --reload
浏览器访问显示:Welcome to Nginx !
4、配置负载均衡
upstream webService {
server 47.168.10.121:8080 weight 2;
server 47.168.10.122:8080 weight 1;
server 47.168.10.100:8080 weight 1;
}
server {
....
location ~*^.+$ {
proxy_pass http://webService;
}
}
5、配置反向代理
server {
....
location / {
proxy_pass http://127.0.0.1:8080;
}
}
6、配置Https
- 上传SSL证书
- 配置nginx.conf
server {
listen 443 ssl;
#配置HTTPS的默认访问端口为443。
#如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
#如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
server_name yourdomain.com; #需要将yourdomain.com替换成证书绑定的域名。
root html;
index index.html index.htm;
#需要将cert-file-name.pem替换成已上传的证书文件的名称。
ssl_certificate cert/cert-file-name.pem;
#需要将cert-file-name.key替换成已上传的证书密钥文件的名称。
ssl_certificate_key cert/cert-file-name.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#表示使用的加密套件的类型。
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #表示使用的TLS协议的类型。
ssl_prefer_server_ciphers on;
location / {
root html; #站点目录。
index index.html index.htm;
}
}
#设置HTTP请求自动跳转HTTPS
server {
listen 80;
server_name yourdomain.com; #需要将yourdomain.com替换成证书绑定的域名。
#方式一
rewrite ^(.*)$ https://$host$1; #将所有HTTP请求通过rewrite指令重定向到HTTPS。
#方式二:性能一般
#rewrite ^ https://$host$request_uri? permanent;
#方式三:性能最好
#return 301 https://$host$request_uri;
}
#开放防火墙443端口(同时服务器安全组也要开放)
firewall-cmd --permanent --zone=public --add-port=443/tcp
#重载防火墙配置
firewall-cmd --reload
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南