新随笔  :: 管理

对于Nginx, 这些还是要知道的!

Posted on 2020-08-27 20:06  SliverLee  阅读(101)  评论(0)    收藏  举报

Nginx到底是什么?

     Nginx 是一款相当优秀的用于部署动态网站的轻量级服务程序,它最初是为俄罗斯门户站点而开发的,因其稳定性、功能丰富、占用内存少且并发能力强而备受用户的信赖。目前
国内诸如新浪、网易、腾讯等门户站点均已使用了此服务。
     Nginx 服务程序的稳定性源自于采用了分阶段的资源分配技术,降低了 CPU 与内存的占用率,所以使用 Nginx 程序部署的动态网站环境不仅十分稳定、高效,而且消耗的系统资
源也很少。此外,Nginx 具备的模块数量与 Apache 具备的模块数量几乎相同,而且现在已经完全支持 proxy、rewrite、mod_fcgi、ssl、vhosts 等常用模块。更重要的是,Nginx 还支
持热部署技术,可以 7×24 不间断提供服务,还可以在不暂停服务的情况下直接对 Nginx 服务程序进行升级。

Nginx安装(点我看详情)

服务器代理

反向代理

 客户端对代理服务器是无感知的,客户端不需要做任何配置,用户只请求反向代理服务器,反向代理服务器选择目标服务器,获取数据后再返回给客户端。
  反向代理服务器和目标服务器对外而言就是一个服务器,只是暴露的是代理服务器地址,而隐藏了真实服务器的 IP 地址。

 

server
  {
    listen 2491;#监听端口
    server_name 192.168.138.151;#域名
    index index.html index.htm index.php;
    root /usr/local/webserver/nginx/html;#站点目录
    location  / {       
           root html;  #/html目录
           proxy_pass http://192.168.138.151:80;  #请求转向
           index  index.html index.htm;      #设置默认页       
        }
}

比如我这里访问的是 http://192.168.138.151:2491,会自动跳转访问http://192.168.138.151:80

②正向代理

  Nginx 不仅可以做反向代理,实现负载均衡,还能用做正向代理来进行上网等功能。
如果设置完成之后不能上网,unset http_proxy取消全局变量

 

 负载均衡【本文第一个重点】

  将原先请求集中到单个服务器上的情况改为增加服务器的数量,然后将请求分发到各个服务器上,将负载分发到不同的服务器,即负载均衡。(SLB)

 

  

Nginx 分配服务器策略:

    轮询(默认):按请求的时间顺序依次逐一分配,如果服务器 down 掉,能自动剔除。

    权重:weight 越高,被分配的客户端越多,默认为 1。

    比如:每访问5次151,才会访问一次142

 upstream myserver {   
      server 192.168.138.151:80 weight=5;
      server 192.168.138.142:80 weight=1;
    }
 server
  {
    listen 2491;#监听端口
    server_name 192.168.138.151;#域名
    #index index.html index.htm index.php;
    root /usr/local/webserver/nginx/html;#站点目录
    location  / {       
           root html;  #html目录
           index index.html index.htm;  #设置默认页
           proxy_pass  http://myserver;  #请求转向 myserver 定义的服务器列表      
        } 
  }

 

 

 

 Nginx 缓存

实现效果:在 3 天内,通过浏览器地址栏访问 http://192.168.138.151/index.html,不会从服务器抓取资源,3 天后(过期)则从服务器重新下载

# http 区域下添加缓存区配置
proxy_cache_path /tmp/nginx_proxy_cache levels=1 keys_zone=cache_one:512m inactive=60s max_size=1000m;

# server 区域下添加缓存配置
location ~ \.(gif|jpg|png|htm|html|css|js)(.*) {
     proxy_pass http://192.168.138.151:80;#如果没有缓存则转向请求
     proxy_redirect off;
     proxy_cache cache_one;
     proxy_cache_valid 200 1h;            #对不同的 HTTP 状态码设置不同的缓存时间
     proxy_cache_valid 500 1d;
     proxy_cache_valid any 1m;
     expires 3d;
}

  Expires 是给一个资源设定一个过期时间,通过 Expires 参数设置,可以使浏览器缓存过期时间之前的内容,减少与服务器之间的请求和流量。也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源.

动静分离

  为了加快网站的解析速度,可以把静态页面和动态页面由不同的服务器来解析,加快解析速度,降低原来单个服务器的压力。

  

实现效果:通过浏览器地址栏访问 192.168.138.151/a.html ,访问静态资源服务器的静态资源内容。通过浏览器地址栏访问 192.168.138.151/a.jsp ,访问动态资源服务器的动态资源内容。

upstream static {   
    server 192.167.138.151:80;
}

upstream dynamic {   
    server 192.167.138.142:80;
}

server {
    listen       80;   #监听端口
    server_name  192.168.138.151; 监听地址

    # 拦截动态资源
    location ~ .*\.(php|jsp)$ {
       proxy_pass http://dynamic;
    }

    # 拦截静态资源
    location ~ .*\.(jpg|png|htm|html|css|js)$ {       
       root /data/;  #html目录
       proxy_pass http://static;
       autoindex on;;  #自动打开文件列表
    }  
}

 

 高可用【本文第二个重点】

  为了提高系统的可用性和容错能力,可以增加 Nginx 服务器的数量,当主服务器发生故障或宕机,备份服务器可以立即充当主服务器进行不间断工作。

 实现效果:准备两台 Nginx 服务器,通过浏览器地址栏访问虚拟 IP 地址,把主服务器的 Nginx 停止,再次访问虚拟 IP 地址仍旧有效。

# 安装 keepalived
yum install keepalived -y

# 检查版本
rpm -q -a keepalived
keepalived-1.3.5-16.el7.x86_64

  

  

 


Nginx配置

①文件结构

...              #全局块

events {         #events块
   ...
}

http      #http块
{
    ...   #http全局块
    server        #server块
    { 
        ...       #server全局块
        location [PATTERN]   #location块
        {
            ...
        }
        location [PATTERN] 
        {
            ...
        }
    }
    server
    {
      ...
    }
    ...     #http全局块
}
Nginx 配置文件由三部分组成:
  全局块,主要设置一些影响 Nginx 服务器整体运行的配置指令。比如:worker_processes 1;worker_processes 值越大,可以支持的并发处理量就越多。
  Events 块,涉及的指令主要影响 Nginx 服务器与用户的网络连接。比如:worker_connections 1024;支持的最大连接数。
  HTTP 块,又包括 HTTP 全局块和 Server 块,是服务器配置中最频繁的部分,包括配置代理、缓存、日志定义等绝大多数功能。Server 块:配置虚拟主机的相关参数。Location 块:配置请求路由,以及各种页面的处理情况。

 配置文件

 

########### 每个指令必须有分号结束。#################
#user www www;  #配置用户或者组,默认为nobody nobody。
#worker_processes 2;  #允许生成的进程数,默认为1
#pid /nginx/pid/nginx.pid;   #指定nginx进程运行文件存放地址
error_log log/error.log debug;  #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
events {
    accept_mutex on;   #设置网路连接序列化,防止惊群现象发生,默认为on
    multi_accept on;  #设置一个进程是否同时接受多个网络连接,默认为off
    #use epoll;      #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    worker_connections  1024;    #最大连接数,默认为512
}
http {
    include       mime.types;   #文件扩展名与文件类型映射表
    default_type  application/octet-stream; #默认文件类型,默认为text/plain
    #access_log off; #取消服务日志    
    log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式
    access_log log/access.log myFormat;  #combined为日志格式的默认值
    sendfile on;   #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
    sendfile_max_chunk 100k;  #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
    keepalive_timeout 65;  #连接超时时间,默认为75s,可以在http,server,location块。

    upstream mysvr {   
      server 127.0.0.1:7878;
      server 192.168.10.121:3333 backup;  #热备
    }
    error_page 404 https://www.baidu.com; #错误页
    server {
        keepalive_requests 120; #单连接请求上限次数。
        listen       4545;   #监听端口
        server_name  127.0.0.1;   #监听地址       
        location  ~*^.+$ {       #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
           #root path;  #根目录
           #index vv.txt;  #设置默认页
           proxy_pass  http://mysvr;  #请求转向mysvr 定义的服务器列表
           deny 127.0.0.1;  #拒绝的ip
           allow 172.18.5.54; #允许的ip           
        } 
    }
} 

检查Nginx配置的正确性

#/usr/local/webserver/nginx/sbin/nginx -t

 

启动 Nginx

Nginx 启动命令如下:

# /usr/local/webserver/nginx/sbin/nginx

 

 Nginx常用命令

/usr/local/webserver/nginx/sbin/nginx -s reload            # 重新载入配置文件
/usr/local/webserver/nginx/sbin/nginx -s reopen            # 重启 Nginx
/usr/local/webserver/nginx/sbin/nginx -s stop              # 停止 Nginx
/usr/local/webserver/nginx/sbin/nginx -t # 检查文件配置正确性