Nginx

nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定,所以现在很多知名的公司都在使用nginx。

使用nginx的好处

  • 占内存小,可以实现高并发连接、处理响应快。
  • 可以实现http服务器、虚拟主机、反向代理、负载均衡。
  • nginx配置简单
  • 可以不暴露真实服务器IP地址

Nginx应用场景

  • http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。
  • 虚拟主机。可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。
  • 反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。

Windows环境下安装Nginx

下载地址:以nginx/Windows-1.14.2 为例,直接下载 nginx-1.14.2 .zip

启动方式

  • 直接双击nginx.exe,双击后一个黑色的弹窗一闪而过
  • 打开cmd命令窗口,切换到nginx解压目录下,输入命令 nginx.exe 或者 start nginx ,回车即可

检查nginx是否启动成功

直接在浏览器地址栏输入网址 http://localhost:80,回车,出现以下页面说明启动成功

nginx.conf 介绍

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

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

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

配置静态访问

Web server很重要一部分工作就是提供静态页面的访问,例如images, html page。nginx可以通过不同的配置,根据request请求,从本地的目录提供不同的文件返回给客户端。
打开安装目录下的nginx.conf文件,默认配置文件已经在http指令块中创建了一个空的server块,在nginx-1.8.0中的http块中已经创建了一个默认的server块。内容如下:

server {listen       80;server_name  localhost;location / {root   html;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}
}

Nginx实现反向代理

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

测试Demo

启动一个Tomcat 127.0.0.1:8080
使用nginx反向代理 www.test.com 直接跳转到127.0.0.1:8080

Host文件新增

127.0.0.1 www.test.com

nginx.conf 配置

server {listen       80;server_name  www.test.com;location / {proxy_pass  http://127.0.0.1:8080;index  index.html index.htm;}
}

Nginx实现负载均衡

什么是负载均衡

负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务

负载均衡策略

轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
upstream  backServer{server 127.0.0.1:8080; server 127.0.0.1:8081;
}

指定权重

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream backserver {
server 192.168.128.14 weight=10;
server 192.168.128.15 weight=10;
}

IP绑定 ip_hash

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream backserver {
ip_hash;
server 192.168.128.14:88;
server 192.168.128.15:80;
}

fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backserver {
server server1;
server server2;
fair;
}

url_hash(第三方)

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
upstream backserver {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}

配置代码

upstream backserver { server 127.0.0.1:8080; server 127.0.0.1:8081;
}
server {listen       80;server_name  www.test.com;location / {proxy_pass  http://backserver;index  index.html index.htm;}
}

宕机轮训配置规则

  • 在nginx中配置proxy_pass代理转发时,如果在proxy_pass后面的url加/,表示绝对根路径;如果没有/,表示相对路径,把匹配的路径部分也给代理走。
  • index index.html index.htm #首页响应地址
  • proxy_connect_timeout :后端服务器连接的超时时间_发起握手等候响应超时时间
  • proxy_read_timeout:连接成功后_等候后端服务器响应时间_其实已经进入后端的排队之中等候处理(也可以说是后端服务器处理请求的时间)
  • proxy_send_timeout :后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据
    nginx使用proxy模块时,默认的读取超时时间是60s。
erver {listen       80;server_name  www.test.com;location / {proxy_pass  http://backserver;index  index.html index.htm;proxy_connect_timeout 1;proxy_send_timeout 1;proxy_read_timeout 1;}}

Nginx解决网站跨域问题

跨域是指a页面想获取b页面资源,如果a、b页面的协议、域名、端口、子域名不同,或是a页面为ip地址,b页面为域名地址,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源。

跨域的常见解决方法

  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配置:

server {listen       80;server_name  www.test.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;}}

Nginx配置防盗链

防止第三方引用链接访问项目的图片,消耗服务器资源和网络流量,我们可以在服务器上做防盗链限制。
实现防盗链的方式有两种:refer方式和签名方式。

refer方式实现防盗链

工作模块:ngx_http_referer_module。

作用变量:$invalid_referer,全局变量。

配置域:server, location

server {listen 80;server_name www.test.com refer-test.test.com;root /usr/share/nginx/html;location ~*\.(gif|jpg|jpeg|png|bmp|swf)$ {valid_referers none blocked www.imcati.com;if ($invalid_referer) {return 403;}}}valid_referers: 指定资源访问是通过以下几种方式为合法,即白名单。
none:允许缺失的头部访问。
blocked:允许referer没有对应值的请求。
server_names:若referer站点域名与server_name中本机配的域名一样允许访问。

Nginx配置DDOS

防御DDOS是一个系统工程,攻击花样多,防御的成本高瓶颈多,防御起来即被动又无奈。DDOS的特点是分布式,针对带宽和服务攻击,也就 是四层流量攻击和七层应用攻击,相应的防御瓶颈四层在带宽,七层的多在架构的吞吐量。对于七层的应用攻击,我们还是可以做一些配置来防御的,例如前端是 Nginx,主要使用nginx的http_limit_conn和http_limit_req模块来防御。

限制请求次数

设置Nginx、Nginx Plus的连接请求在一个真实用户请求的合理范围内。比如,如果你觉得一个正常用户每两秒可以请求一次登录页面,你就可以设置Nginx每两秒钟接收一个客户端IP的请求(大约等同于每分钟个请求)。

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

限制请求速度

设置Nginx、Nginx Plus的连接数在一个真实用户请求的合理范围内。比如,你可以设置每个客户端IP连接/store不可以超过10个。
漏桶算法可以很好地限制容量池的大小,从而防止流量暴增。如果针对uri+ip作为监测的key,就可以实现定向的设定指定ip对指定uri容量大小,超出的请求做队列处理(队列处理要引入消息机制)或者丢弃处理。这也是v2ex对流量拦截的算法,针对uri+ip做流量监测。

Nginx安装与使用相关推荐

  1. 一、nginx 安装

    添加官方 yum 源 1 vim /etc/yum.repos.d/nginx.rep 输入以下内容(OS为你的系统,OSRELEASE 系统版本) 1 [nginx] 2 name=nginx re ...

  2. Linux环境Nginx安装多版本PHP

    关于Linux环境Nginx安装与调试以及PHP安装参考此文即可:http://blog.csdn.net/unix21/article/details/8544922 linux版本:64位Cent ...

  3. red5下nginx安装配置

    http://zfl110.iteye.com/blog/1155149 原址:http://lqw.iteye.com/blog/652763  安装Nginx 1.首先安装pcre-8.02.ta ...

  4. nginx安装 问题 1

    ./configure: error: the HTTP rewrite module requires the PCRE library 有时候,我们需要单独安装nginx,来处理大量的下载请求.单 ...

  5. Centos nginx 安装 源码方式安装

    以 yum 方式安装 Nginx https://andyoung.blog.csdn.net/article/details/118802486 安装所需插件 1.安装gcc gcc是linux下的 ...

  6. nginx安装-添加MP4播放模块

    nginx安装很简单,但是有的时候是已经安装的nginx ,升级增加nginx 模块功能. 最近公司要nginx增加一个可以播放 MP4的模块,安装还算顺利,不说废话上命令. 1 安装依赖 yum i ...

  7. Nginx安装、默认虚拟主机、Nginx用户认证、Nginx域名重定向

    12.6 Nginx安装 安装包下载到/usr/local/src目录 [root@taoyuan ~]# cd /usr/local/src [root@taoyuan src]# wget htt ...

  8. windows下nginx安装、配置与使用

    目前国内各大门户网站已经部署了Nginx,如新浪.网易.腾讯等:国内几个重要的视频分享网站也部署了Nginx,如六房间.酷6等.新近发现Nginx 技术在国内日趋火热,越来越多的网站开始部署Nginx ...

  9. Nginx安装、配置及使用总结

    版权声明:本文为博主原创文章,未经博主允许不得转载. Nginx的安装.配置及使用总结: Nginx是一个高性能的HTTP及反向代理服务器,也是IMAP/POP3/SMTP代理服务器.在高并发情况下, ...

  10. Centos 6.0/ Nginx 安装与配置

    系统:Centos 6.0 下载nginx(nginx-1.2.4.tar.g)   http://nginx.org/ 下载pcre(pcre-8.31.tar.gz)    http://pcre ...

最新文章

  1. 字节老板在群里diss员工:上班时间聊游戏,工作很闲吗?员工回怼:查聊天记录,看聊天时间占工作时间百分比!网友:真·扁平化管理!...
  2. 子弹短信新发布,支付宝即将入驻
  3. oracle备份恢复
  4. 企业级IM应该帮助员工提高绩效,避免无关的信息干扰
  5. 同源策略_如何支持跨域
  6. 最易忽视的肾虚4件事
  7. TVM:源码编译安装
  8. typedef 浅析
  9. mysql锁的一些理解简书_MySQL锁的基本概念
  10. 实现自我隐藏 CPU 利用率的最佳方法,不妨一试!
  11. tensorflow如何微调时如何只训练后两层_XLNet只存在于论文?都替你封装好了还不来用!...
  12. namp和nc扫描方式
  13. python的画图工具,Python画图工具matplotlib的安装
  14. 论文学习——《Affective Computing:A Review》
  15. 美国大学计算机理论专业phd,盘点美国那些计算机专业PHD超级难申请的大学
  16. vue 定制上传按钮的样式的两种方法
  17. JavaScript——操作表单(MD5验证)
  18. 使用augpush实现微信内跳转浏览器下载APP(包括apk和ios)的解决方案
  19. 【计算机科学】【2020.05】基于深度学习的计算蛋白质结构预测
  20. pip install时报错超时(pip._vendor.requests.packages.urllib3.exceptions.ReadTimeoutError: HTTPSConnec)解决方案

热门文章

  1. 服务器CPU作用是什么?
  2. Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering 论文阅读
  3. 最简单DIY基于ESP8266的智能彩灯②(在网页用按键和滑动条控制RGB灯)
  4. 10个谈话技巧让你平步青云
  5. SQL Server ansi_null_default | ansi_null_dflt_on
  6. 2021高考成绩特长生查询,2021高考体育生分数怎么算 体育四项评分标准及分值一览表...
  7. python3 实现应用启动及关键字检测
  8. 什么是无线HDMI,您应该使用它吗?
  9. 鸿湖万联与龙芯中科共建“芯片+操作系统”全自主产业生态链
  10. 元旦| 微软ATP伴你2023一路前行