Nginx概念讲解

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

1、Nginx是什么

Nginx是HTTP服务器,可将服务器上的静态文件通过HTTP协议展示给客户端。


2、Nginx能做什么有什么优势

客户端假设通过HTTP协议访问A网站中的应用服务器,那么网站管理者可在服务器加一个Nginx(也就是所谓的反向代理),让客户端线先请求Nginx,随后Nginx去请求应用服务器,然后将结果返回给客户端。那么可能会有小伙伴疑惑既然可以直接访问HTTP,那为何要多此一举,去先访问代理呢,这么做就什么好处呢,优势如下。

优势1-支持负载均衡

当一个网站访问量特别大的时候,网站的各种速度都会越来越慢,一台服务器肯定是不够用了。这个时候就需要将应用部署在多台服务器上,将请求平摊给多台服务器来处理。这样的好处是,万一某一台服务器GG了,但只要还有其他的服务器正常运行,就不会影响使用。这个时候就可以通过Nginx反向代理来实现负载均衡。

下面这个配置会将请求轮询分配到服务器中,这样当客户端请求次数多的时候,可以由不同的服务器来处理。


  1. upstream myapp {  
  2.     server192.168.1.1:8080; # 服务器1  
  3.     server192.168.1.2:8080; # 服务器2  
  4.     server192.168.1.3:8080; # 服务器3 
  5. }  
  6. server {  
  7.     listen80;  
  8.     location / {  
  9.         proxy_pass http://myapp;  
  10.     }  
  11. }  

  1.  可以通过ip-hash的方式,根据客户端ip地址的hash值来请求分配给固定的某一个服务器处理。

  2. upstream myapp {  
    1.     ip_hash;
    2.     server192.168.1.1:8080;  
    3.     server192.168.1.2:8080;  
    4.     server192.168.3.2:8080; 
    5. }  
    6. server {  
    7.     listen80;  
    8.     location / {  
    9.         proxy_pass http://myapp;  
    10.     }  
    11. }  
  1. 服务器的硬件会影响他的性能,所以一般把大部分请求分配给好的服务器,把少量请求分配给差的服务器是比较好的一种做法,这个时候我们可以过weight关键字来来控制 weight越大,负载的权重就越大  还可用过max_fails 字段控制请求失败次数:允许请求失败的次数默认为    当超过最大次数时,返回proxy_next_upstream 模块定义的错误  然后通过设置关键字fail_timeout:max_fails来设置失败后,暂停的时间
  2. tream myapp {  
  3.       server 192.168.1.1:8080 weight=1 max_fails=2 fail_timeout=30s;
  4.      server 192.168.2.1:8080 weight=3 max_fails=2 fail_timeout=30s;
  5.  
  6. }  
  7. server {  
  8.     listen80;  
  9.     location / {  
  10.         proxy_pass http://myapp;  
  11.     }  
  12. }  

优势2-虚拟主机

    负载均衡虽然很好用,但并不是适合所有的网站,例如有的网站,访问量较小,所以需要节约成本,这个时候就需要将多个网站放在同一台服务器上。例如将A和B两个网站部署在同一台服务器上,然后将两个域名同时解析到一个IP地址,但是要让用户通过两个域名打开两个完全不同的网站,彼此之间不影响,就像访问两个服务器一样,这个时候就像2个虚拟主机。

  1. server {  
  2.     listen80default_server;  
  3.     server_name _;  
  4.     return444; # 过滤其他域名的请求,返回444状态码  
  5. }  
  6. server {  
  7.     listen80;  
  8.     server_name a; # a网站域名  
  9.     location / {  
  10.         proxy_pass http://localhost:8082; # 对应端口号8082  
  11.     }  
  12. }  
  13. server {  
  14.     listen80;  
  15.     server_name b; # b网站域名  
  16.     location / {  
  17.         proxy_pass http://localhost:8083; # 对应端口号8083  
  18.     }  
  19. }  

这个时候在服务器8082和8083分别开了一个应用,客户端可以通过不同的域名去访问,根据server_name可以反向代理到对应的应用服务器。

虚拟主机的原理是通过HTTP请求头中的Host是否匹配server_name来实现的,另外server_name配置还可以过滤将某些域名指向你主机服务器的恶意行为。


优势3-FastCGI

Nginx不支持PHP等语言,但是它可以通过FastCGI来将请求扔给某些语言或框架处理(例如PHP、Python、Perl)。

配置中将.php结尾的请求通过FashCGI交给PHP-FPM处理,PHP-FPM是PHP的一个FastCGI管理器。

  1. server {  
  2.     listen80;  
  3.     location ~ \.php$ {  
  4.         include fastcgi_params;  
  5.         fastcgi_param SCRIPT_FILENAME /PHP文件路径$fastcgi_script_name; # PHP文件路径  
  6.         fastcgi_pass127.0.0.1:9000; # PHP-FPM地址和端口号  
  7.         # 另一种方式:fastcgi_pass unix:/var/run/php5-fpm.sock;  
  8.     }  
  9. }  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值