Nginx 基础

Nginx 基础

持续更新…


什么是Nginx?
Nginx(engine x)是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
由俄罗斯的程序设计师lgor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler使用,是一款轻量级的Web服务器/反向代理服务器以及电子邮件代理服务器,并在一个BSD-like协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。
Nginx相较于Apache\lighttpd具有占有内存少,稳定性高等优势,并且依靠并发能力强,丰富的模块库以及友好灵活的配置而闻名。
在Linux操作系统下,nginx使用epoll事件模型,得益于此,nginx在Linux操作系统下效率相当高。同时Nginx在OpenBSD或FreeBSD操作系统上采用类似于Epoll的高效事件模型kqueue。Nginx作为负载均衡服务:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务对外进行服务。
Nginx采用C语言开发完成,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多。官方数据测试表明能够支持高达50000个并发连接数的响应。
反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。

Nginx核心特点

  • 反向代理:代理服务器,即代理用户要访问的目标服务器。代理服务器接受请求,然后将请求转发给内部网络的服务器集群,并将从服务器上得到的结果返回给客户端,此时代理服务器对外就表现为一个服务器。
    Nginx在反向代理上,提供灵活的功能,可以根据不同的正则采用不同的转发策略
  • 负载均衡:多在高并发情况下需要使用。其原理就是将数据流量分摊到多个服务器执行,减轻每台服务器的压力,多台服务器集群共同完成工作任务,从而提高了数据的吞吐量。
    Nginx可使用的负载均衡策略有:轮询(轮询)、权重、ip_hash、url_hash(第三方)、fair(第三方)。
  • 动静分离: 常用于前后端分离,Nginx提供的动静分离是指把动态请求和静态请求分离开,合适的服务器处理相应的请求,使整个服务器系统的性能、效率更高。
    Nginx可以根据配置对不同的请求做不同转发,这是动态分离的基础。静态请求对应的静态资源可以直接放在Nginx上做缓冲,更好的做法是放在相应的缓冲服务器上。动态请求由相应的后端服务器处理。

Nginx安装(以Ubuntu为例)

安装过程简单

sudo apt-get install nginx
nginx -v # 版本测验
service nginx start # 启动Nginx

Nginx 基础_第1张图片

Nginx 基础_第2张图片

sudo apt-get autoremove nginx # 卸载
nginx -s stop #  停止
nginx -s quit # 安全退出
nginx -s reload # 重新加载配置文件
ps aux|grep nginx # 查看nginx进程

Nginx配置文件

vim  /etc/nginx/nginx.conf

基本结构:

...
worker_processes  1;  # 工作进程数目。根据硬件调整,通常等于CPU数量或者2倍于CPU。

events {
    worker_connections  1024;
}

http {
    ...

    server {
        ...

        location {
            ...
        }
    }

    server {
        ...
    }
}

Nginx的负载均衡

  • 轮询方式

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器挂掉了,会自动跳过的。
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

upstream bakend {
server 192.168.0.2:8081 weight=1;
server 192.168.0.3:8082 weight=2;
}

  • ip_hash方式

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决Session的问题。

upstream bakend {
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
}

  • 使用
# 对80端口根目录进行负载均衡
server {
	listen 80;
	location / {
		proxy_pass http://bakend;
	}
}

静态资源亦类似上述方式。

keepalive_requests 120; # 单连接请求上限次数
server_name 127.0.0.1; # 监听地址
deny 127.0.0.1; # 拒绝访问的ip
allow 111.111.111.111; # 允许访问的ip
keepalive_timeout 65; # 连接超时时间,默认为75s,可以在http,server,location块中设置

参数配置

location [= ,~ ,~ * ,^~] /uri/ { … }
= 开头表示精确匹配
^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)
~ 开头表示区分大小写的正则匹配
~*开头表示不区分大小写的正则匹配
!和!*分别为区分大小写不匹配及不区分大小写不匹配 的正则
/ 通用匹配,任何请求都会匹配到



你可能感兴趣的:(nginx,服务器,linux)