Nginx在Windows和Linux下的常用配置
- 前言
- 一、负载配置
- 二、动静分离
- 三、配置记录
- 1.运行原理
- 2.配置实例
前言
Nginx高性能HTTP和反向代理服务器,占内存少并发强,支持高达50000个并发连接数
一、负载配置
经过反向代理服务器,将请求平摊分发到多个服务器
负载均衡策略:
1.轮询(默认)
请求按照时间顺序逐一分配到不同后端服务器,如果宕机,能自动剔除
2.权重(weight)
weight 权重,默认为1,越高被分配的客户端越多
server ip:8080 weight=1
server ip:8081 weight=2
3.IP HASH
请求按照访问 ip 的 hash 结果分配,每个访客就可固定访问一个后端服务器
ip_hash
server ip:8080
server ip:8081
配置实例:
在 http 块中加入
http {
...
upstream server01 {
server ip:8080 weight=1;
server ip:8081 weight=2;
}
server {
listen 80;
server_name ip;
access_log logs/domain1.access.log main;
location / {
proxy_pass http://server01;
root html;
index index.html index.htm;
}
}
}
二、动静分离
静态资源和动态资源分开部署,可通过 location
指定转发,expires
设置缓存过期时间,无修改返回 304
,有修改返回 200
静态访问
静态资源目录
/data/imgs/1.png
/data/html/a.html
server {
location /html/ {
root /data/;
index index.html index.htm;
}
location /imgs/ {
root /data/;
autoindex on;
}
}
高可用
keepalived:要安装,要有虚拟IP,检测一个 Nginx 服务器宕机则会切换到另一个 Nginx 服务器
1.修改 etc 目录中的 keepalived.conf 完成高可用配置,主从配置
2.添加脚本,检测 Nginx 是否 keepalived
3.启动 Nginx 和 keepalived(systemctl start keepalived.service)
三、配置记录
1.运行原理
一个 master 和多个 worker
优点:
1.利于 Nginx 热部署操作
2.每个 worker 是独立进程,一个出问题,其他继续争抢,保证服务不会中断
3.linux 系统支持IO多路复用,worker 数量等同于CPU数量最优
worker 工作
客户端发送请求到 master,多个 worker 开始争抢得到任务再访问后端
worker 占用连接数,2个或4个
如果有4个worker的话,支持最大并发数
静态访问:worker_connections * worker_processes / 2
反向代理:worker_connections * worker_processes / 4
常用命令
版本 ./nginx -v
启动 ./nginx
关闭 ./nginx -s stop
重载 ./nginx -s reload
2.配置实例
全局块:影响服务器整体运行的配置指令部分
worker_processes 1; # 可支持并发数量
events块:配置服务器与用户网络连接部分
worker_connections 1024; # 支持最大连接数
http与server块
location [ = | ~ | ~* | ^~ ] /uri/ { ... }
=:用于不含正则表达式的 uri 前,严格匹配
~:用户表示 uri 包含正则表达式,区分大小写
~*:用于表示 uri 包含正则表达式,不区分大小写
^~:用于不含正则的 uri 前,服务器找到表示 uri 和请求字符串匹配度最高的 location 后
HTTPS 与 WSS
# https
server {
listen 443 ssl;
server_name _;
ssl_certificate /usr/local/cert/xxx.pem;
ssl_certificate_key /usr/local/cert/xxx.key;
ssl_session_timeout 30m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://127.0.0.1:3002;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 非默认端口需要添加$server_port
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_redirect off;
}
}
# wss
server {
listen 444 ssl;
server_name _;
ssl_certificate /usr/local/cert/xxx.pem;
ssl_certificate_key /usr/local/cert/xxx.key;
ssl_session_timeout 30m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://127.0.01:3003;
# 代理到上面的地址去
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
}
Vue
server {
listen 80;
server_name _;
index index.html index.htm;
root /www/wwwroot/project;
location /api {
proxy_pass http://ip:port/project-name;
}
location / {
try_files $uri $uri/ @router;
index index.html index.htm;
}
location @router {
rewrite ^.*$ /index.html last;
}
# 防止的路由在nginx中刷新出现404,需要rewrite到index.html中,然后交给路由在处理请求资源
}