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


浙公网安备 33010602011771号