Nginx基础

Nginx介绍

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

简单来说:Nginx 就是一款http服务器,主要作用是反向代理、负载均衡、动静分离。

Nginx优点

优点:高性能、吞吐量高(占内存小,可以实现高并发连接、处理响应快)、隐藏内部真实服务器ip地址、可实现http服务器、虚拟主机、反向代理、负载均衡…

缺点:(强行给出缺点)要说缺点的话就是不是Java语言开发的,是C语言开发的。

Nginx应用场景

  1. http 代理、反向代理
  2. 负载均衡
  3. web 缓存

限流、黑白名单等等

Nginx配置文件(nginx.conf)介绍

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

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

《Nginx配置文件具体参数说明》

Nginx正向/反向代理

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

反向代理:反向代理服务器对于客户端而言它就像是原始服务器,并且客户端不需要进行任何特别的设置。

对于反向代理我的理解是
客户端的所有请求统统会到代理服务器的手上,代理服务器再把请求给到内部真正处理请求的服务器,内部服务器处理完请求返回结果给代理服务器再给到客户端。
(这个过程,客户端是无感知的,感觉就是代理服务器就是它要访问的目标服务器,其实是代理服务器内部转发后处理的一系列操作。)

正向代理:正向代理是一个位于客户端和原始服务器(origin server)之间的服务器。

对于正向代理我的理解是
真实服务器是不允许被客户端访问,客户端需要通过代理服务器才能访问。
(这个过程,用户是感知的,举个例子:我要访问国外的某个网站,但是国内是不允许直接访问的,但是我知道有个代理服务器,通过代理服务器我可以正常访问到我想访问的那个国外网站)

核心配置代码示例:

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

Nginx实现负载均衡

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

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

简单来说: 负载均衡就是解决单台服务器的压力,是一种解决高并发的基本方案。

举例说明: 假设有若干个客户端访问同一台服务器,那么肯定是承受不住的。如果我们用Nginx作为负载均衡器,让所有的客户端通过Ngxin负载均衡到若干个服务器,那么就解决了单台服务器的访问压力。我把这理解为负载均衡。

图例说明:
在这里插入图片描述
负载均衡策略:
Nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为轮询,加权轮询,Ip hash

Ip hash 算法,对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题(现在几乎没有用这种方案的了)。

轮询(默认):通过某种规则比如请求次数hash机器数量得出被分配的机器坐标。

权重:配置文件中设置服务器的weight指,越高的则被访问的比率越多,当服务器的性能层次不齐的时候可以指定权重。

配置代码示例:

upstream myproject {
		server 127.0.0.1:8000 weight=3;
		server 127.0.0.1:8001 weight=5;
		server 127.0.0.1:8002 weight=7;
		server 127.0.0.1:8003;
	}

Ip hash:每个请求按访问iphash结果分配,这样每个访客固定访问一个后端服务器。

负载均衡配置代码示例:
一个简单的负载均衡的示例,把www.domain.com均衡到本机不同的端口,也可以改为均衡到不同的地址上。

http {
 	upstream myproject {
		server 127.0.0.1:8000 weight=3;
		server 127.0.0.1:8001;
		server 127.0.0.1:8002;
		server 127.0.0.1:8003;
	}
	server {
		listen 80;
		server_name www.domain.com;
		location / {
			proxy_pass http://myproject;
			index  index.html index.htm;
		}
	}
}

宕机轮询配置规则

负载均衡时,如果有机器宕机,那么肯定有影响的。

配置示例:

server {
        listen       80;
        server_name  www.darian.com;
        location / {
		    proxy_pass  http://myproject;
			index  index.html index.htm;
			# 规定时间内如果轮到的服务器没有响应,那就分给下一个咯
			proxy_connect_timeout 1;
            proxy_send_timeout 1;
            proxy_read_timeout 1;
        }
}

Nginx解决网站跨域问题

一般比较大的互联网公司会有自己的网关接口系统,通过域名/项目名来区分项目,进行拦截。

图例:
在这里插入图片描述
配置代码示例:

server {
    listen       80;
    server_name  www.darian.com;
    location /A {
	    proxy_pass  http://wwwW.lucy.com:81/A;
		index  index.html index.htm;
    }
	location /B {
	    proxy_pass  http://wwwW.coco.com:81/B;
		index  index.html index.htm;
    }
}

Nginx配置防盗链

我相信做开发的特别是前端的,都有盗用过别人网站一些资源,最常见的就是图片啦。虽然可以通过代码判断请求头(Header中)的引用来源的域名区分,但是不用代码的话Nginx也能做到,同时更加方便的解决该问题。

配置代码示例:

location ~* \.(gif|jpg|png|swf|flv)$ {
	#root html
	valid_referers none blocked *.darian.com;
	if ($invalid_referer) {
		return 403;
	}
}
#前面的root可以不要如果你在server{}中有设置可以不需要设定

Nginx配置DDOS

《Dos与DDos攻击的区别》
《DDoS与PDoS攻击的区别》

解决DDOS,限制请求速度次数、ip限制、黑白名单

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

配置代码示例:(限制请求速度次数)

limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m;
server {
	# 省略其他代码
	location /login.html {
		limit_req zone=one;
		# 省略其他代码
	}
}

有兴趣的可以"面向百度学习一波”。

参考文献:
http://www.nginx.cn/doc/
https://www.runoob.com/w3cnote/nginx-setup-intro.html
https://segmentfault.com/a/1190000005789137
https://zhidao.baidu.com/question/466301367.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值