Nginx(("engine x")由俄罗斯的程序设计师Igor Sysoev所开发)是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP三、SMTP代理服务器;Nginx能够做为一个HTTP服务器进行网站的发布处理,另外nginx能够做为反向代理进行负载均衡的实现。php
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 8083;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location ~ .*\.(gif|jpg|pdf|jpeg|png)$ { #root D:/nginx-1.15.5/temp/images/;#指定图片存放路径(能够放在nginx文件夹路径里也能够放其余p盘) root E:/nginx-1.15.5/temp/images/; }
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
(正向代理相似一个跳板机,代理访问外部资源)html
说反向代理以前,咱们先看看正向代理,正向代理也是你们最常接触的到的代理模式,咱们会从两个方面来讲关于正向代理的处理模式,分别从软件方面和生活方面来解释一下什么叫正向代理nginx
在现在的网络环境下,咱们若是因为技术须要要去访问国外的某些网站,此时你会发现位于国外的某网站咱们经过浏览器是没有办法访问的,此时你们可能都会用一个操做FQ进行访问,FQ的方式主要是找到一个能够访问国外网站的代理服务器,咱们将请求发送给代理服务器,代理服务器去访问国外的网站,而后将访问到的数据传递给咱们!后端
上述这样的代理模式称为正向代理,正向代理最大的特色是客户端很是明确要访问的服务器地址;服务器只清楚请求来自哪一个代理服务器,而不清楚来自哪一个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。浏览器
明白了什么是正向代理,咱们继续看关于反向代理的处理方式,举例如我大天朝的某宝网站,天天同时链接到网站的访问人数已经爆表,单个服务器远远不能知足人民日益增加的购买欲望了,此时就出现了一个你们耳熟能详的名词:分布式部署;也就是经过部署多台服务器来解决访问人数限制的问题;某宝网站中大部分功能也是直接使用nginx进行反向代理实现的,而且经过封装nginx和其余的组件以后起了个高大上的名字:Tengine,有兴趣的童鞋能够访问Tengine的官网查看具体的信息:http://tengine.taobao.org/。那么反向代理具体是经过什么样的方式实现的分布式的集群操做呢,咱们先看一个示意图:安全
经过上述的图解你们就能够看清楚了,多个客户端给服务器发送的请求,Nginx服务器接收到以后,按照必定的规则分发给了后端的业务处理服务器进行处理了。此时~请求的来源也就是客户端是明确的,可是请求具体由哪台服务器处理的并不明确了,Nginx扮演的就是一个反向代理角色服务器
反向代理,主要用于服务器集群分布式部署的状况下,反向代理隐藏了服务器的信息!网络
一般状况下,咱们在实际项目操做时,正向代理和反向代理颇有可能会存在在一个应用场景中,正向代理代理客户端的请求去访问目标服务器,目标服务器是一个反向单利服务器,反向代理了多台真实的业务处理服务器。具体的拓扑图以下:session
咱们已经明确了所谓代理服务器的概念,那么接下来,Nginx扮演了反向代理服务器的角色,它是以依据什么样的规则进行请求分发的呢?不用的项目应用场景,分发的规则是否能够控制呢?app
这里提到的客户端发送的、Nginx反向代理服务器接收到的请求数量,就是咱们说的负载量。
请求数量按照必定的规则进行分发到不一样的服务器处理的规则,就是一种均衡规则。
因此~将服务器接收到的请求按照规则分发的过程,称为负载均衡。
负载均衡在实际项目操做过程当中,有硬件负载均衡和软件负载均衡两种,硬件负载均衡也称为硬负载,如F5负载均衡,相对造价昂贵成本较高,可是数据的稳定性安全性等等有很是好的保障,如中国移动中国联通这样的公司才会选择硬负载进行操做;更多的公司考虑到成本缘由,会选择使用软件负载均衡,软件负载均衡是利用现有的技术结合主机硬件实现的一种消息队列分发机制。