Nginx介绍

Nginx 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP服务器。

官方测试Nginx能够支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定。

应用场景

HTTP 服务器,可以做网页静态服务器;

虚拟主机,可以实现在一台服务器虚拟出多个网站,例如个人网站使用的虚拟主机;

反向代理,负载均衡。

Windows环境下

官网下载解压版,双击nginx.exe启动,访问127.0.0.1展示欢迎页。

nginx.conf文件的结构

nginx的配置由特定的标识符(指令符)分为多个不同的模块。

指令符分为简单指令和块指令。

简单指令格式:[name parameters;]

块指令格式:和简单指令格式有一样的结构,但其结束标识符不是分号,而是大括号{},块指令内部可以包含simple directives 和block directives, 可以称块指令为上下文(e.g. events, http, server, location)

conf文件中,所有不属于块指令的简单指令都属于main上下文的,http块指令属于main上下文,server块指令http上下文。

配置静态访问

反向代理

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

配置C:\Windows\System32\drivers\etc\hosts文件,新增127.0.0.1 80.itman.com

nginx.conf配置如下:

    server {
        listen       80;
        server_name  80.itman.com;

        location / {
            proxy_pass  http://127.0.0.1:8080;
            index  index.html index.htm;
        }

    }

效果:启动一个Tomcat 127.0.0.1:8080,使用nginx反响代理80.itman.com直接跳转到127.0.0.1:8080

负载均衡(策略)

负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。

负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

1、轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器宕机,能自动剔除。

    upstream backserver {
        server 127.0.0.1:8081;
        server 127.0.0.1:8082;
    } 

    server {
        listen       80;
        server_name  80.itman.com;

        location / {
            proxy_pass  http://backserver;
            index  index.html index.htm;
        }

    }
2、指定权重

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

    upstream backserver {
        server 127.0.0.1:8081 weight=1;
        server 127.0.0.1:8082 weight=2;
    }
3、IP绑定

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

    upstream backserver {
        ip_hash;
        server 127.0.0.1:8081;
        server 127.0.0.1:8082;
    }
4、宕机轮询规则配置
    upstream backserver { #设定负载均衡的服务器列表
        server 127.0.0.1:8081;
        server 127.0.0.1:8082;
    } 

    server {
        listen       80;
        server_name  80.itman.com;

        location / {
            proxy_pass  http://backserver; #请求转向backserver定义的服务器列表
            index  index.html index.htm; #定义首页索引文件的名称
            proxy_connect_timeout 1; #nginx跟后端服务器连接超时时间(代理连接超时)
            proxy_send_timeout 1; #后端服务器数据回传时间(代理发送超时)
            proxy_read_timeout 1; #连接成功后,后端服务器响应时间(代理接收超时)
        }

    }

Nginx解决网站跨域问题

若http://127.0.0.1:8080工程A中页面直接访问http://127.0.0.1:8081/index8081接口,会产生跨域问题。

A页面代码:

  $(function () {
      $.get("http://127.0.0.1:8081/index8081", {}, function (result) {
         $("#show").html(result);
      })
    })

nginx.conf:

    server {
        listen       80;
        server_name  localhost;
        location /api {
            rewrite  ^/api/(.*)$ /$1 break;
            proxy_pass  http://127.0.0.1:8081;
            index  index.html index.htm;
        }
        location / {
            proxy_pass  http://127.0.0.1:8080;
            index  index.html index.htm;
        }
    }
    server {
        listen       80;
        server_name  www.itman.com;
        location /A {
            proxy_pass  http://a.a.com:81/A;
            index  index.html index.htm;
        }
        location /B {
            proxy_pass  http://b.b.com:81/B;
            index  index.html index.htm;
        }
    }

示例代码

A页面调整:

    $(function () {
        $.get("/api/index8081", {}, function (result) {
            $("#show").html(result);
        })
    })

浏览器跨域的解决方式有很多种:
1.jsonp 需要目标服务器配合一个callback函数。
2.window.name+iframe 需要目标服务器响应window.name。
3.window.location.hash+iframe 同样需要目标服务器作处理。
4.html5的postMessage+ifrme这个也是需要目标服务器或者说是目标页面写一个postMessage,主要侧重于前端通讯。
5.CORS需要服务器设置header:Access-Control-Allow-Origin。
6.nginx反向代理 这个方法一般很少有人提及,但是他可以不用目标服务器配合,不过需要你搭建一个中转nginx服务器,用于转发请求。

Nginx配置防盗链

Nginx配置DDOS

限制请求速度

    limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m; #每分钟30请求

    server {
        limit_req zone=one;
        listen       8080;
        server_name  8080.itman.com;
        location / {
            root   data/www;
            index  index.html index.htm;
        }
    }

`limit_req_zone`命令设置了一个叫one的共享内存区来存储请求状态的特定键值,在上面的例子中是客户端IP($binary_remote_addr)。location块中的`limit_req`通过引用one共享内存区来实现限制访问/login.html的目的。

限制链接数

设置Nginx、Nginx Plus的连接数在一个真实用户请求的合理范围内。比如,你可以设置每个客户端IP连接/store不可以超过10个。

Nginx入门基础(一)的更多相关文章

  1. 转:nginx入门指南,快速搭建静态文件服务器和代理服务器

    本文介绍 Nginx 入门基础知识,让你迅速搭建 Nginx 服务器.主要内容包括 Nginx 安装和简单使用.Nginx的简单原理.Nginx 配置文件的结构.如何使用 Nginx 来提供静态文件服 ...

  2. Nginx web基础入门

    目录 Nginx web基础入门 如何升级nginx或者添加功能 使用systemd管理nginx nginx相关配置文件 nginx的配置文件详解 日志格式 game日志记录实战 日志切割 手写虚拟 ...

  3. Nginx Web 基础入门

    目录 Nginx Web 基础入门 Nginx快速安装 两种方式部署Nginx 如何升级nginx或者添加功能 使用systemd管理nginx nginx相关配置文件 nginx的配置文件详解 虚拟 ...

  4. Nginx入门篇-基础知识与linux下安装操作

    我们要深刻理解学习NG的原理与安装方法,要切合实际结合业务需求,应用场景进行灵活使用. 一.Nginx知识简述Nginx是一个高性能的HTTP服务器和反向代理服务器,也是一个 IMAP/POP3/SM ...

  5. nginx入门到精通目录

    1.nginx入门篇 nginx安装与基础配置 nginx优化配置分析与说明 nginx模块结构 2.nginx功能篇 配置nginx的gzip功能 配置nginx的rewrite功能 配置nginx ...

  6. nginx入门与实战 安装 启动 配置nginx Nginx状态信息(status)配置 正向代理 反向代理 nginx语法之location详解

    nginx入门与实战 网站服务 想必我们大多数人都是通过访问网站而开始接触互联网的吧.我们平时访问的网站服务 就是 Web 网络服务,一般是指允许用户通过浏览器访问到互联网中各种资源的服务. Web ...

  7. Nginx入门简介

    Nginx入门简介 Nginx 介绍 Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二 ...

  8. Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性

    简介 Tengine是由淘宝网发起的Web服务器项目.它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性.Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很 ...

  9. Linux(6)- redis发布订阅/持久化/主从复制/redis-sentinel/redis-cluster、nginx入门

    一.redis发布订阅 Redis 通过 PUBLISH .SUBSCRIBE 等命令实现了订阅与发布模式. 其实从Pub/Sub的机制来看,它更像是一个广播系统,多个Subscriber可以订阅多个 ...

随机推荐

  1. ssh:22端口拒绝服务

    在Hadoop配置中,被这个问题坑的死去活来的.总结一下,注意以下几点: 1.sshd是否启动.一般你ssh loaclhost的时候22端口拒绝,就很有可能是这个问题了. 手动打开:/etc/ini ...

  2. Linux上静态库和动态库的编译和使用

    linux上静态库和动态库的编译和使用(附外部符号错误浅谈) 这就是静态库和动态库的显著区别,静态库是编译期间由链接器通过include目录找到并链接到到可执行文件中,而动态库则是运行期间动态调用,只 ...

  3. cplusplus标准库

    http://www.cplusplus.com/reference/   Standard C++ Library reference C Library The elements of the C ...

  4. Ubuntu 16.04安装Docker-CE

    系统环境 * Ubuntu: 16.04 * Docker: 17.09.0-ce 安装步骤 1.安装Docker-CE,具体参考:https://docs.docker.com/engine/ins ...

  5. python 文件处理(转载)

    本文给大家介绍Python文件处理相关知识,具体内容如下所示: 出处:https://www.jb51.net/article/80204.htm 1.文件的常见操作 文件是日常编程中常用的操作,通常 ...

  6. Apartment 2019

    Apartment 2019 最近在学习3D建模,Apartment 2019是我的个人项目. 初步的想法是,先在网上找公寓建筑的平面图以及室内效果照片,根据这些参考图像来练习建模与渲染. 建模顺序与 ...

  7. 转载:MySQL看这一篇就够了

    No.1 数据库概念 什么是数据库? 数据库就是一种特殊的文件,内部存储着需要的数据 RDBMS 所谓关系数据库,是建立在关系模型基础的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据 SQ ...

  8. (转)K-近邻算法(KNN)

    K-近邻算法(KNN)概述  KNN是通过测量不同特征值之间的距离进行分类.它的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别 ...

  9. Java进程&线程(整理)

    Java进程&线程 程序:程序员写的代码,就是代码,不运行好像不会发生什么: 进程:一个进程可以理解为"运行的"一个程序,当我们启动一个java程序后,对应的jvm就会创建 ...

  10. 使用Linux的环境变量

    许多程序和脚本都使用环境变量来获取系统信息,并存储临时数据和配置信息: 1.什么是环境变量 用来存储关于shell会话和工作环境的信息,就叫做环境变量: bash shell下两种类型: 1.全局变量 ...