nginx基础教程1

123 阅读2分钟

目录结构

安装好的目录页 image.png

  • conf:用来存放配置文件相关
  • html:用来存放静态文件的默认目录 html、css等
  • sbin:nginx的主程序

基本运行原理

image.png

配置语法

nginx的配置文件conf/nginx.conf,默认监听端口80

修改nginx.conf,不需要重启nginx,只需要执行 nginx -s reload

停止:nginx -s stop(快速停止nginx) 或 nginx -s quit(完整有序的停止nginx)

main        # 全局配置,对全局生效
├── events  # 配置影响 Nginx 服务器或与用户的网络连接
├── http    # 配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置
│   ├── upstream # 配置后端服务器具体地址,负载均衡配置不可或缺的部分
│   ├── server   # 配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块
│   ├── server
│   │   ├── location  # server 块可以包含多个 location 块,location 指令用于匹配 uri
│   │   ├── location
│   │   └── ...
│   └── ...
└── ...
  1. 配置文件由指令与指令块构成;
  2. 指令以 ; 分号结尾
  3. 指令块以 {} 大括号将多条指令组织在一起;
  4. include 语句允许组合多个配置文件以提升可维护性;
  5. 使用 $ 符号使用变量
  6. 部分指令的参数支持正则

server 块可以包含多个 location 块,location 指令用于匹配 uri,语法:

location [ = | ~ | ~* | ^~] uri {
	...
}
  • = 精确匹配路径,用于不含正则表达式的 uri 前,匹配成功不再进行后续的查找;
  • ^~ 用于不含正则表达式的 uri 前,表示如果该符号后面的字符是最佳匹配,采用该规则,不再进行后续的查找;
  • ~ 表示用该符号后面的正则去匹配路径,区分大小写;
  • ~* 表示用该符号后面的正则去匹配路径,不区分大小写。如有多个location的正则能匹配的话,则使用正则表达式最长的那个;

实例:

location ~* /(css | img | js){
    root /usr/local/nginx/static;
    index index.html index.htm;
}

alias

在接受请求的时候在路径上不会加上location

location /css{
    alias /usr/local/nginx/static/css;
    index index.html index.htm;
}
  • alias指定的目录是准确的,即location匹配访问的path目录下的文件直接是在alias目录下查找的
  • root指定的目录是location匹配访问的path目录的上一级目录,这个path目录一定要是真实存在root指定目录下的
  • 使用alias标签的目录块中不能使用rewrite的break;alias指定的目录后面必须要加上"/"符号
  • alias虚拟目录配置中,location匹配的path目录如果后面不带"/",那么访问的url地址中这个path目录后 面加不加"/"不影响访问,访问时它会自动加上"/"; 但是如果location匹配的path目录后面加上"/",那么访问的url地址中这个path目录必须要加上"/",访问时它不会自动加上"/"。如果不加上"/",访问就会失败!
  • root目录配置中,location匹配的path目录后面带不带"/",都不会影响访问。

UrlRewrite

Nginx配置与应用场景

nginx.conf
image.png

worker_processes :worker进程数量,默认为1

worker_connections :单个worker进程可接受连接数,默认为1024

include mime.types 引入http mime类型

default_type application/octet-stream 如果mime类型没匹配上,默认使用二进制流的方式传输。

sendfile on 使用linux的 sendfile(socket, file, len) 高效网络传输,也就是数据0拷贝。

未开启sendfile: image.png

开启sendfile: image.png

虚拟主机

原本一台服务器只能对应一个站点,通过虚拟主机技术可以虚拟化成多个站点同时对外提供服务 image.png

image.png

servername匹配规则

我们需要注意的是servername匹配分先后顺序,写在前面的匹配上就不会继续往下匹配了。

  • 完整匹配
server_name vod.mmban.com www1.mmban.com;
  • 通配符匹配
server_name *.mmban.com
# 或
server_name vod.*;

正则匹配

server_name ~^[0-9]+\.mmban\.com$;

反向代理

反向代理

location / { 
    proxy_pass http://www.baidu.com; # 访问主机时跳到baidu
}

负载均衡

将压力分摊到多台服务器

  1. 轮询(默认) 请求按时间顺序分配到不同的服务器,适合服务器配置相当
  2. 加权轮询 指定服务器权重,权重和访问比例成正比。用于服务器性能不均
  3. ip_hash 上述方式存在问题:用户在某台服务器登录,第二次请求定位到另一个服务器,登录信息丢失。通过ip_hash解决:客户再次访问时,将请求通过hash算法,自动定位到之前的服务器。 基于反向代理的负载均衡

反向代理的负载均衡

在proxy_pass的http://后随便写个名称

在server的上面(同一层级)添加一个,自己可以多开几台虚拟机跑nginx

upstream 你刚刚写的名称{
    server 192.168.230.121:80;
    server 192.168.230.111:80;
}

image.png

加权

upstream 你刚刚写的名称{
    server 192.168.230.121:80   weight=10 down; 
    server 192.168.230.111:80   weight=1;
    server 192.168.230.101:80   weight=1 backup;
}
  • down:当前server不参与负载均衡
  • backup:其他所有非backup机器down或无法服务时,请求打到backup机器