赞
踩
电脑、移动设备和平板电脑等设备的连接使得互联网基数的增大,因此,网站面临的环境也日趋复杂,其网站的架构受到了极大的挑战。我们熟悉的Apache服务器出现较早,它是基于REST风格的服务器,通过HTTP协议实现各种网络服务。然而,也正是因为它出现较早,受制于当时的环境,在用户规模、网络带宽等方面并没有考虑到高并发问题。当数以万计的并发量产生的时候,服务器会消耗大量内存存,操作系统对其进程或线程之间的切换也会消耗大量的CPU资源,从而使得HTTP请求的响应时间降低。因此,需要解决这个问题。
Nginx是高性能的HTTP和反向代理的服务器,也是基于REST风格的服务器,用来处理高并发场景,且能够经受住高负载的考验,可以支持高达50000个并发连接数。Nginx中采用了分阶段资源分配技术,从而使其CPU和内存占用率非常低。根据Nginx官方给出的信息:当保持10000个没有活动的连接时,Nginx只占2.5M内存。Nginx支持热部署,可以做到不间断服务,启动十分方便。
代理服务器(Proxy Server)是指局域网内部的机器通过代理服务器发送请求到互联网上的服务器,代理服务器一般作用在客户端。当本地网络无法直接访问一些网站或者服务器的时候,就需要通过一个代理点服务器来完成,而这个服务器和本地网络是可以ping通的。我们就可以通过设置该代理服务器的一些参数,如:IP、端口,通过该平台就可以连接到其他网络区域。
Web代理(proxy)服务器是网络的中间实体,位于Web客户端和Web服务器之间。代理服务器是介于客户端和Web服务器之间的另一台服务器,有了它之后,浏览器不会直接到Web服务器去取回网页。而是向代理服务器发出请求,由代理服务器来取回浏览器所需要的信息并传送给浏览器。所以,代理服务器是一种重要的服务器安全功能,其主要工作在OSI的会话层。
a.正向代理
正向代理是一个位于客户端和原始服务器之间的服务器,为了从原始服务器获取内容,客户端向代理服务器发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。因此,客户端必须要进行一些设置才能使用正向代理,如:正向代理服务器的IP地址、代理程序的端口。正向代理,代理的是客户端,所以客户端要明确自己要访问的服务器的地址。对于服务器而言,只需要明白请求是来自哪个代理服务器,而不需要明白请求来自哪个具体的客户端。所以,正向代理的方式屏蔽或隐藏了真实客户端的信息。如下图:
b.反向代理
反向代理(Reverse Proxy)方式是指以代理服务器来接受 internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。因此,客户端时不需要感知代理的存在的,反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。因为客户端不需要进行配置就可以直接访问。反向代理,隐藏了服务器的信息,代理的是服务端,代替服务端接收请求,主要用于服务器集群的分布式部署的情况下。如下图:
反向代理保证了内网的安全,并且通过反向代理服务器来优化网站的负载。
c.两者之间的区别
正向代理 | 反向代理 | |
---|---|---|
位置 | 在客户机和目标主机之间 | 在服务器端 |
代理对象 | 代理客户端,服务器不清楚实际发起请求的客户端 | 代理服务端,客户端不清楚实际提供服务的服务端 |
安全差异 | 允许客户端通过它访问任意网站,并且隐藏客户端自身。因此必须通过安全措施确保仅为经过授权到的客户端提供服务 | 对外都是透明的,访问者不知道自己访问的是一个代理 |
每年春运大家都会抢票回家,只为和亲人团聚。当放票开始,所有人开始抢票,就会出现大量的请求,如果只有一个服务器去接受这些请求,就很有可能出现服务中断或者业务数据丢失。因此,我们希望能有一门技术,在业务量增长的时候,如果出现单点故障等问题,不会影响到后续业务的继续进行。
LB(Load Balance,负载均衡)是一种集群技术,它建立在现有网络结构之上,提供了一种廉价有效透明的方法去扩展现有的网络设备和服务器的带宽,增加吞吐量,加强网络数据处理能力,提高网络的灵活性和可用性。
负载均衡将来自实际运行服务的物理服务器中的“服务”(用户访问站点)进行虚拟化处理,在大量物理服务器之间实现负载均衡,并使这些服务器对外界看起来犹如一个大服务器,为用户提供高可用性、高扩展性、可预测的应用服务。
如下图:
在学校的时候,我们总会有很多的课设,比如说:老师会让做一个图书管理系统、学生管理系统等等。在实现这个系统的时候,里面大致有两种数据资源:动态数据、静态数据。静态资源一般指的是图片、css等一些资源;动态数据则是呈现在页面上的HTML代码等。我们在学校所做的系统都是独木桥上唱猴戏——闹着玩的,因为我们实现的系统网站流量小、业务简单,所以在实现的过程中将两类数据放到一台服务器上去完成了。我们所熟知的京东、淘宝之类的网站,如果是我们那种实现方式,那么在双十一、618的时候就会随着访问量的增大而出现带宽不足、磁盘IO高的问题。因此,提出了动态分离的方式,将图片等静态资源放到静态服务器上,从而分担了大部分的数据流量和IO负载。
动静分离是将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用访问。如下图:
(1)进入到root用户下
(2)使用apt-get install nginx安装
(3)测试安装是否成功
(4)启动nginx
(5)启动后,在网页地址栏输入ip地址,即可看到nginx的欢迎页面。
命令:nginx
结果:
说明:在其他教程里看到nginx的启动命令还有一个start nginx,但我试了之后不行。我在Ubuntu以root用户运行nginx即可成功。如果有知道的小伙伴还请指教。
命令:nginx -s stop
结果:
命令:nginx -s quit
结果:
命令:nginx -t
结果:
命令:nginx -s reload
结果:
命令:nginx -v
结果:
前面介绍了Nginx的安装,我们是通过apt的方式安装的。安装之后,可以在/etc/nginx目录中查看到Nginx的配置文件。
nginx.conf的文件信息如下:
- user www-data;
- worker_processes auto;
- pid /run/nginx.pid;
- include /etc/nginx/modules-enabled/*.conf;
-
- events {
- worker_connections 768;
- # multi_accept on;
- }
-
- http {
-
- ##
- # Basic Settings
- ##
-
- sendfile on;
- tcp_nopush on;
- tcp_nodelay on;
- keepalive_timeout 65;
- types_hash_max_size 2048;
- # server_tokens off;
-
- # server_names_hash_bucket_size 64;
- # server_name_in_redirect off;
-
- include /etc/nginx/mime.types;
- default_type application/octet-stream;
-
- ##
- # SSL Settings
- ##
-
- ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
- ssl_prefer_server_ciphers on;
-
- ##
- # Logging Settings
- ##
-
- access_log /var/log/nginx/access.log;
- error_log /var/log/nginx/error.log;
-
- ##
- # Gzip Settings
- ##
-
- gzip on;
-
- # gzip_vary on;
- # gzip_proxied any;
- # gzip_comp_level 6;
- # gzip_buffers 16 8k;
- # gzip_http_version 1.1;
- # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
-
- ##
- # Virtual Host Configs
- ##
-
- include /etc/nginx/conf.d/*.conf;
- include /etc/nginx/sites-enabled/*;
- }
-
-
- #mail {
- # # See sample authentication script at:
- # # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
- #
- # # auth_http localhost/auth.php;
- # # pop3_capabilities "TOP" "USER";
- # # imap_capabilities "IMAP4rev1" "UIDPLUS";
- #
- # server {
- # listen localhost:110;
- # protocol pop3;
- # proxy on;
- # }
- #
- # server {
- # listen localhost:143;
- # protocol imap;
- # proxy on;
- # }
- #}
通过观察上面的配置文件信息,可以将Nginx的配置文件分为三部分:
全局块指的是从配置文件的起始位置到events块之间的内容,主要设置一些影响Nginx服务器整体运行的配置指令,如:运行Nginx服务器的用户(组)、允许生成的worker_process数、进程PID存放路径、日志存放路径和类型以及配置文件的引入等。
观察上面的配置文件,可以看到worker_process,这是Nginx服务器并发处理服务的关键配置,worker_processes的值越大,可以支持的并发处理量越多。
events块涉及的指令主要影响Nginx服务器和用户的网络连接,常用的设置包括是否开启对多工作进程下的网络连接进行序列化、是否能允许同时接收多个网络连接、选取何种事件驱动模型来处理连接请求以及每个工作进程可以同时支持的最大连接数等。
在上面的配置中每个work process支持的最大连接数为1024。
- events {
- worker_connections 768;
- # multi_accept on;
- }
http块是Nginx服务器配置中最频繁的部分,像代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。http又可以分为两部分:http全局块、server块。
http全局块配置的指令包括文件引入、MIMT-TYPE定义、日志自定义、连接超时时间、单连接请求数上限等。
在每个http块可以包括多个server块,而每个server块又相当于一个虚拟主机。而每个server块可以分为全局server块,且可以同时包含多个location块。
a.全局server块
最常见的配置是本虚拟机主机的监听配置和本虚拟机主机的名称或者IP配置。
b.location块
一个server块可以配置多个location块,其主要作用是基于Nginx服务器接收到的请求字符串完成对虚拟主机名称之外的字符串进行匹配,并对特定的请求进行处理以及地址定向、数据缓存和应答控制等功能。一些第三方的模块也在这里可以配置。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。