本文主要对实现以下功能的nginx配置文件一些配置属性进行解释;
一、功能:负载均衡+https服务 + client-nginx-server长连接配置
1、访问:http://localhost/test请求实现负载均衡;
2、利用nginx搭建https服务;
3、client-nginx-server长连接配置,client-nginx长连接;nginx-server长连接;
4、如果nginx-server未配置长连接,server会出现大量TIME_WAIT,如果client-nginx未使用长连接,nginx出现大量TIME_WAIT
#下面两个参数如果设置过小,nginx主动发起四次挥手销毁连接,造成nginx出现大量的TIME_WAIT
keepalive_timeout 75; #设置keep-alive客户端连接在服务器端保持开启的超时值;值为0会禁用keep-alive客户端连接;
keepalive_requests 100; #设置一个keep-alive连接上可以服务的请求的最大数量,当最大请求数量达到时,连接被关闭。默认是100。
二、nginx.conf配置文件,对于每个属性有相应的解释
#nginx.conf配置文件#user nobody;
worker_processes 1; #工作进程:数目。根据硬件调整,通常等于CPU数量或者2倍于CPU。
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info; #错误日志:存放路径。
#pid logs/nginx.pid; #pid(进程标识符):存放路径。
events {
worker_connections 1024;
#指定一个nginx进程可以打开的最大描述符:数目。理论值应该是最多打开文件数(ulimit -n)与nginx进程#数相除,但是nginx分配请求并不是那#么均匀,#所以最好与ulimit -n 的值保持一致。
#如果并发量比较高的情况下,有可能请求超过工作连接上限;502错误
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络#IO处理速度,降低系统uptime。
#tcp_nopush on;
#keepalive_timeout 0;
#如果设置过小,nginx主动发起四次挥手销毁连接,造成nginx出现大量的TIME_WAIT
keepalive_timeout 75; #设置keep-alive客户端连接在服务器端保持开启的超时值;值为0会禁用keep-alive客户端连接;
keepalive_requests 100; #设置一个keep-alive连接上可以服务的请求的最大数量,当最大请求数量达到时,连接被关闭。默认是100。
#gzip on;
#upstream上流即后端服务器,
#目前支持4种方式的分配
#轮询(down自动剔除,不参与负载均衡)、权重(性能不均)、
#hash(每个请求按访问ip的hash结果分配,每个访客固定到一个一个后端服务器,解决session问题)
#fair根据响应时间进行分配,响应时间短的优先分配
#url_hash:根据url的hash结果来分配请求;每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
upstream backend {
server localhost:8080 down weight=1;
server localhost:8081 weight=5;
server localhost:8082 weight=10 backup;
}
#可以对每一个后端服务器设置状态
#down表示单前的server暂时不参与负载
#weight为weight越大,负载的权重就越大
#max_fails:允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误
#fail_timeout:max_fails次失败后,暂停的时间。
#backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
# another virtual host using mix of IP-, name-, and port-based configuration
#
#http服务,监听80端口
server {
listen 80; #配置监听端口
server_name localhost; #配置访问域名,localhost可以根据host设置域名,这边server_name设置为host中对应的域名
#location ~* \.(mp3|exe)$ {undefined 对以“mp3或exe”结尾的地址进行负载均衡
location / {
root html;
index index.html index.htm;
proxy_pass http://backend; #80端口的请求将会进行负载均衡 设置被代理服务器的端口或套接字,以及URL
proxy_http_version 1.1; #设置nginx和后端服务器之间的http版本,因为1.1才支持长连接
proxy_set_header Connection ""; #请求清理从client过来的http header,及时client-nginx是短连接,nginx-server也可以是长
}
}
# 我们在ngnix上面配置了https
server {
listen 443 ssl;
server_name localhost;
#增加ssl
#ssl on; #如果强制HTTPS访问,这行要打开
#server.crt(证书签名文件CA文件)的路径
ssl_certificate D:\\java\\ngnix\\nginx-1.20.2\\nginx-1.20.2\\conf\\ssl\\server.crt;
#server_nopwd.key(私钥)服务器私钥的路径
ssl_certificate_key D:\\java\\ngnix\\nginx-1.20.2\\nginx-1.20.2\\conf\\ssl\\server_nopwd.key;
#指定缓存大小为1m
ssl_session_cache shared:SSL:1m;
#指定缓存时间为1分钟
ssl_session_timeout 1m;
#关闭默认开启的ssl_session_tickets
ssl_session_tickets off;
#设定支持的TLS协议版本
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#配置密码套件
ssl_ciphers HIGH:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE:!ECDHE;
ssl_prefer_server_ciphers on;
location / {
#root html;
#index index.html index.htm;
proxy_pass http://127.0.0.1:8080;
}
}
}