开发笔记 | Nginx简单快速入门笔记

目录

Nginx介绍

什么是Nginx

Nginx常用功能

配置文件nginx.conf

配置文件内容模板

全局变量模块

events性能配置模块

http请求处理模块

http模块的全局配置块

server块

常用命令

反向代理

正向代理

反向代理

反向代理单个服务

反向代理多个服务

proxy_pass路径拼接规则

负载均衡

为什么要使用负载均衡

Nginx负载均衡的主要策略

轮询(默认方式)

设置weight权重

设置ip_hash

设置fair

nginx的其他使用

黑名单白名单配置

location匹配规则

动静分离

web缓存

Session共享问题

Keepalived保证Nginx的高可用

一些其他配置信息


Nginx介绍

什么是Nginx

Nginx是一个轻量级的高性能web服务器。

特点:占用内存小,并发强,启动快速,支持7x24小时不间断运行

Nginx常用功能

负载均衡,反向代理,动静分离

启动nginx后,会启动两个进程

master进程,读取配置文件,管理worker进程

worker进程,维护线程,处理请求

 windows/linux安装方式=》百度

配置文件nginx.conf

配置文件分三大模块:全局变量配置模块,events性能配置模块,http请求处理模块

配置文件内容模板

#user  nobody;
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }
        ......
    }
    ......
}

全局变量模块

user  nobody; 指定用户组
worker_processes  1; 工作进程数,默认1,可调至CPU最大核数,一个进程绑定一个CPU核

events性能配置模块

与用户网络连接有关,性能的优化一般调整此模块的参数,如配置允许同时接受的网络连接数,每个进程的最大连接数,选取某种事件驱动模型处理请求,开启多个网络连接序列化等,如:

worker_connections  1024; 配置单个工作进程允许创建的外部连接数

http请求处理模块

http模块的全局配置块

单连接请求数设置,日志设置,连接超时时间设置,开启文件传输等

include       mime.types;
default_type  application/octet-stream;

sendfile        on;

keepalive_timeout  65;

server块

(1) 一个http模块中可配置多个server块,每个server代表一个虚拟主机(服务)

(2) listen       80; 监听80端口

(3) server_name  localhost; 服务域名

(4) location 用于配置不同的接口转发

 location / {
            root   html; 
            index  index.html index.htm;
 }

root表示静态资源 由nginx返回资源  html为静态资源的目录

index表示对应静态资源目录下某个静态资源

表示80端口下 所有"/"请求均会被转发至静态资源

location /admin {
           proxy_pass http://127.0.0.1:8082;
 }

表示监听了80端口下的/admin接口,转发至http://127.0.0.1:8082

proxy_pass表示动态请求,将此请求转发至对应的服务上,可配置多个proxy_pass

常用命令

whereis nginx 查看安装目录

cd /usr/local/nginx/sbin 切换至安装目录、

./nginx 启动nginx

ps -ef | grep nginx 查看nginx是否启动成功

ps aux | grep nginx 查看nginx进程

nginx -s stop 强制停止nginx

nginx -s quit 安全退出nginx,等所有进程都完成后关闭退出

vim nginx.conf 修改配置文件(编辑后 esc退出编辑模式,:wq 保存退出)

nginx -t 检测配置文件是否存在问题

nginx -s reload 重启nginx

反向代理

正向代理

代理客户端,如VPN代理,如访问YOUTUBE

反向代理

代理服务端,如多个客户端多个请求过来,通过nginx代理后转发至不同服务器

反向代理单个服务

在location中新增proxy_pass

当proxy_pass 不携带接口信息

location /admin {
           proxy_pass http://127.0.0.1:8082;
}

实际转发 为请求 http://127.0.0.1:8082/admin

当proxy_pass 携带接口信息

location /web/admin {
           proxy_pass http://127.0.0.1:8082/admin;
}

实际转发 为请求 http://127.0.0.1:8082/admin

反向代理多个服务

(1)在location中新增多个proxy_pass

location /admin {
           proxy_pass http://127.0.0.1:8082;

           proxy_pass http://127.0.0.2:8082;

           proxy_pass http://127.0.0.3:8082;
}

(2)添加upstream模块实现负载均衡

upstream test{
    server 127.0.0.1:8082;

    server 127.0.0.2:8082;

    server 127.0.0.3:8082;
}
server {

        listen       80;
        server_name  localhost;

      location /admin {
          proxy_pass http://test;
        }

}

proxy_pass路径拼接规则

如果proxy_pass 后没有携带URL路径信息,如/或者/xxx,则反向代理会拼接location后的匹配部分,如果proxy_pass 后有配置具体的接口,则不再进行拼接

负载均衡

主要在upstream中进行负载均衡设置

为什么要使用负载均衡

如果是单体服务,当访问量过大会导致服务器有一定的压力,故准备多台服务器,将项目部署至多个服务器上,通过负载均衡,将请求按照设置的策略分配到不同的服务器上,以减轻服务器的压力

Nginx负载均衡的主要策略

轮询(默认方式)

根据请求的时间,按顺序分配至不同的服务器上,如果其中有某台服务器宕机,则会自动被排除

upstream test{
    server 127.0.0.1:8082;

    server 127.0.0.2:8082;

    server 127.0.0.3:8082;
}

设置weight权重

按照配置的权重比例分发请求,权重越大被分配到的请求几率越高

upstream test{
    server 127.0.0.1:8082 weight = 3;

    server 127.0.0.2:8082 weight = 2;

    server 127.0.0.3:8082 weight = 1;
}

设置ip_hash

根据ip的hash值进行分配,也就是ip相同就会分配到同一台服务器上,同时也有效解决了session共享问题

upstream test{

    ip_hash;
    server 127.0.0.1:8082;

    server 127.0.0.2:8082;

    server 127.0.0.3:8082;
}

设置fair

需要下载安装nginx的upstream-fair模块,根据服务器响应速率来进行分配,谁响应快就会分到更多的请求

upstream test{

    fair;
    server 127.0.0.1:8082;

    server 127.0.0.2:8082;

    server 127.0.0.3:8082;
}

nginx的其他使用

黑名单白名单配置

server块中

location / {   #设置白名单 allow为允许访问得ip deny拒绝访问该路径得ip 默认都是allow all
    allow xxx.xx.xxx.xx;
    allow xxx.xx.xx.1/100;
    deny all;
  }
  
  location /test {  #只允许111.11.111.11访问/test目录
     allow 111.11.111.11;
     deny  all;
  }

location / {
    include whitelist.conff; #读取/etc/nginx下whitelist.conf 配置的白名单
    deny all;
}

cat /whitelist.conf

allow 10.1.1.10;

allow 10.1.1.11;

location匹配规则

location [=|~|~*|^~|!~|!~*] /uri/ { … }

= 精准匹配

^ 前缀匹配,

~ 区分大小写

~* 不区分大小写

不带任何修饰符,也表示前缀匹配

!~ 区分大小写 不匹配

!~* 不区分大小写不匹配

优先级:精准匹配=,前缀匹配^~,文件顺序正则,不带修饰符的前缀匹配。通用匹配/

当匹配成功后停止,按照当前匹配最详细的规则处理请求

匹配时遵循最佳匹配原则,按照匹配到最多的规则进行匹配,如

location ^~ /test/page 与 location ^~ /test 

当请求为http:127.0.0.1:8081/test/page/xxx 则会优先匹配location ^~ /test/page并处理

动静分离

前端静态文件打包放在nginx同台服务器下,这样就不需要再到对应的远程服务器上获取资源,提高了前端页面响应速率,也可以在这一层实现简单的静态资源拦截

web缓存

对不同的文件进行缓存且配置灵活,支持FastCGI_Cache

Session共享问题

上文提到ip_hash实现负载均衡的策略,通过计算ip的哈希值,把相同ip分配到相同的服务器上,能够有效解决session共存问题,但是使用redis性能会更好

Keepalived保证Nginx的高可用

在多台服务器安装nginx,如果其中一个nginx服务宕机,则会立刻启用另一个nginx服务

keepalived更多功能后续学到补充

一些其他配置信息

(参考网上)

#全局变量配置模块
user test_admin;  #设置用户/用户组  默认为nobody
worker_processes 1;  #设置启动的进程数
error_log log/error.log debug;  #设置日志路径及日志级别(debug/info/error等)
pid    /nginx/pid/nginx.pid;  #设置nginx进程运行文件存放的位置

#events性能配置模块
events {
  use  epoll;  #设置事件驱动模式,多路复用模式为epoll,但可以有效提高nginx的性能(select|poll|kqueue|epoll等)
  worker_connections 1024;  #单个工作进程worker process的最大请求数
  accept_mutex on;  #设置网路连接序列化,防止惊群现象,默认为on
  multi_accept on;  #设置单个进程是否同时接受多个网络连接,默认为off
}
 
http {
  include     mime.types;   #文件拓展名与文件类型映射表
  default_type application/octet-stream;  #文件类型,默认为text/plain
  access_log  /nginx/access.log;  #设定服务日志格式 access_log 关闭off 
  sendfile    on;   #sendfile 指令指定 nginx 是否调用 sendfile 函数来输出文件
  #tcp_nopush   on;  
  keepalive_timeout 65; #连接超时时间 默认为75s
   

  gzip on;  #开启gzip压缩
  gzip_disable "MSIE [1-6]\.(?!.*SV1)";
 
  client_header_buffer_size  1k;   #设定请求缓冲
  large_client_header_buffers 4 4k;
 
  include /etc/nginx/conf.d/*.conf;
  include /etc/nginx/sites-enabled/*;
 
  
  upstream test {   #设定负载均衡的服务器列表
    server 127.0.0.1:8080 weight=1;  #weigth设置轮询权重
    server 127.0.0.2:8080 weight=2;
    server 127.0.0.3:8080 weight=3;
  }
 
 
  server {
    listen    80;  #监听80端口
    server_name www.abc.com;   #服务名 定义使用该域名访问
 
  location / {  #默认请求
     root  /root;   #静态资源 根目录下的root目录
     index index.php index.html index.htm;  #静态资源 首页
    }
 

  error_page  500 502 /50x.html; #定义错误页面 内部跳转 访问出现500 502时返回对应50x.html内容 error_page  500 502 =200 /50x.html;自定义返回状态码变为200
    location = /50x.html {
    root  /root;
  }
 
  location ~ ^/(images|javascript|js|css|flash|media|static)/ {  #匹配静态文件
    root /xxx/xxx;
    expires 30d;   #设置过期,有效期30天
  }
 
  location /NginxStatus {  #设置查看Nginx状态地址
    stub_status      on;
    access_log       on;
    auth_basic       "NginxStatus";
    auth_basic_user_file conf/htpasswd;
  }

  location / {   #设置白名单 allow为允许访问得ip deny拒绝访问该路径得ip 默认都是allow all
    allow xxx.xx.xxx.xx;
    allow xxx.xx.xx.1/100;
    deny all;
  }
  
  location /test {  #只允许111.11.111.11访问/test目录
     allow 111.11.111.11;
     deny  all;
  } 
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值