1、nginx主要为优化性能,是一种反向代理服、负载均衡务器。
有报告表明能支持高达 50,000 个并发连接数。
反向代理服务器:
Nginx 最常的用途是提供反向代理服务,那么什么反向代理呢?正向代理相信很多大陆同胞都在这片神奇的土地上用过了,原理大致如下图:
代理服务器作为客户端这边的中介接受请求,隐藏掉真实的客户,向服务器获取资源。如果代理服务器在长城外的话还能顺便帮助我们实现翻越长城的目的。而反向代理顾名思义就是反过来代理服务器作为服务器的中介,隐藏掉真实提供服务的服务器,原理大致如下图:
这么做当然不是为了实现翻越长城,而是为了实现安全和负载均衡等一系列的功能。所谓安全指客户端的请求不会直接落到内网的服务器上而是通过代理做了 一层转发,在这一层就可以实现安全过滤,流控,防 DDOS 等一系列策略。而负载均衡指我们可以水平扩展后端真正提供服务的服务器数量,代理按规则转发请求到各个服务器,使得各个服务器的负载接近均衡。
2、支持热部署:
Nginx支持热部署。它的启动特别容易, 并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在不间断服务的情况下,对软件版本进行进行升级。
3、nginx有最基本的三个功能(当然还有其他的)
nginx最主要的就是nginx的conf配置文件。nginx的conf配置文件是分模块的,
有http模块、mail模块等
。其中,项目最常用的是http模块。
在http模块中,需要配置的有主要如下几个参数,下面首先对配置参数做一个总的说明,然后,根据nginx的最主要三个功能来讲解配置:
参数说明:
下面是linux下的nginx默认的conf配置文件(删除了注释)
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log; //装发成功的日志文件
error_log /var/log/nginx/error.log; //转发失败的日志文件
gzip on;
gzip_disable "msie6";
include /etc/nginx/conf.d/*.conf; //添加配置文件,在添加的配置文件中有相关配置
include /etc/nginx/sites-enabled/*; //添加配置文件,在添加的配置文件中有相关配置
}
斜体字配置可以暂时不用管;
(1)请求页面(类似于tomcat)
server {
server_name localhost; //可以理解为请求的域名
listen 80 default_server; //请求的端口
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html; //请求的路径
index index.html index.htm; //请求的路径下的文件
location / {
try_files $uri $uri/ =404; //tryfiles 意思是 nginx 会按照接下来的顺序去访问文件,将第一个匹配的返回。比如你去请求 localhost/test,他会去寻找 /test 文件,找不到再去找 /test/ 再找不到就返回一个 404。
}
}
(2)反向代理(转发器)
location / {
proxy_pass 123.34.56.67:8080;
}
这样所有的请求就都被反向代理到 123.34.56.67 去了。这样我们反向代理的功能是实现了
(3)提供负载均衡(在反向代理的基础上)
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
server backend4.example.com;
}
location / {
proxy_pass http://backend;
}
我们在 upstream 中指定了一组机器,并将这个组命名为 backend,这样在 proxypass 中只要将请求转移到 backend 这个 upstream 中我们就实现了在四台机器的反向代理加负载均衡。其中的 iphash 指明了我们均衡的方式是按照用户的 ip 地址进行分配。
注:要让配置生效,我们不必重启 nginx 只需要 reload 配置即可。
sudo service nginx reload
启动命令:
sudo service nginx start
本文参考文章: