[Open Source] 负载均衡之Nginx

时间:2023-03-09 17:36:36
[Open Source] 负载均衡之Nginx

目录

简介

Nginx ("engine x") 是一款轻量级,高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。

传输层的负载均衡有LVS(Linux) 和 NLB(Windows)

常用命令

  • nginx -v // nginx 版本
  • start nginx // 启动nginx,不阻塞命令窗口
  • nginx -s stop | nginx -s quit // 快速停止 | 有序退出
  • nginx -s reload // 加载配置重新启动

功能

代理

server {
listen 8080; # 监听8080端口
resolver 114.114.114.114; # dns解析地址
location / {
proxy_pass $scheme://$host$request_uri; # 代理到哪个地址
proxy_set_header Host $http_host;
#allow 127.0.0.1; # 允许127.0.0.1地址访问
#deny all; # 禁止所有地址访问(allow位置在上面,所以127.0.0.1仍能访问)
}
}

反向代理

server {
listen 8081; # 监听8080端口
server_name localhost; # 虚拟hostName location / {
proxy_pass http://127.0.0.1:8081; # 反向代理到的服务器
}
}

集群

HTTP集群

upstream clusterName {
# 通过weight设置每台服务器分配请求站的权重,值越高分配的越多。
server 127.0.0.1:9000 weight=4;
server 127.0.0.1:8082 weight=1;
# ip_hash会计算ip对应hash值,然后分配到固定服务器
ip_hash;
} location / {
proxy_pass http://clusterName; # 反向代理到群集服务器
# 设置主机头和客户端真实地址,以便服务器获取客户端真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

TCP集群

  • 和http同级
stream {
server {
listen 1034;
proxy_pass app;
} upstream app {
server 192.168.0.111:5672;
server 192.168.0.112:5672;
}
}

重定向

location / {
rewrite ^/(.*)$ http://www.xx.com/$1 permanent;
}
  • flag
    • last – 基本上都用这个Flag。
    • break – 中止Rewirte,不在继续匹配
    • redirect – 返回临时重定向的HTTP状态302
    • permanent – 返回永久重定向的HTTP状态301

静态文件

location /^(.*) {
root html; # 根目录为html文件夹
index $1 index.html index.htm; # $1表示正则匹配第一项
}

绑定证书

# HTTPS server
#
server {
listen 443 ssl;
server_name localhost; ssl_certificate /nginx/server.cer; # 公钥(一般为公钥证书 + 中级证书)
ssl_certificate_key /nginx/server.key; # 私钥 ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
}

常见问题

  • 与IIS(80端口)冲突

    • 被System占用
      • 找到HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/HTTP下的Start修改其值为0,重启电脑即可
    • 被IIS占用
      • 停用IIS 80端口的网站
  • nginx群集

    • 如果nginx服务器挂了,那我们的站点就直接挂了,可以通过keepalived组件来搭建多台nginx服务提供服务。
  • error.log 错误日志:signal process started

    • 并非错误,只要执行-s reload就会发出