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

Posted wincheshe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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重新加载配置文件

Nginx基础入门之fastcgi模块常用配置项说明


 在LNMP环境中,我们都知道nginx如果要解析php脚本语言,就必须通过配置fastcgi模块来提供对php支持,那么在配置fastcgi的时候,关于fastcgi配置项的值应该怎么设置才能让其发挥出更出色的性能呢,下面就讲讲关于nginx模块中fastcgi这部分通用参数介绍

1.1 fastcgi_connect_timeout 

配置语法:  fastcgi_connect_timeout 时间(单位为s) 

默认值: fastcgi_connect_timeout 60s

配置区域: http server location 

配置项说明: 指定nginx与后端fastcgi server连接超时时间

1.2 fastcgi_send_timeout 

配置语法:  fastcgi_send_timeout 时间(单位为s) 

默认值: fastcgi_send_timeout 60s;

配置区域: http server location 

配置项说明:指定nginx向后端传送请求超时时间(指已完成两次握手后向fastcgi传送请求超时时间)

1.3 fastcgi_read_timeout 

配置语法:  fastcgi_read_timeout 时间(单位为s) 

默认值:  fastcgi_send_timeout 60s;

配置区域: http server location 

配置项说明:指定nginx接受后端fastcgi响应请求超时时间 (指已完成两次握手后nginx接受fastcgi响应请求超时时间)

1.4 fastcgi_buffer_size 

配置语法:  fastcgi_buffer_size size (单位为k,一般为4的整数倍) 

默认值:  fastcgi_buffer_size 4k|8K

配置区域: http server location 

配置项说明:指定nginx读取fastcgi响应第一部分需要用多大的缓冲区,这个值表示将使用一个64kb的缓冲区响应第一部分应答(应答头)可以设置为fastcgi_buffers缓存区大小

1.5 fastcgi_buffers 

配置语法:  fastcgi_buffers  num  size (单位为k,一般为4的整数倍) 

默认值:  fastcgi_buffers 8 4k|8K

配置区域: http server location 

配置项说明: 指nginx需要用多大的缓冲区缓冲fastcgi的应答请求(整个应答),如果一个php脚本所产生的页面大小为256kb,那么会分配4个64kb缓冲区来缓存,如果页面大于256kb,那么大于256kb的部分会缓存到fastcgi_temp指定的路径中,但是因为内存中数据处理远快于磁盘, 所以这个值应该为站点中php所产生的页面大小的中间值, 如果站点大部分php脚本产生的页面为:256kb, 那么可以设置成成"8 16k  4 64k"

1.6 fastcgi_busy_buffers_size 

配置语法:fastcgi_busy_buffers_size size (单位为K,一般为fastcgi_buffers值的2倍)

默认值:  fastcgi_busy_buffers  8k|16K

配置区域: http server location 

配置项说明:整个数据请求需要多大的缓存区,建议设置为fastcgi_buffers值的两倍

1.7 fastcgi_temp_file_write_size

配置语法:fastcgi_temp_file_write_size size (单位为K,一般为fastcgi_buffers值的两倍)

默认值: fastcgi_temp_file_write_size  8k|16K

配置区域: http server location 

配置项说明:写入缓存文件使用多大的数据块,默认值是fastcgi_buffer值的2倍

1.8 fastcgi_temp_path 

配置语法:fastcgi_temp_path path (临时文件存放路径)

配置区域: http server location 

配置项说明:fastcgi临时文件存放路径

1.9 fastcgi_cache_path

配置语法:fastcgi_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];        

配置区域: http server location 

配置项说明:定义fastcgi缓存的路径及其他设置

1.10 fastcgi_cache 

配置语法:fastcgi_cache zone |off (其中zone对应fastcgi_cache_path 中zone名称)

配置区域: http server location 

默认值: fastcgi_cache off

配置项说明:开启fastcgi_cache并为其定义一个名称,可以防止nginx 502错误,降低cpu负载,不过也会引起其他问题,根据需求来选择

1.11 fastcgi_cache_valid

配置语法:fastcgi_cache_valid {code} time

配置区域: http server location 

配置项说明:为指定的应答代码指定缓存时间

例如

fastcgi_cache_valid 200 302 1h; 
fastcgi_cache_valid any 1m; 
 

上面意思就是对于状态码为200 302的网页缓存1小时,其他页面缓存1分钟

1.12 fastcgi_cache_key

配置语法:fastcgi_cache_key value  

配置区域: http server location 

配置项说明:以某个值为key,Nginx会取这个key的md5作为缓存文件 如果设置了缓存哈希目录,Nginx会从后往前取相应的位数做为目录

例如:

fastcgi_cache_key "$request_method://$host$request_uri";

1.13 fastcgi_cache_min_uses  
配置语法:fastcgi_cache_min_uses  

配置区域: http server location 

配置项说明:URL至少经过多少次请求将被缓存

1.14 fastcgi_cache_use_stale
配置语法:fastcgi_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_503 |http_403 | http_404 | off ...;

默认值: fastcgi_cache_use_stale off

配置区域: http server location 

配置项说明:对一些错误提示code,nginx会使用到fast_cache缓存




本文出自 “菜鸟的成长记” 博客,请务必保留此出处http://blief.blog.51cto.com/6170059/1739655

以上是关于Nginx基础 Nginx 的常用配置快速入门,助力前端er更好的进行前后端开发的主要内容,如果未能解决你的问题,请参考以下文章

Nginx基础入门之gzip常用配置项说明

Nginx基础入门之uptream负载均衡常用配置项说明

Nginx快速入门

Nginx基础入门之fastcgi常用配置项说明

百度云网盘-25企业级刚需Nginx入门,全面掌握Nginx配置+快速搭建高可用架构

Nginx | 万字文章助你从入门到实践!