1. Nginx概述
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。它可以提供正向代理、反向代理、负载均衡、动静分离等功能。
nginx通过配置文件来配置功能,路径一般是 /usr/local/nginx/conf/nginx.conf
配置文件的内容分为三部分
- 全局块:配置服务器整体的指令,nginx进程pid存放路径,日志存放路径,配置文件引入等。比如多少个工作进程 worker_processes
- events:配置影响nginx服务器或与用户的网络连接。用户连接数 worker_connections
- http:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置
- server块: 配置虚拟主机的相关参数,一个http中可以有多个server
2. 正向代理
通过客户端配置代理服务器,访问特定网站。比如,通过配置VPN客户端,连接远程主机,访问google,或者通过跳板机访问公司内网主机。以上两种都是典型的正向代理。
3. 反向代理
与正向代理相同的是,都是代理服务。不同的是,反向代理暴露的是代理服务器的地址,真实服务器的地址对用户而言是不知道的。用户只需要知道代理服务器的地址即可。
比如现在有nginx服务 111.229.176.xxx:9001, 通过如下配置在访问http://111.229.176.xxx:9001/demo1时,会转发到8081的服务上,而访问http://111.229.176.xxx:9001/demo2时,会转发到8080的服务上。这就是最基本一种反向代理。
server {
listen 9001;
# listen somename:8080;
server_name 111.229.176.xxx;
location ~ /demo1/ {
proxy_pass http://127.0.0.1:8081;
}
location ~ /demo1/ {
proxy_pass http://127.0.0.1:8080;
}
}
4. 负载均衡
负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行。nginx可以将用户请求分发到多个服务器上,避免单一服务器负载过重,响应不及时的情况。如下简单配置,当浏览器中输入http://111.229.176.xxx:9001时,请求会根据负载均衡策略转发到8080或者8081的服务上。
upstream myserver {
server 111.229.176.212:8080 weight=2;
server 111.229.176.212:8081 weight=1;
}
server {
listen 9001;
# listen somename:8080;
server_name 111.229.176.xxx;
location ~ / {
proxy_pass http://myserver;
root html;
index index.html index.htm;
}
}
Nginx的负载均衡策略分为以下几种
- 轮询:每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
- 轮询+权重:由于每台真实服务器的性能或者说处理能力不一样,那么处理能力强的服务器应该设置更大的权重,weight 代表权重默认为 1,权重越高被分配的客户端越多。
- ip哈希:对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。
- fair:按照响应时间来分配请求,后端服务器响应时间短的优先分配。
5. 动静分离
Nginx 动静分离简单来说就是把动态跟静态请求分开,静态请求比如请求图片什么的,访问静态资源服务器,动态请求比如注册用户发到动态服务器 (tomcat服务器)。