Code Monkey home page Code Monkey logo

nginx's Introduction

nginx简介

nginx是高性能的HTTP和反向代理服务器,特点是占用内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。

nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表面能支持高达50,000个并发连续数

正向代理

如果把局域网中的客户端访问Internet,则需要通过代理服务器来访问,这种代理服务就叫正向代理

例如从国内访问谷歌一般都需要科学上网,配置一个代理服务器,通过代理服务器来访问,这个过程就叫做正向代理

反向代理

客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端。此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器的地址,隐藏了真实服务器的地址

与正向代理不同的是,正向代理隐藏真实客户端,反向代理隐藏真实服务端。

负载均衡

增加服务器数量,将请求分发到各个服务器上,从原先请求集中到单个服务器改为分发到多个服务器,即为负载均衡

动静分离

为了加快网站的解析速度,把动态页面和静态页面由不同的服务器来解析,降低原来单个服务器的压力,即为动静分离

有两种实现方法,

  1. 把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流的方案
  2. 静态和动态文件混合在一起发布,通过nginx分开

安装nginx

sudo apt-get install nginx

安装位置在/etc/nginx

常用命令

  • nginx -v 查看版本号
  • nginx 启动
  • nginx -s stop 关闭
  • nginx -s reload 重新加载

配置文件

位置:/etc/nginx/nginx.conf

1.全局块

从配置文件开始到events块的内容,主要会设置一些影响nginx服务器整体运行的配置指令,主要包括配置运行nginx服务器的用户组,允许生成worker process数,进程PID存放路径,日志存放路径和类型以及配置文件的引入等

2.event块

主要影响nginx服务器与用户网络的连接,常用的设置包括是否开启对多work pricess下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个work pricess可以同时支持的最大连接数等

这部分对nginx性能影响最大,实际开发中应该灵活配置

3.http块

可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等

4.server块

配置虚拟主机的相关参数,一个http中可以有多个server

5.location块

配置请求的路由,以及各种页面的处理情况

代理配置

通过server中配置的server_namelisten请求,会转发到location域中的proxy_pass

通过访问路径区分代理方式

只需要配置多个location域即可,在location后面加上以下字符表示使用正则表达式匹配路径

  • = 用于不含正则表达式的uri前,要求请求字符串与uri严格匹配
  • ~ 用于表示uri包含正则表达式,区分大小写
  • ~* 用于表示uri包含正则表达式,不区分大小写
  • ^~用于不含正则表达式的uri前,要求nginx服务器找到表示uri和请求字符串匹配度最高的location后处理此location请求

负载均衡配置

  1. 在http域中加上upstream配置

    upstream Name {
        Server x.x.x.x:1000;
        Server x.x.x.x:1001;
    }
  2. 在location域中的proxy_pass中添加配置

    proxy_pass http://Name;

    Name为自定义,要和upstream的一致

nginx的负载均衡策略

  1. 轮询(默认)
  2. weight 通过权重分配,权重越高分配的用户越多,可以在upstream.server的url后面加上weight=xx
  3. ip_hash(一致性哈希) 每个请求按访问ip的hash结果分配,这样可以保证每个访客固定访问一个后端服务器,解决session问题,在upstream域中加上ip_hash;即可
  4. fair(第三方) 根据响应时间分配,响应时间短的优先分配,在upstream域中加上fair;

nginx's People

Contributors

andochiwa avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.