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. enable-ssh-key-logon-disable-password-password-less-logon-centos/

    cat ~/.ssh/id_rsa.pub | ssh root@destination_server_address "cat >> ~/.ssh/authorized_key ...

  2. SpringCloud启动类指定扫描包路径

    //如果这个启动类所在的包路径隐藏的很深,则需要指定扫描包.否则默认扫描启动类所在的子包路径下 @SpringBootApplication(scanBasePackages="com.jo ...

  3. mysql5.7基于gtid主从重做

    master上备份mysql/data/Percona-5721/scripts/xtra_sohmysql_fullbak.sh scp 备份文件到备机 关闭slave service mysql ...

  4. 关于new你应当知道的一切

    new在C++中是一个我们经常用到的运算符.由它所创建的变量会被分配在堆中,并且在程序结束之前应当将分配的内存delete掉,否则就会导致内存泄漏.但是除此之外,你对new有更深入的了解吗?本篇文章将 ...

  5. 2016蓝桥杯"取球博弈"问题

    较难,网上有能得出正确结果的代码,但是读了一下,像是拼凑出的结果,逻辑不通,代码和注释不符 参考网上代码写了一版,结构相对清晰,注释比较详细 题目很长: 两个人玩取球的游戏.一共有N个球,每人轮流取球 ...

  6. Vue 使用axios获取数据

    axios  的使用 1.安装  cnpm  install  axios --save 2.哪里用哪里引入axios <script> import Axios from 'axios' ...

  7. POJ3094 Quicksum

    POJ3094 Quicksum Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 18517   Accepted: 1271 ...

  8. springboot学习二:配置文件配置

    springboot默认读取application*.properties #######spring配置####### spring.profiles.active=dev //引入开发配置文件 a ...

  9. Oracle两个数据库联合查询,使用Oracle DBLink

    创建dblink -- Create database link create shared database link COPYCITY_BZTOMY connect to db_A identif ...

  10. python之psutil

    psutil = process and system utilities, psutil是个跨平台库,能够轻松实现获取系统运行的进程和系统利用率,包括CPU.内存.磁盘.网络等信息. Linux系统 ...