一、Nginx的定义与理解
1、Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
2、Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
总的来说,负载均衡实现的方式分为软件实现和硬件实现两种,硬件实现运行的效率非常高,但是对应的成本也非常高。软件实现运行效率不如硬件,但是成本相对来说低得多。而使用Nginx服务器实现负载均衡,那么就是通过软件的方式来实现负载均衡,并且Nginx本身支持高并发等。故而使用Nginx服务器实现负载均衡,能大大节约企业的成本,并且由于Nginx是服务器软件,其执行效率也是非常高。本篇的目的也就是帮助大家使用Nginx实现负载均衡。
二、Nginx的安装
2.1、步骤一:百度搜索Nginx,找到官网直接下载对应版本的压缩包。 有稳定版本和最新版本及以前版本,推荐使用稳定版本开发
下载地址:Nginx官方下载链接
2.2.下载完成之后,进行解压可以看到如下 文件结构。
然后执行nginx –v,查看nginx的版本
三、Nginx的基本配置
3.1、Nginx 配置文件:/etc/nginx/nginx.conf
-
/etc/nginx/nginx.conf
配置文件,在虚拟主机部分包含了这两个文件:
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
3.2、配置代理目录: /etc/nginx/sites-available/
- sites-available 目录中存放着具体的 Server 配置文件。
- 默认配置文件:
/etc/nginx/sites-available/default
文件详细配置了默认的虚拟主机目录root /var/www/html
,监听的端口是80。
3.3、启动配置代理目录:/etc/nginx/sites-enabled/
-
sites-enabled 目录中存放的是链接文件,每个链接文件都指向 sites-available 目录中的配置文件,表示需要让 Nginx 启用哪些配置代理文件。
-
在 sites-enabled 下创建 symbol link 链接 sites-available 下的配置文件就可以启用代理配置。
$ sudo ln -s /etc/nginx/sites-available/availableFileName linkFileName
默认启用的服务:
/etc/nginx/sites-enabled/
中的 default 软链接指向/etc/nginx/sites-available/default
,删除该链接文件,就会关闭该配置代理。
3.4、nginx.conf 配置文件详解
Nginx 配置文件路径:/etc/nginx/nginx.conf
##
# 全局配置
##
user www-data; ## 配置 worker 进程的用户和组
worker_processes auto; ## 配置 worker 进程启动的数量,建议配置为 CPU 核心数
error_log logs/error.log; ## 全局错误日志
pid /run/nginx.pid; ## 设置记录主进程 ID 的文件
worker_rlimit_nofile 8192; ## 配置一个工作进程能够接受并发连接的最大数
##
# 工作模式及连接数上限
##
events {
# epoll 是多路复用 IO(I/O Multiplexing)中的一种方式,
# 仅用于 Linux 2.6 以上内核,可以大大提高 Nginx 性能
use epoll
# 单个后台 worker process 进程的最大并发链接数
# 并发总数 max_clients = worker_professes * worker_connections
worker_connections 4096; ## Defaule: 1024
# multi_accept on; ## 指明 worker 进程立刻接受新的连接
}
##
# http 模块
##
http {
##
# Basic Settings
##
#sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,
#对于普通应用,必须设为 on,
#如果用来进行下载等应用磁盘 IO 重负载应用,可设置为 off,
#以平衡磁盘与网络 I/O 处理速度,降低系统的 uptime.
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65; ## 连接超时时间
types_hash_max_size 2048; ## 指定散列类型表的最大大小
# server_tokens off;
# server_names_hash_bucket_size 64; # this seems to be required for some vhosts
# server_name_in_redirect off;
include /etc/nginx/mime.types; ## 设定 mine 类型
default_type application/octet-stream;
# 设定请求缓冲
client_header_buffer_size 128k; # 指定客户端请求头缓存大小,当请求头大于 1KB 时会用到该项
large_client_header_buffers 4 128k; # 最大数量和最大客户端请求头的大小
##
# SSL Settings
##
# 启用所有协议,禁用已废弃的不安全的SSL 2 和SSL 3
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
# 让服务器选择要使用的算法套件
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log; ## 访问日志
error_log /var/log/nginx/error.log; ## 错误日志
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf; # 这个文件夹默认是空的
include /etc/nginx/sites-enabled/*; # 开启的 Server 服务配置
}
##
# mail 模块
##
mail {
# See sample authentication script at:
# http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
# auth_http localhost/auth.php;
# pop3_capabilities "TOP" "USER";
# imap_capabilities "IMAP4rev1" "UIDPLUS";
server {
listen localhost:110;
protocol pop3;
proxy on;
}
server {
listen localhost:143;
protocol imap;
proxy on;
}
}
4.5、ngx_http_limit_conn_module 模块
http {
# 最大连接数
# 分配一个共享内存区域,大小为 10M,用于限制IP
# 使用 $binary_remote_addr 变量, 可以将每条状态记录的大小减少到 64 个字节,这样 1M 的内存可以保存大约 1 万 6 千个 64 字节的记录。
limit_conn_zone $binary_remote_addr zone=ips:10m;
# 分配一个共享内存区域,大小为 10M,用于限制服务器连接数
limit_conn_zone $server_name zone=servers:10m;
# 设置日志记录级别
# 当服务器因为频率过高拒绝或者延迟处理请求时可以记下相应级别的日志。
limit_conn_log_level notice;
server {
# 限制每一个IP地址访问限制10个连接
limit_conn ips 10;
# 服务器提供的最大连接数 1000
limit_conn servers 1000;
}
}