Nginx基础

一、Nginx是什么
Nginx是一款自由的、开源的、高性能HTTP服务器和 反向代理服务器;也是一个IMAP、POP3、SMTP 代理服务器;也就是说Nginx本身就可以托管网站(类似于Tomcat一样),进行Http服务处理,也可以作为反向代理服务器使用。
Nginx 解决了服务器的C10K(就是在一秒之内连接客户端的数目为10k即1万)问题。
它的设计不像传统的服务器那样使用线程处理请求,而是一个更加高级的机制— 事件驱动机制,是一种 异步事件驱动结构
nginx 是用来做请求分发的,其实就是为多个tomcat/jboss应用服务器集群做的请求代理。
假设10W的并发10个服务器处理,在nginx.conf里面可以配置被请求的权重。从而 减轻服务器的被请求的压力.
Nginx基础_第1张图片
负载平衡:并发请求很大时,分发请求给多个服务器处理,减轻服务器压力
正向代理服务器:
一般指局域网内部的机器通过代理服务器发送请求到互联网上的服务器,代理服务器一般 作用在客户端
Nginx基础_第2张图片
反向代理服务器:
反向代理服务器 作用在服务器端,它在服务器端接收客户端的请求,然后将请求分发给具体的服务器进行处理,然后再将服务器的相应结果反馈给客户端。Nginx就是一个反向代理服务器软件。
Nginx基础_第3张图片
工作原理:
客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器) 转交请求,并将获得的内容返回给客户端。
正向代理:客户端必须设置正向代理服务器IP地址和端口号。
反向代理:客户端不需要进行任何特别的设置,对于客户端而言代理服务器就像是原始服务器。

二、服务器类型:
1、Web服务器:提供Http的访问,例如Nginx、Apache、IIS等
2、应用程序服务器:能够用于应用程序的运行;
3、代理服务器:作用在客户端,用于客户端访问服务端的代理
4、反向代理服务器:作用在服务端,用于接受客户端的访问,代理给服务端转发
5、后台服务器:普通用的服务器
6、CDN缓存服务器:它是缓存服务器的角色,而且是反向代理的应用

三、Nginx的特点
1、 跨平台:可以在大多数Unix like 系统编译运行,也有Windows的移植版本。
  2、 配置异常简单:非常的简单,易上手。
  3、 非阻塞、高并发连接:得益于Nginx采用了最新的epoll事件处理模型(消息队列)。
  4、 Nginx代理和后端Web服务器间无需长连接;
  5、 Nginx接收用户请求是异步的,即先将用户请求全部接收下来,再一次性发送到后端Web服务器,极大减轻后端Web服务器的压力。
  6、 边接边响应:发送响应报文时,是边接收来自后端Web服务器的数据,边发送给客户端。
  7、 网络依赖性低:只要能够ping通就可以实施 负载均衡,而且可以有效区分内网、外网流量。
  8、 支持内置服务器检测。Nginx能够根据应用服务器处理页面返回的状态码、超时信息等 检测服务器是否出现故障,并及时返回错误的请求重新提交到其它节点上。
  9、 采用Master/worker多进程工作模式
  10、 内存消耗小、成本低廉(比F5硬件负载均衡器廉价太多)、 节省带宽、稳定性高等特点。

四、Nginx的模块
1、 Core Module用于控制Nginx服务器的 基本功能
2、 Events Module用于控制Nginx如何 处理连接。影响性能
3、 HttpCore Module提供 HTTP访问Nginx服务器,不能缺少

五、常用功能
1、静态HTTP服务器
Nginx是一个HTTP服务器,可以将服务器上的静态文件(如HTML、图片)通过HTTP协议展现给客户端。配置:
server {
    listen 80; # 端口号
    location / {
        root /usr/share/nginx/html; # 静态文件路径
    }
}
2、反向代理服务器
反向代理服务器 作用在服务器端,它在服务器端接收客户端的请求,然后将请求分发给具体的服务器进行处理,然后再将服务器的相应结果反馈给客户端。配置:
server {
    listen 80;
    location / {
        proxy_pass http://192.168.20.1:8080; # 应用服务器HTTP地址
    }
}
3、负载均衡
将同一个应用部署在多台服务器上,将大量用户的请求分配给多台机器处理。同时带来的好处是,其中一台服务器万一挂了,只要还有其他服务器正常运行,就不会影响用户使用。配置:
upstream myapp {
    server 192.168.20.1:8080; # 应用服务器1
    server 192.168.20.2:8080; # 应用服务器2
}
server {
    listen 80;
    location / {
        proxy_pass http://myapp;
    }
}

Nginx基础_第4张图片
4、访问不同服务器,只需配一个url
若访问不同的服务器,可以通过Nginx配置转发,只需配一个url。多个请求时,会根据路径分发给对应的服务器。
5、虚拟主机
将www.aaa.com和www.bbb.com两个网站部署在同一台服务器上,两个域名解析到同一个IP地址,但是用户通过两个域名却可以打开两个完全不同的网站,互相不影响,就像访问两个服务器一样,所以叫两个虚拟主机。配置:
server {
    listen 80 default_server;
    server_name _;
    return 444; # 过滤其他域名的请求,返回444状态码
}
server {
    listen 80;
    server_name www.aaa.com; # www.aaa.com域名
    location / {
        proxy_pass http://localhost:8080; # 对应端口号8080
    }
}
server {
    listen 80;
    server_name www.bbb.com; # www.bbb.com域名
    location / {
        proxy_pass http://localhost:8081; # 对应端口号8081
    }
}
6、FastCGI
Nginx本身不支持 PHP等语言,但是它可以通过FastCGI来将请求扔给某些语言或框架处理(例如PHP、 Python、Perl)。
server {
    listen 80;
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME /PHP文件路径$fastcgi_script_name; # PHP文件路径
        fastcgi_pass 127.0.0.1:9000; # PHP-FPM地址和端口号
        # 另一种方式:fastcgi_pass unix:/var/run/php5-fpm.sock;
    }
}

Nginx基础_第5张图片
六、 处理请求
  首先,Nginx在启动时,会解析配置文件,得到需要监听的端口与IP地址,然后在Nginx的master进程里面,先初始化好这个监控的 socket( 创建socket,设置addrreuse等选项,绑定到指定的IP地址端口,再listen),然后再fork( 一个现有进程可以调用 fork函数创建一个新进程。由fork创建的新进程被称为子进程)出多个子进程出来,然后子进程会竞争accept新的连接。
  此时,客户端就可以向Nginx发起连接了。当客户端与Nginx进行三次握手,与Nginx建立好一个连接后,某一个子进程会accept成功,得到这个建立好的连接的socket,然后创建Nginx对连接的封装,即ngx_connection_t结构体。
  接着,设置读写事件处理函数并添加读写事件来与客户端进行数据的交换。最后,Nginx或客户端来主动关掉连接,到此,一个连接就结束了。


你可能感兴趣的:(Nginx,nginx,代理服务器,http服务器,反向代理,负载均衡)