【Nginx】基础 Nginx 的常用配置快速入门,助力前端er更好的进行前后端开发

配置文件示例

nginx配置文件示例

########### 每个指令必须有分号结束。#################
#user administrator administrators;  #配置用户或者组,默认为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 index.html index.htm;  #设置默认页
           proxy_pass  http://mysvr;  #请求转向mysvr 定义的服务器列表
           deny 127.0.0.1;  #拒绝的ip
           allow 172.18.5.54; #允许的ip           
        } 
    }
}

location块

root和alias

一般来说,我们以请求路径作为文件夹路径 以后续的参数为文件名

location /static/tomcat {  
    root /data/moon;  #后面可以加/也可以不加
    alias /data/sun/; #后面必须加/
}

对于如上配置 发送请求xxx/static/tomcat/pic.jpg

  • root会去找/data/moon/static/tomcat/pic.jpg

  • alias会去找/data/sun/pic.jpg

nginx正则匹配规则
字符含义
^匹配输入字符串的起始位置
$匹配输入字符串的结束位置
*匹配前面的字符零次或多次
+匹配前面的字符一次或多次
?匹配前面的字符零次或一次
.匹配除\n之外的任何单个字符 使用[.\n]可以匹配包括\n在内的任意字符
****转义符
\d匹配纯数字
{n}重复n次
{n,}重复n次或更多次
[c]匹配单个字符c
[a-z]匹配a-z小写字母的任意一个
[a-zA-Z]匹配a-z小写字母或A-Z大写字母的任意一个
()表达式的开始和结束位置
|或运算符
显示目录结构

location = /xx/ {#这个最后的/一定要带
autoindex on;#开启显示文件夹结构
autoindex_exact_size off;#显示文件大小
autoindex_localtime on;#显示文件时间
}
配置跨域
location /img/ {
 # 允许的源
add_header Access-Control-Allow-Origin *;
 #允许的请求方式
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
if ($request_method = 'OPTIONS') {
            return 204;
}
}

nginx全局变量

全局变量表

变量名含义
.$remote_addr 用以记录客户端的ip地址
$http_x_forwarded_for
$remote_user用来记录客户端用户名称
$time_local用来记录访问时间与时区
$request用来记录请求的url与http协议
$status用来记录请求状态;成功是200
$body_bytes_s ent记录发送给客户端文件主体内容大小
$http_referer用来记录从哪个页面链接访问过来的
$http_user_agent记录客户端浏览器的相关信息

日志详细配置

Nginx日志主要分为两种

  • access_log(访问日志)

    可以应用access_log指令的作用域分别有httpserverlocationlimit_except。也就是说,在这几个作用域外使用该指令,Nginx会报错

    设置日志

    access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]]; # 设置访问日志
    access_log off; # 关闭访问日志
    
变量定义
path指定日志的存放位置
format指定日志的格式。默认使用预定义的combined
buffer用来指定日志写入时的缓存大小。默认是64k
gzip日志写入前先进行压缩 从1到9数值越大压缩比越高,同时压缩的速度也越慢。默认是1
flush设置缓存的有效时间。如果超过flush指定的时间,缓存中的内容将被清空
if条件判断。如果指定的条件计算为0或空字符串,那么该请求不会写入日志

定义日志格式

log_format name [escape=default|json] string ...;
#name 格式名称。在access_log指令中引用。
#escape 设置变量中的字符编码方式是json还是default,默认是default。
#string 要定义的日志格式内容。该参数可以有多个。参数中可以使用Nginx变量

常用的日志格式中的变量

变量含义
$bytes_sent发送给客户端的总字节数
$body_bytes_sent发送给客户端的字节数,不包括响应头的大小
$connection连接序列号
$connection_requests当前通过连接发出的请求数量
$msec日志写入时间,单位为秒,精度是毫秒
$pipe如果请求是通过http流水线发送,则其值为"p",否则为“."
$request_length请求长度(包括请求行,请求头和请求体)
$request_time请求处理时长,单位为秒,精度为毫秒,从读入客户端的第一个字节开始,直到把最后一个字符发送张客户端进行日志写入为止
$status响应状态码
$time_iso8601标准格式的本地时间,形如“2017-05-24T18:31:27+08:00”
$time_local通用日志格式下的本地时间,如"24/May/2017:18:31:27 +0800"
$http_referer请求的referer地址。
$http_user_agent客户端浏览器信息。
$remote_addr客户端IP
$http_x_forwarded_for当前端有代理服务器时,设置web节点记录客户端地址的配置,此参数生效的前提是代理服务器也要进行相关的x_forwarded_for设置。
$request完整的原始请求行,如 "GET / HTTP/1.1"
$remote_user客户端用户名称,针对启用了用户认证的请求
$request_uri完整的请求地址,如 "https://daojia.com/"
  • error_log(错误日志)

    格式

    error_log file [level];
    Default:
    error_log logs/error.log error;
    
    变量名变量含义
    file指定日志的写入位置
    level值可为 debug, info, notice, warn, error, crit, alert,emerg 只有日志的错误级别等于或高于level指定的值才会写入错误日志中。默认值是error

nginx重定向rewrite

  1. Rewrite跳转场景

    • URL看起来更规范、合理

    • 企业会将动态URL地址伪装成静态地址提供服务

    • 网址换新域名后,让旧的访问跳转到新的域名上

    • 服务端某些业务调整

  2. rewrite语法

    rewrite <regex正则表达式>  <replacement要跳转的内容>  [flag可选的参数]
    

flag参数

标记说明
last表示完成重写, 重写后, 马上发起一个新请求, 再次进入server块,重试location匹配,超过10次匹配不到报500错误, 浏览器地址不变
break本条规则匹配完成即终止,不再匹配后面的任务规则
redirect返回302临时重定向,浏览器地址会显示跳转后的URL地址,爬虫不会更新url
permanent返回301永久重定向,浏览器地址会显示跳转后的URL地址,爬虫更新url
  1. 重定向示例

    示例

server {
   listen       80;
   server_name  www.yzx020530.yzx;       #域名修改   
   charset utf-8;
    access_log  /var/log/nginx/yzx.access.log;      #日志修改
    location / {
    #添加域名重定向
        if ($host = 'www.fbc.com'){             #$host为rewrite全局变量,代表请求主机头字段或主机名
            rewrite ^/(.*)$ http://www.new.com/$1 permanent;     #$1为正则匹配的内容,即域名后边的字符串
        }
        root   html;
        index  index.html index.htm;
    }
}

压缩策略

# 开启gzip 
gzip on;
# 开始压缩的小长度 
gzip_min_length 1000;  
#1k 
# 压缩级别(级别越高,压的越小,越浪费CPU计算资源) 
gzip_comp_level 5; 
# 1-9 # 对哪些类型的文件用压缩 如txt,xml,html ,css 
# jpg,png本身就是压缩格式,不建议用
gzip gzip_types text/plain application/json application/x-javascript application/css application/xml application/xml+rss text/javascript;
location /static {
  alias /usr/local/apps/static/dlib-19.18/;
# 显示目录    
  autoindex on;
}

反向代理

  • 正向代理

    正向代理是指客户端与目标服务器之间增加一个代理服务器,客户端直接访问代理服务器,在由代理服 务器访问目标服务器并返回客户端并返回 。这个过程当中客户端需要知道代理服务器地址,并配置连接

  • 反向代理

    反向代理是指客户端访问目标服务器,在目标服务内部有一个统一接入网关将请求转发至后端真正处理 的服务器并返回结果。这个过程当中客户端不需要知道代理服务器地址,代理对客户端而言是透明的

代理相关参数

proxy_pass # 代理服务
proxy_redirect off; # 是否允许重定向
proxy_set_header Host $host; # 传 header 参数至后端服务
proxy_set_header X-Forwarded-For $remote_addr; # 设置request header 即客户端IP地址
proxy_connect_timeout 90; # 连接代理服务超时时间
proxy_send_timeout 90; # 请求发送最大时间
proxy_read_timeout 90; # 读取最大时间
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;

反向代理路径问题

  • 绝对路径

    在路径后加/表绝对路径,请求路径自动去掉匹配路径部分

    请求路径:http://127.0.0.1/proxy/test.txt

    nginx请求路径: http://124.221.93.15:8080/test.txt

    location /proxy {
        proxy_pass http://124.221.93.15:8080/
    }
    
  • 相对路径

    在路径后不加/表相对路径,请求路径去掉匹配路径部分

    请求路径: http://127.0.0.1/proxy/test.txt

    nginx请求路径: http://127.0.0.1/proxy/test.txt

    location /proxy {
        proxy_pass http://124.221.93.15:8080
    }
    
  • 添加url

    在路径后添加自定义路径

    请求路径: http://127.0.0.1/proxy/test.txt

    nginx请求路径:http://124.221.93.15/static/test.txt

    location /proxy {
        proxy_pass http://124.221.93.15:8080/static/;
    }
    
  • 去掉前缀

    利用rewrite实现去除前缀

    "^/resource/(.)$":匹配路径的正则表达式,用了分组语法就是*(.)*,把/resource/以后的所有部分当做1组

    /$1:重写的目标路径,这里用$1引用前面正则表达式匹配到的分组(组编号从1开始,也就是api),即/resource/后面的所有。这样新的路径就是除去/resource/以外的所有,就达到了去除/resource前缀的目的;

    break:指令,重写路径结束后

    location /resource {
        rewrite  ^/resource/?(.*)$ /$1 break;
        proxy_pass http://124.221.93.15:8080/; # 转发地址
    }
    

负载均衡

示例代码

示例

upstream backend {    
ip_hash;    
server 127.0.0.1:8088 weight=1;    
server 127.0.0.1:8080 weight=1;    
#server 127.0.0.1:9080 backup;     
}

server{
  listen       80;  
  server_name  localhost;        
location / {        
  proxy_set_header Host   $host;        
  proxy_set_header X-Real-IP  $remote_addr;        
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;        
  # 反向代理          
  proxy_pass http://backend/;     
  }
}

upstream参数

service #反向服务地址 加端口
weight #权重
max_fails #失败多少次 认为主机已挂掉则,踢出
fail_timeout #踢出后重新探测时间
backup #备用服务
max_conns #允许最大连接数
slow_start #当节点恢复,不立即加入,而是等待 slow_start 后加入服务对列

负载均衡算法

  • 轮询(默认)

    每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除

  • 指定权重

    指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况

  • ip_hash

    每个请求按访问ip的hash结果分配 可以解决session的问题

  • least_conn

    把请求转发给连接数较少的后端服务器

  • fair(第三方)

    按后端服务器的响应时间来分配请求,响应时间短的优先分配

  • url_hash(第三方)

    按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端
    服务器为缓存时比较有效

配置ssl证书

SSL 证书

nginx命令

命令含义
./nginx -v查看版本号
./nginx -t检查配置文件
/nginx -t -c conf_path检查conf_path路径的配置文件
./nginx -c conf_path启动conf_path路径的配置文件
./nginx -s stop暴力停止nginx
./nginx -s quit优雅停止nginx 需要进程完成当前工作后再停止
./nginx -s reload重新加载配置文件
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值