nginx简介
Nginx(engine x)是一个轻量级、高性能的Web和反向代理服务器,也是一个IMAP、POP3和SMTP服务器,并且安装十分简单,配置文件非常简洁,启动特别容易,运行十分稳定,几乎可以做到7*24小时不间断运行,在国内大厂(如:BATJ)均得到广泛应用。
Nginx特性
Nginx的特性有很多,最常用的就是Web服务器、反向代理和负载均衡等
1. Web服务器
Nginx作为一个Web服务器,相比Apache,使用更少的资源,支持更多的并发,最高的并发达50000个,而tomcat则只有500左右。
2. 反向代理
有反向代理,那么就有正向代理,这是两种不同的代理模式,分析如下:
正向代理
-
正向代理服务器架设在客户端,用于代理客户端的网络请求,客户端要先把网络请求发送到代理服务器,然后由代理服务器去请求目标服务器。最常用的就是VPN,尤其是国内无法直接访问许多网站,经常翻墙去访问,就是正向代理的模式。
反向代理:
-
反向代理服务器是架设在服务器端,通过缓冲常用请求页面来提高服务器的工作效率,将客户端的请求(可能是多个域名的请求)转发给内部对应的服务器,然后把服务器的处理结果返回给客户端。实现原理是:多个域名可以绑定到同一个IP,通过反向代理,在服务器内部把请求的域名等信息解析到对应的服务器,然后提供服务。
3. 负载均衡:
- Nginx内部直接支持Rails和PHP,也支持作为HTTP服务器来对外提供服务;Nginx采用C编写,其资源开销比较少、使用效率比较高。可以把客户端的请求分配到多个同级服务器,也可以根据服务器的性能,设置不同的权重,如加大性能高的服务器的负载量等。
安装
使用Docker 安装 Nginx
-
方法一、docker pull nginx(推荐)
查找 Docker Hub 上的 nginx 镜像
$ docker search nginx
这里我们拉取官方的镜像
$ docker pull nginx
等待下载完成后,我们就可以在本地镜像列表里查到 REPOSITORY 为 nginx 的镜像。
$ docker images nginx
-
方法二、通过 Dockerfile 构建(不推荐)
-
方法三、通过 homebrew 去拉取
$ brew install nginx
安装成功后启动:
$ brew services start nginx
进行端口测试:
使用brew安装成功后,nginx的安装和配置目录不在一起,具体如下:
- 安装目录:/usr/local/Cellar/nginx/1.15.9/
- 配置目录:/usr/local/etc/nginx/
- 工作目录:/usr/local/var/www,在安装目录下有一个软连接www,指向本目录
-
启动nginx
$ nginx
-
停止nginx
$ nginx -s stop
-
重启nginx
$ nginx -s reload
反向代理 (例子)
假设希望别人输入 localhost:8080 时直接跳转到 别的页面,那么在 nginx.conf 中配置
http {
server {
listen 8080;
location / {
proxy_pass http://www.baidu.com;
}
}
}
配置完成需要重启nginx
Nginx 目录自动加斜线
nginx不会自动在请求的最后加上一个/的,原因是nginx不会自动判断请求的是一个文件还是一个目录,解决方法为:
在配置文件中location里加入如下代码
if (-d $request_filename){
rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
}
这样再发出请求,nginx就会进行判断了,如果请求的是一个文件夹,会自动在最后加上/符号,如果请求的是一个文件,则不会改变原有url
负载均衡
Nginx 负载均衡
-
Nginx 基础知识
nginx的upstream目前支持5种方式的分配
upstream模块
upstream模块主要负责负载均衡的配置,通过默认的轮询调度方式来分发请求到后端服务器
简单的配置方式如下
upstream name {
ip_hash;
server 192.168.1.100:8000;
server 192.168.1.100:8001 down;
server 192.168.1.100:8002 max_fails=3;
server 192.168.1.100:8003 fail_timeout=20s;
server 192.168.1.100:8004 max_fails=3 fail_timeout=20s;
}
核心配置信息如下
ip_hash:指定请求调度算法,默认是weight权重轮询调度,可以指定
server host:port:分发服务器的列表配置
– down:表示该主机暂停服务
– max_fails:表示失败最大次数,超过失败最大次数暂停服务
– fail_timeout:表示如果请求受理失败,暂停指定的时间之后重新发起请求