nginx学习笔记1

这里主要是记录本人在使用nginx搭建服务器的时候,遇到的一些问题,以及结合查找资料的一些学习笔记。

编写自己的配置文件

Nginx的配置文件在目录默认是/etc/nginx。

如果我们自己编写一些新的配置文件的话,这里我们建议将新的配置文件归到sites-available目录下。然后这里讲解一下需要用到该目录下有两个子目录:

sites-available,存放所有可用的网站配置(这里目录存放真正用到的配置);

sites-enabled,Nginx运行时读取该目录下的配置文件,该目录下的文件都是软连接,指向sites-available下的实际配置文件。同时只有在sites-enabled下有软连接的配置文件才会生效。

下面将首先在sites-available目录下创建配置文件,使用域名www.example.com作为配置文件名称,然后在sites-enabled下创建一个指向该配置文件的软连接使其生效。

为了避免配置文件冲突,需要将默认的default配置文件在sites-enabled下的软连接删除。

##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# http://wiki.nginx.org/Pitfalls
# http://wiki.nginx.org/QuickStart
# http://wiki.nginx.org/Configuration
#
# Generally, you will want to move this file somewhere, and start with a clean
# file but keep this around for reference. Or just disable in sites-enabled.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##

# Default server configuration
#
server {
listen 9090 ;

root /home/xxx/www_data;

# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;

server_name _;

location / {
root /home/xxx/www_data/html;
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}

location /soft {
root /home/xxx/www_data/soft;
}

location ~* \.(mov|mp4|mp3)$ {
        #这里表示使用正则表达式,不区分大小写
root /home/xxx/www_data/video/;
}
}

location配置规则

对于配置文件中的location配置规则,这里我们简单的说明一下:


location语法

1.语法规则: 
location [=|~|~*|^~] /url/ { … }

2.location表达式类型

~ 表示执行一个正则匹配,区分大小写

~* 表示执行一个正则匹配,不区分大小写

^~ 表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其他location。

= 进行普通字符精确匹配。也就是完全匹配。

@ "@" 定义一个命名的 location,使用在内部定向时,例如 error_page, try_files

!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则

3.优先级规则

等号类型(=)的优先级最高。一旦匹配成功,则不再查找其他匹配项

前缀普通匹配(^~)优先级次之。不支持正则表达式。使用前缀匹配,如果有多个location匹配的话,则使用表达式最长的那个

正则表达式类型(~ ~*)的优先级次之。一旦匹配成功,则不再查找其他匹配项

常规字符串匹配,如果有多个location匹配的话,则使用表达式最长的那个

4.说明

4.1先判断精准命中,如果命中,立即返回结果并结束解析过程

4.2若未结束,判断前缀普通命中,如果有多个命中,使用表达式“最长”的命中结果,结束解析过程

4.3若未结束,继续判断正则表达式的匹配,按正则表达式顺序为准,由上至下一旦匹配成功1个,立即返回结果,并结束解析过程

4.4若未结束,继续普通命中,普通命中和前缀普通命中相似,顺序无所谓,按照location表达式的长短来确定命中结果

配置文件中几个需要了解的知识

  1. try_files解决刷新404的问题

    location / {
               root   /mydata/transfer/html/helper/dist;

               index  index.html index.htm;

               try_files  $uri $uri/ /index.html;
          }

    在配置中加上try_files,意思跟翻译差不多,“尝试读取文件”。

    uri这个是nginx的一个变量,存放着用户访问的地址,例如http://localhost:8200/chooseSize那么uri就是/chooseSize;uri/代表访问的是一个目录例如http://localhost:8200/chooseSize/那么就是/chooseSize/;最后/index.html就是我们首页的地址。

    最终上面的意思是:

    1. 如果第一个存在$uri,直接返回;

    2. 不存在的话读取第二个$uri/,如果存在,读取返回;

    3. 如果还是不存在,就会fall back到 try_files 的最后一个选项 /index.html,发起一个内部 “子请求”,也就是相当于 nginx 发起一个 HTTP 请求到 http://localhost:8200/index.html,再通过前端路由到/chooseSize。

       

  2. http的url和location的访问

    location ~* \.(mov|mp4|mp3)$ {
            #这里表示使用正则表达式,不区分大小写
    root /home/xxx/www_data/video/;
    }

    如果一个请求的URI是http:xxxx/video/a.mp4时,web服务器将会返回服务器上:

    /home/xxx/www_data/video/video/a.mp4的文件,而不是/home/xxx/www_data/video/a.mp4文件。

     

 

posted @ 2021-05-02 19:02  lihaiping  阅读(128)  评论(0编辑  收藏  举报