美文网首页
nginx 常用配置记录

nginx 常用配置记录

作者: 临冬zx | 来源:发表于2018-04-26 15:32 被阅读0次

    HTTP模块(核心模块,也是主要用到的模块)

    server模块

    server模块是http的子模块,它用来定义一个虚拟主机

    例子:

    server {
        listen      80;
        server_name localhost www.example.com;
        root        /Users/yangyi/www;# 全局定义,表示在该server下web的根目录
        client_max_body_size 100M;
        keepalive_timeout 20;
        index       index.php index.html index.htm; 
        charset     utf-8;
        access_log  logs/host.access.log  main; #用来指定此虚拟主机的访问日志存放路径,输出格式为main。
        error_log   logs/host.error.log  error; #错误日志存放路径,输出格式为error。
        error_page  404  /404.html; #状态码为404时的时候的网页地址,还可定义500,502之类的
        ....
    }
    

    以上一些配置为在该server下具有全局性,例如 root,可在location中重新定义root

    关于server_name

    用来指定IP地址或者域名,多个域名之间用空格分开

    当我们想定义多个server监听同一个端口但访问的host不一样时,server_name就派上用场了。nginx会根据HTTP请求的header Host选择nginx配置文件里符合条件的server_name的server配置

    匹配顺序如下

    1. 完全匹配的server_name;
    2. 后缀匹配: *.example.com;
    3. 前缀匹配: www.example.*;
    4. 正则匹配: ~\w+.com;
    5. listen指令里配置了default或default_server的server;如`listen 80 default`
    6. 第一个匹配上listen的server。

    所以当我们监听的的端口只有一个server配置的时候,server_name 可以不填

    关于root和alias的区别

    两者作用差不多,区别在于最终映射的地址不同,例:

    location /request_path/image/ {
        # 如果现在访问 /request_path/image/a/b.jpg,root映
        # 射的地址为/local_path/image/request_path/image/a/b.jpg,
        # 而alias为/local_path/image/a/b.jpg
        root    /local_path/image/;
        alias   /local_path/image/; 
    }
    

    location模块

    最主要和最复杂的配置,通过定位和解析url,判断该选择什么配置,支持正则和条件判断;

    简单例子,匹配所有请求

    location / {
        root   /home/www/html;
        index  index.php index.html index.htm;
    }
    
    

    一个正则匹配的例子:

    # 匹配.php结尾的请求
    location ~ \.php$ {
        ....
    }
    
    

    一个反向代理的例子:

    # 匹配到/api开头的路由时候,将请求转发到http://192.168.0.1,但是通常不是直接填写地址,而是设置一个`upstream`配置,后面会提到
    location /api {
        proxy_pass  http://192.168.0.1; #请求转向地址192.168.0.1
        #不修改被代理服务器返回的响应头中的location头
        proxy_redirect off;
        #使用nginx反向代理后,如果要使服务获取真实的用户信息,用以下的设置
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    
    

    vue-router、react-router等路由框架要开启history模式可以选择的nginx配置的例子

    location / {
      alias     static/;
      try_files $uri $uri/ /index.html;
    }
    

    location的匹配规则和顺序

    1. 第一种是 = 类型,表示精确匹配,优先级最高,一旦匹配到忽略之后的正则匹配

    2. ^~ 类型,表示前缀匹配,是字符串开头匹配而非正则匹配,当匹配到该规则时,停止往下面的搜索,所以如果存在两个^~ 匹配的时候要注意有顺序之分。优先级比正则高。

    3. ~~*,正则匹配,两者区别是后者不区分大小写。有顺序之分,匹配到第一个正则停止搜索。

    4. /uri,普通字符串匹配,无顺序之分,会选择匹配长度最长的配置。

    5. / 通用匹配,匹配所有请求

    还有一种特殊匹配类型 @url,只用于nginx内部跳转,例:

    location / {
        root /var/www/html;
        error_page 404 @40x;
    }
    location @40x {
      root /var/www/errors/40x.html;
    }
    

    upstream模块

    upstream后端服务器提供简单的负载均衡(轮循调度和客户端 IP)。

    例子:

    upstream backend  {
      server backend1.example.com weight=5;
      server backend2.example.com:8080;
      server unix:/tmp/backend3;
    }
     
    server {
      location / {
        proxy_pass  http://backend;
      }
    }
    

    有常用两种负载均衡支持调度算法,分别是 weightip_hash 。weight 模式下可以为每个 server 设置weight值,weight值越大,分配到的访问机率越高,ip_hash 为同一个ip的
    分配同一个后端服务器,这样我们不用解决session共享问题。

    include

    include指令 使nginx配置更加灵活,将部分配置直接拆分出来,分成不同的配置文件

    例子:

    http {
        include mime.types;
        include vhost/*.conf; # 虚拟主机配置
    }
    

    关于 mime.types:

    mime type 和 文件扩展名的对应关系一般放在 mime.types 里,然后 用 include mime.types;
    mime.types作用:通过文件的扩展名设置了Content-Type,Nginx如果没找到对应文件的扩展名的话,就使用默认的Type,默认Type通用 default_type 定义,比如 default_type application/octet-stream ;
    完整的 mime.types 配置:https://github.com/h5bp/server-configs-nginx/blob/master/mime.types

    关于 vhost/*.conf :

    一个虚拟主机对一个文件配置,放到vhost文件夹下面,然后通过include指令包含进来,这样更便于维护和管理

    gzip

    gzip 压缩,用来对静态资源进行压缩,需要客户端同时支持才有效。

    配置:

    http {
        #开启gzip压缩
        gzip  on;
        #IE6的某些版本对gzip的压缩支持很不好,故关闭
        gzip_disable "MSIE [1-6]\.(?!.*SV1)";
        #HTTP1.0以上的版本都启动gzip
        gzip_http_version 1.0;
        #指定哪些类型的相应才启用gzip压缩,多个用空格分隔
        gzip_types 
        application/javascript 
        application/json 
        text/css 
        text/plain;
        # 压缩等级,可选1-9,值越大压缩时间越长压缩率越高,
        # 通常选5,能压缩到原来的1/4
        gzip_comp_level 5;
    }
    

    参考:

    http://tool.oschina.net/apidocs/apidoc?api=nginx-zh
    https://www.jianshu.com/p/bed000e1830b

    相关文章

      网友评论

          本文标题:nginx 常用配置记录

          本文链接:https://www.haomeiwen.com/subject/vyfmlftx.html